查找缩放元素的正确位置(添加的图)

问题描述 投票:0回答:1

我很难解释这个问题,但是我会尽力而为。

我正在制作游戏。有一个游戏对象区域,一个画布使用“ draw_from”功能-void draw_from(const char *obj, int x, int y, double scale)绘制该区域中的每个对象,因此看起来好像在屏幕上制作了该区域的副本。

这具有使用scale功能的draw_from()参数缩放该区域的优势。

但是,这样做时会出现问题。为简单起见,可以想象该区域中只有两个参与者-一个在另一个之上。当它们按比例缩小时,它们将出现在彼此不同的垂直位置。

我需要为每个对象计算新的正确位置,并将它们传递给draw_from,但是我似乎无法弄清楚该怎么做。如果将这些对象中的每个对象缩小为相同的值,重新计算新位置的正确方法是什么?


这里或多或少是这个问题的恰当例证:

enter image description here

您可以知道draw_from函数将绘制以x / y坐标为中心的对象。要在0:0(左上角)绘制对象,您必须执行draw_from(obj, obj->width/2, obj->height/2, 1.0);不确定缩放是否以这种方式实现,但是我创建了一个函数来获取缩放对象的新宽度和高度:

void character_draw_get_scaled_dimensions (Actor* srcActor, double scale, double* sWidth, double* sHeight)
{
    double sCharacterWidth = 0;
    double sCharacterHeight = 0;

    if(srcActor->width >= srcActor->height)
    {
        sCharacterWidth = (double)srcActor->width * scale / 1.0;
        sCharacterHeight = sCharacterWidth * (double)srcActor->height / (double)srcActor->width;
    }
    else
    {
        sCharacterHeight = (double)srcActor->height * scale / 1.0;
        sCharacterWidth = sCharacterHeight * (double)srcActor->width / (double)srcActor->height;
    }

    if(sWidth)
        (*sWidth) = sCharacterWidth;
    if(sHeight)
        (*sHeight) = sCharacterHeight;
}

换句话说,我需要在缩小范围内保持这些对象之间的距离,并解释了draw_from和/ somehow /如何缩放。我需要正确的参数才能传递给draw_from的x和y参数。从这一点出发,我认为如果继续进行进一步阐述,它将变得太广泛。

c math drawing coordinates scale
1个回答
0
投票

不是我希望的解决方案,但这仍然是解决方案。更加hacky和不太实用(包括性能方面)的解决方案是在屏幕外的画布上以1.0的比例绘制每个对象,然后以所需的任何比例从该画布绘制到主画布。

这样,只应重新定位画布,而不是每个对象。从那里开始真的很容易。我仍然更喜欢常规用途的数学解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.