我正在使用libGDX试图制作一个自上而下的2D游戏,并沿着口袋妖怪的方向移动。但是,我不确定如何实现这一点。
我希望玩家能够按下一个键(即:箭头键或WASD)以便移动,但是,当玩家释放钥匙时,我不希望角色停止移动直到它和#39; s位置沿着由32x32像素正方形组成的单元格网格。
那么我将如何创造一个“看不见的”' 32x32像素单元格的网格,只要它位于其中一个单元格的顶部,我的角色才会停止移动?
到目前为止,我只进行了逐像素移动。其中,我考虑过我可以设置一个布尔值,说明角色是否在移动,如果角色落在正确的区域,只是改变它,但我还没有想到任何方法来实现它。
这是我用于我的逐像素移动的方法(libGDX覆盖了键输入,它根据玩家的边界框在哪里绘制精灵):
public void generalUpdate() {
if(Gdx.input.isKeyPressed(Keys.A) || Gdx.input.isKeyPressed(Keys.LEFT)) {
if (anim_current == Assets.anim_walkingLeft)
if(player.collides(wall.bounds)) {
player.bounds.x += 1;
}
else
player.dx = -1;
else
anim_current = Assets.anim_walkingLeft;
Assets.current_frame = anim_current.getKeyFrame(stateTime, true);
}
else if (Gdx.input.isKeyPressed(Keys.D) || Gdx.input.isKeyPressed(Keys.RIGHT)) {
if (anim_current == Assets.anim_walkingRight)
if(player.collides(wall.bounds)) {
player.bounds.x -= 1;
}
else
player.dx = 1;
else
anim_current = Assets.anim_walkingRight;
Assets.current_frame = anim_current.getKeyFrame(stateTime, true);
}
else if (Gdx.input.isKeyPressed(Keys.W) || Gdx.input.isKeyPressed(Keys.UP)) {
if (anim_current == Assets.anim_walkingUp)
if(player.collides(wall.bounds)) {
player.bounds.y += 1;
}
else
player.dy = -1;
else
anim_current = Assets.anim_walkingUp;
Assets.current_frame = anim_current.getKeyFrame(stateTime, true);
}
else if (Gdx.input.isKeyPressed(Keys.S) || Gdx.input.isKeyPressed(Keys.DOWN)) {
if (anim_current == Assets.anim_walkingDown)
if(player.collides(wall.bounds)) {
player.bounds.y -= 1;
}
else
player.dy = 1;
else
anim_current = Assets.anim_walkingDown;
Assets.current_frame = anim_current.getKeyFrame(stateTime, true);
}
else {
Assets.current_frame = anim_current.getKeyFrames()[0];
player.dx = player.dy = 0;
}
player.bounds.x += player.dx;
player.bounds.y += player.dy;
}
答案 0 :(得分:0)
您的代码非常混乱,我不想尝试修复它,但一般情况下您可以解决问题:
有一个布尔值来表示你是否正在移动。我们称之为isMoving
。还有一种存储方向的方法(可能是0到3之间的整数?)。我们称之为dir
。
按键时,将isMoving
设为true。如果您与网格对齐,请将dir
更新为您按下的键的方向。
如果您没有按住键,请将isMoving
设置为false。
当您移动角色时,如果isMoving
为真并且它们未与网格对齐,则移动是dir
所代表的方向。如果它们与网格对齐,则将isMoving
设置为false并且不要移动。
// Only including one key, process is same for others.
if (rightKey) {
isMoving = true;
if (aligned)
dir = 0;
} /* chain other keys in here */ else {
isMoving = false;
}
if (isMoving) {
if (!aligned) {
move(dir);
render(dir);
} else {
}
}
我刚刚意识到它可能无法在其当前状态下工作:/。我希望这至少可以让你知道该怎么做。我会尝试再修改一下......