更换球位置时,与墙壁碰撞不适用

时间:2014-12-09 10:09:05

标签: c#

我最近一直致力于Breakout风格的项目,并希望这样一旦用户进入'作弊模式',他们就能够将球移动到所需的方向。

以下是我的代码:https://gist.github.com/anonymous/7589f4f141888c3c32c7

我已将return;包括在我的球类中,因为如果我不这样做,程序将无法识别X和Y的变化。所以基本上,我的问题是,我想要程序忽略现有的x和y速度,如果启用了作弊模式,则使用用户提供的速度。 (意思是如果用户进入作弊模式,程序应该按照x和y坐标停止球的最后位置,并让用户移动它)

我的意思是:

玩家进入作弊模式 - >压了。   - 球不断向上移动,直到它撞到模板的顶部,然后应以与撞击墙壁相反的方向反弹。

如何在我的程序中实现此功能?我使用'if语句'作为布尔作弊模式,返回函数退出moveBall程序(忽略xSpeed和ySpeed但最终阻止球完全移动它,所以玩家必须保持点击Up将球向上移动,否则它会保持原位。

编辑:

好的,我已经解决了球不会移动的问题,我只是为球的X和Y变化添加了一些变量。

以下是我的代码现在的样子:

public void moveBall()
{
    if (Form1.cheatModeClicked == true)
    {
        ballRec.X += cheatX;
        ballRec.Y -= cheatY;

    }
    else
    {
        ballRec.X += xSpeed;
        ballRec.Y -= ySpeed;
    }

}

然而,球碰撞仍然不想工作,我不知道为什么?

1 个答案:

答案 0 :(得分:0)

听起来你需要在球类中添加一个方法,以便在外线设置球的速度。然后,您可以在按下键时调用该方法,具体取决于作弊模式状态。欺骗模式状态无论如何都应存储在球类之外。球本身应该只知道球的东西,而不是像欺骗模式那样的非球概念。

这是一些伪代码,我可能在描述中遗漏了一些内容,但希望它有所帮助

class Form
{
    bool _inCheatMode = false;
    Ball ball;
    void EnterCheatMode()
    {
        _inCheatMode = true;
        ball.SetSpeed(0, 0); //stop the ball
    }

    void ExitCheatMode()
    {
        _inCheatMode = false;
    }

    void KeyDown(Keys key)
    {
        if (_inCheatMode)
        {
            if (key == Keys.Up)
               ball.SetSpeed(0, -1);
        }
    }
}

class Ball
{
    public void SetSpeed(x, y)
    {

    }
}