我最近一直致力于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;
}
}
然而,球碰撞仍然不想工作,我不知道为什么?
答案 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)
{
}
}