2016-06-29 36 views
0

我正在嘗試開發具有背景的遊戲,其中包含創建爲紋理的4 * 4框。我有一個演員在箱子裏移動。這就像2048遊戲。但我只有一個角色會移動。在Scene2D中使用MoveToAction在Sprite背景中移動角色

enter image description here

我用演員作爲移動角色,因爲我可以實現移動動畫容易使用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中沒有任何內容!

你知道我在這裏做什麼嗎?

此外,這是實施移動動作的正確方法嗎?我必須使用演員才能將動畫移動到紋理上嗎?

非常感謝您的幫助。

+0

你能分享你的SimpleDirectionGestureDetector的代碼嗎?聽起來像它可能在刷卡過程中多次觸發'onUp','onRight'等。或者它可能是別的。爲什麼將新動作分配給成員變量('moveAction')?你在別的地方使用它嗎?不,你不必使用演員。如果需要,您可以推出自己的解決方案。 – Tenfour04

回答

0

您可以不同地實施動作動作。例如:

  • 在您的SimpleDirectionGestureDetector上,在每個動作(上,下等)上設置一個「方向」。這只是主類(MyActor)中的一個屬性,它擁有一個表示移動應該到達的位置的值。
  • 重寫act()方法,然後檢查方向並應用運動。我不會每次都創建一個動作,因爲它會產生太多垃圾。相反,您可以使用計數器來添加增量並計算進度。檢查:https://github.com/libgdx/libgdx/wiki/Interpolation
  • 一旦計數器達到最大時間(在動作中爲0.1f),您將方向設置爲中性,如無動作。

對不起,現在沒有代碼,因爲我從我的手機寫這個,但我希望這有助於理解邏輯。