2015-03-03 76 views
0

所以我有一个演员,这是一个精灵,在screenviewport舞台上设置。我想要做的是能够触摸演员,然后触摸屏幕上的一个点,它会流利地移动。目前,当我触摸演员时,它似乎跳跃到随机点。这里是我的演员类的一些代码,移动Actor准确LibGDX Scene2d

public MyActor(){ 

    setBounds(sprite.getX(),sprite.getY(), 
       sprite.getWidth(),sprite.getHeight()); 

    setTouchable(Touchable.enabled); 

    addListener(new InputListener(){ 
     @Override 
     public boolean touchDown(InputEvent event, float x, float y, 
           int pointer, int button) { 

      MoveByAction mba = new MoveByAction(); 
      mba.setAmount(x,y); 
      MyActor.this.addAction(mba); 
      return true; 
     } 


    }); 
} 

@Override 
protected void positionChanged() { 
    sprite.setPosition(getX(),getY()); 
    super.positionChanged(); 
} 

@Override 
public void draw(Batch batch, float parentAlpha) { 
    sprite.draw(batch); 
} 
@Override 
public void act(float delta){ 
    super.act(delta); 
} 
+0

使用舞台视口摄像头的项目方法将屏幕X和y转换为舞台的x和y。 – Tenfour04 2015-03-03 04:58:17

回答

0

这里有几件事要问。首先,你的触摸只是触摸你的演员。这将是演员所在的位置。你需要在你的场景级别实现一些基本的状态机,以知道“在第一次点击时,这个演员被选中”,然后它必须处于“选择该演员进入的状态”状态,最后当你选择一个位置时将XY发送给选定的演员进行移动。

现在,正如Tenfour04所提到的,您必须弄清楚触摸点的屏幕XY坐标转换为游戏世界的坐标。 Tenfour04对在视口相机上使用投影方法做出了很好的评论。一旦你这样做,你可以发送坐标给你的演员去做前面提到的东西。

为了实现这个动作,我会使用Action框架,如下所示: actor.addAction(moveTo(x,y,0.4f,Interpolation.circle));

此页面显示所有Scene2d漂亮的可用操作:https://github.com/libgdx/libgdx/wiki/Scene2d#actions

希望这是你需要的。 :)