[更新] 順序を少し変更したのでsuper.act(delta)
、メソッドの最後で を呼び出すと、少し役立つようです! しかし、それについてはまだ確信が持てません。
マップ用に正方形のシステムを取得しました。したがって、その 2D 配列と ii を 1 つ動かすと、フィギュアは 1 つの正方形から次の正方形に移動します。ただし、2 つの正方形の間で図形を「停止」することはできません。
キャラクターが 1 つの動きをしたときに、タッチパッドがタッチされているかどうかを確認し、タッチされている場合は次の動きを開始します。それは時々遅れているようですが、私はその理由を知りません!? 「ラグ」を見つけていただければ幸いです。キャラクター内の次の動きを計算する方法は次のとおり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アクションを追加します。
public void move(Status direction) {
switch (direction) {
case LEFT:
this.addAction(Actions.sequence(
Actions.moveTo((getX() - Config.BLOCK_SIZE), getY(), speed),
moveDoneAction));
break;
moveDoneAction は、移動が完了した場合に を trueRunnableAction
に設定する単純なものです。
あなたが助けてくれることを本当に願っています。さらに情報が必要な場合は、コメントとしてお知らせください。boolean moveDone