我正在嘗試開發具有背景的遊戲,其中包含創建爲紋理的4 * 4框。我有一個演員在箱子裏移動。這就像2048遊戲。但我只有一個角色會移動。在Scene2D中使用MoveToAction在Sprite背景中移動角色
我用演員作爲移動角色,因爲我可以實現移動動畫容易使用MoveToAction
。 (據我所知)
我不確定這是否是最好的實現。如果有更好的方法,請讓我知道。
好吧,我迄今爲止所做的是;
我從ApplicationAdapter
延續了一堂課。
這是我的演員類;
public class MyActor extends Actor {
Texture texture = new Texture(Gdx.files.internal("joffrey.png"));
public boolean started = false;
public MyActor() {
setBounds(imageWidth/2, imageHeight/2, texture.getWidth()/2, texture.getHeight()/2);
}
@Override
public void draw(Batch batch, float alpha) {
batch.draw(texture, this.getX(), getY());
}
}
所以我想用MoveToAction當用戶刷卡左,右,上,下從一個框移動此(Joffrey的)到另一個。
我創建了一個類SimpleDirectionGestureDetector,就像這裏講的那樣; LibGDX - Get Swipe Up or swipe right etc.?
這裏是我如何使用這個類;
Gdx.input.setInputProcessor(new SimpleDirectionGestureDetector(new SimpleDirectionGestureDetector.DirectionListener() {
@Override
public void onUp() {
moveAction = new MoveToAction();
moveAction.setPosition(myActor.getX(), myActor.getY() + imageHeight);
moveAction.setDuration(0.1f);
myActor.addAction(moveAction);
}
@Override
public void onRight() {
moveAction = new MoveToAction();
moveAction.setPosition(myActor.getX() + imageWidth, myActor.getY());
moveAction.setDuration(0.1f);
myActor.addAction(moveAction);
}
@Override
public void onLeft() {
moveAction = new MoveToAction();
moveAction.setPosition(myActor.getX() - imageWidth, myActor.getY());
moveAction.setDuration(0.1f);
myActor.addAction(moveAction);
}
@Override
public void onDown() {
moveAction = new MoveToAction();
moveAction.setPosition(myActor.getX(), myActor.getY() - imageHeight);
moveAction.setDuration(0.1f);
myActor.addAction(moveAction);
}
}));
一切都很好,直到這裏。當我啓動應用程序時,它在開始時工作得很好,但在一些動作之後,移動動作看起來很滯後,然後突然關閉應用程序而沒有任何錯誤消息或任何內容,並且logcat中沒有任何內容!
你知道我在這裏做什麼嗎?
此外,這是實施移動動作的正確方法嗎?我必須使用演員才能將動畫移動到紋理上嗎?
非常感謝您的幫助。
你能分享你的SimpleDirectionGestureDetector的代碼嗎?聽起來像它可能在刷卡過程中多次觸發'onUp','onRight'等。或者它可能是別的。爲什麼將新動作分配給成員變量('moveAction')?你在別的地方使用它嗎?不,你不必使用演員。如果需要,您可以推出自己的解決方案。 – Tenfour04