0

[更新] 順序を少し変更したので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

4

1 に答える 1