问题描述
我试图让位图碰到窗口的侧面时反射/反射。
基本上,我想初始化要移动的位图(如BallSpeedX / Y所示)。当它碰到顶部或底部时,应该改变方向(BallSpeedY应该反转)。当前,当位图碰到墙时,它会短暂更改其Y方向,然后再还原为原始方向。有没有一种方法可以初始化X和Y速度,但是一旦撞到墙上,就保持新的方向(例如在while循环中)?
int BallSpeedX = 3;
int BallSpeedY = 5;
public void Draw(Window screen)
{
_PlayerBitmap.Draw(X,Y);
X += BallSpeedX;
// Y += BallSpeedY;
_PlayerBitmap.Draw(X,Y);
if (Y < screen.Height)
{ //Off bottom
Y += BallSpeedY *-1;
_PlayerBitmap.Draw(X,Y);
}
if (Y > screen.Height)
{ //Off top
Y += BallSpeedY *-1;
_PlayerBitmap.Draw(X,Y);
}
}
解决方法
速度是2D向量,因此,每当“球”击中边缘时,都应更改相关坐标的符号。
int BallSpeedX = 3;
int BallSpeedY = 5;
int ballWidth = 10;
int ballHeight = 10;
public void Draw(Window screen)
{
X += BallSpeedX;
if (X <= 0) {
BallSpeedX = -BallSpeedX;
X = 0;
}
else if (X >= (screen.Width - ballWidth)) {
BallSpeedX = -BallSpeedX;
X = screen.Width - ballWidth;
}
/// (same for Y-coords)
_PlayerBitmap.Draw(X,Y);
}
这是一个非常简化的版本,但我认为这应该是一个很好的起点。