C#图形在窗口的侧面反弹

问题描述

我试图让位图碰到窗口的侧面时反射/反射。

基本上,我想初始化要移动的位图(如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);
}

这是一个非常简化的版本,但我认为这应该是一个很好的起点。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...