在视频游戏中说,我需要同时听两个while循环,一个到:
while (up == true)
movePlayerX(2)
和另一个:
while (right == true)
movePlayerY(2)
如果符合以下条件,如何让玩家同时向上移动?
int main()
{
while(1)
printf("hello");
while(1)
printf("world");
return(0);
}
只会回来"你好"?是否可以让2个while循环同时工作或者它们是否必须轮流?我知道在汇编级别他们必须轮流进行高级编程:
while(1)
{
while( up == true)
movePlayerX(2)
break;
while( right == true)
movePlayerY(2)
break;
}
这种情况怎么样:
while(1)
answer = promptUserForData(); //user enters data at their own pace
chart = addAnswerToChart(answer); //char is updated when user updates it
while(1)
chart = someOtherDataThatEffectsChart(randData); //something else effects the chart
while(1)
printOutChart(chart); //chart is constantly being printed out
答案 0 :(得分:2)
对于关于同时运行的多个while的问题,我看到它的唯一方法是使用多个并行线程,在您的情况下没有理由,因为您应该重新构建代码以更智能地工作。
我不知道你如何设置你的游戏,但最好的方法是在步骤中以无限循环执行游戏逻辑。 而不是询问while(up),你的循环看起来应该是这样的:
void mainGameLoop () {
while (!gameQuit) {
handleInput();
handleLogic();
handleDrawing();
}
这样,游戏的每个循环首先处理输入事件(如键盘按下或鼠标点击/移动),而不是游戏的逻辑,而不是将其绘制到屏幕上。
对于玩家运动有很多方法,但我建议的是和X / Y加速模型。它的工作方式是,玩家对象有一个xSpeed和ySpeed变量,它告诉他在那个方向上移动的速度。对于运动,那么你要做的是如果按下运动键你增加(或者如果运动是负方向则递减)轴速度或直到它达到你想要的最大速度。
然后在逻辑中你只需添加一个减慢播放器速度的摩擦力,所以如果没有按下移动键,播放器会在几次循环后停止。
最后移动播放器,你只需将xSpeed和ySpeed添加到他的位置。
非常简单的实现看起来像这样。我将使用一些表示输入处理的伪函数。
void handleInput() {
if (keyPressed)
switch(key) {
case upArrow:
ySpeed -= 0.1;
break;
case downArrow:
ySpeed += 0.1;
break;
case leftArrow:
ySpeed -= 0.1;
break;
case rightArrow:
ySpeed += 0.1;
break;
}
}
void handleLogic() {
// Clamp speed values to maximum of |1| speed
if (ySpeed > 1)
ySpeed = 1;
if (ySpeed < -1)
ySpeed = -1;
if (xSpeed > 1)
xSpeed = 1;
if (xSpeed < -1)
xSpeed = -1;
// Friction slowing down the movement if no movement keys are pressed
if (ySpeed > 0)
ySpeed -= 0.05;
else if (ySpeed < 0)
ySpeed += 0.05;
if (xSpeed > 0)
xSpeed -= 0.05;
else if (xSpeed > 0)
xSpeed -= 0.05;
xPosition += xSpeed;
yPosition += ySpeed;
}
值纯粹是为了这里的例子。您可以尝试一下它们来处理您想要的角色。