[更新] 我稍微改变了顺序,所以我super.act(delta)
在方法的最后调用了,这似乎有点帮助!但还不确定。
我的地图有一个正方形系统。所以它是一个 2D 数组,并且 ii 移动一次,图形确实从一个正方形移动到下一个正方形。虽然不可能在 2 个方格之间“停止”这个数字。
当我的角色移动时,我检查是否触摸了触摸板,如果是,我开始下一步。虽然它有时似乎滞后,我不知道为什么!?我真的希望你能找到“滞后”。act()
以下是我如何计算Actor
角色内部的下一步行动:
@Override
public void act(float delta) {
super.act(delta); // so the actions work
if (moveDone) {
if (screen.gameHud.pad.isTouched()) {
// check in which direction is the touchcontroller
if (screen.gameHud.pad.getKnobPercentX() < 0
&& Math.abs(screen.gameHud.pad.getKnobPercentY()) < Math
.abs(screen.gameHud.pad.getKnobPercentX())) {
// checkt if the |x|>|y|
if (checkNextMove(Status.LEFT)) {
this.status = Status.LEFT;
move(Status.LEFT);
this.screen.map.mapArray[(int) (this.mapPos.x)][(int) this.mapPos.y] = Config.EMPTYPOSITION;
this.screen.map.mapArray[(int) (this.mapPos.x - 1)][(int) this.mapPos.y] = Config.CHARSTATE;
this.mapPos.x--;
moveDone = false;
}
} else if //.... rest is the same just with other directions
else{ //if touchpad isnt touched!
setIdle();
}
updateSprite(delta); //just change the textureRegion if its time for that
} //methode end
好的,我相信您需要更多信息。像这样的检查动作:
case LEFT:
if (this.mapPos.x - 1 >= 0)
if (this.screen.map.mapArray[(int) (this.mapPos.x - 1)][(int) this.mapPos.y] == Config.EMPTYPOSITION)
return true;
break; //same for all other just direction changin
最后你需要知道的是move(_)
我猜。它确实为我的人物添加了一个 moveTo Action。
public void move(Status direction) {
switch (direction) {
case LEFT:
this.addAction(Actions.sequence(
Actions.moveTo((getX() - Config.BLOCK_SIZE), getY(), speed),
moveDoneAction));
break;
moveDoneAction 很简单,如果完成移动,则将其RunnableAction
设置为 true。
我真的希望你能帮忙。如果您需要更多信息,请在评论中告诉我!boolean moveDone