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