我正在写一个游戏,并试图让一个人用箭头键移动。
我有这段代码
if (Key_Down(DIK_DOWN))
{movedown(player)}
这样可行但是因为我希望每次按下键时玩家都会采取四个步骤,我创建了动画循环。所以玩家不能再输入任何移动命令,直到动画结束,他们已经采取了四个步骤来制作代码。
if(player.move == false)
{
if (Key_Down(DIK_DOWN))
{movedown(player)}
}
问题在于,现在按下一个按钮后,程序的作用就像按下按钮一样,玩家继续移动直到按下另一个方向。
任何人都可以解释外部循环对代码做了什么并修复了问题吗?
它在visual c ++ 2005中编程并直接编写为x 9.c
编辑:
如果我删除了外循环,那么按下按钮只会注册一次,所以我不认为这是移动功能。
答案 0 :(得分:1)
只需跟踪变量中的keystate即可。所以你可以重置一个移动计数器。像这样的东西,结合两者:
int MovingDown = 0;
...
if (!Key_Down(DIK_DOWN)) MovingDown = 0;
else if (MovingDown < 4) {
MovingDown++;
movedown(player);
}
答案 1 :(得分:0)
很难说没有看到更多的代码库,但我猜你在移动播放器后没有重新设置player.move
。你有没有试过在那里贴上一些断裂点以查看被叫的内容以及为什么?
如果删除if(player.move == false)
行,是否会出现同样的问题? ..或者你有别的地方改变了吗?如果您可以发布更多的代码库,例如整个moveown函数和任何其他交互的代码(例如动画代码),它将帮助我们帮助您......
[编辑] 移动了一个宏?也许你有一些特殊的副作用从中消失?如果没有,它应该在函数调用后有一个半冒号。
KEY_DOWN返回什么?这是API调用吗?尝试针对您希望返回的确切值进行测试?