如何使用winapi制作移动动画

时间:2015-01-18 21:40:47

标签: c++ winapi animation pixels

我需要使用WinAPI制作移动球的动画。 我是使用Ellipse函数执行此操作的:

RECT getBallRect() {
    return {
        // x and y -- coords of ball center
        x - ballRaduis,
        y - ballRaduis,
        x + ballRaduis,
        y + ballRaduis
    };
}
RECT ballrc = getBallRect();
Ellipse(hdc, ballrc.left, ballrc.top, ballrc.right, ballrc.bottom);

如果在下一步计时器上做了这个

x += 1;
y += 1;

并使用上面的代码渲染球。然后,球将向右和向下移动1px(此处角度为45度)。但是如果我想在5,10,30和其他度数上移动球。我该怎么办? 我当然可以这样做

x += 1;
y += 2;

现在角度大约是60度,但球会在y coord上移动2个像素。这对我来说很糟糕,因为我应该在每个计时器滴答时仅以1 px移动球。

1 个答案:

答案 0 :(得分:0)

你必须做一些简单的三角学。目前,你正在做的是你说x + = cos(45)和y + = sin(45),然后你将每个乘以sqrt(2)。因此,要将球移动到水平面以上5度,您需要x + = cos(5)和y + = sin(5)。你也可以将每个乘以sqrt(2),但这并不重要,因为它只是一个比例因子。祝你好运!