让雪碧弹出边缘

时间:2017-04-25 03:13:13

标签: java android libgdx 2d-games

当它小于0时,我试图让精灵从屏幕边缘反弹。现在它只是在屏幕上缩放到虚空中。这是我的代码注释,CentipedeBody是一个扩展Sprite的类。在render方法中,我调用ex.update();,它是类的对象。然后在batch.begin()batch.end()之间我batch.draw(ex,ex.getPosition().x,ex.getPosition().y,ex.getSize().x,ex.getSize().y);

public class CentipedeBody extends Sprite
{
   public CentipedeBody(TextureRegion image,Vector2 position,Vector2 size)  {

      super(new TextureRegion(image));

      this.position = position;
      this.size=size;
      bounds=new Rectangle(position.x,position.y,8,8);
      left=true;
   }

  public void update() {

        bounds.set(getPosition().x,getPosition().y,8,8);

        if (left==true) {
           position.x-=(.5f);
            up=false;
            down=false;
            right=false;
            left=true;
        }

        if (right==true) {
            position.x+=.5f;
            left=false;
            right=true;
            down=false;
            up=false;
        }
        if (down==true) {

            position.y-=(.5f);
            right=false;
            left=false;
            down=true;
            up=false;

            if(position.x<0)
            {
                left=false;
                right=true;
            }
        }
  }

1 个答案:

答案 0 :(得分:1)

为什么你的子类中的边界Sprite已经有界限,如果你对与其他对象的碰撞感兴趣,请使用它。对于位置和大小相同,我认为您的Child类中不需要这些额外的数据成员,使用父xy作为位置width和{{1对于维度。

height

在渲染方法

public class CentipedeBody extends Sprite {

    enum State{
        LEFT,RIGHT,DOWN
    }

    State currentState,previousState ;

    public static final float DOWN_MOVEMENT=50;
    public float downMovCounter;
    public float speed;

    public CentipedeBody(TextureRegion image, Vector2 position, Vector2 size) {
        super(new TextureRegion(image));
        setPosition(position.x,position.y);
        setSize(size.x,size.y);
        currentState=State.LEFT;
        previousState=State.LEFT;
        speed=50;
    }

    public void update() {

        float delta=Gdx.graphics.getDeltaTime();
        if(currentState ==State.LEFT){
            setPosition(getX()-speed*delta,getY());
            if(getX()<0) {
                previousState=currentState;
                currentState = State.DOWN;
            }
        }

        if(currentState ==State.RIGHT){
            setPosition(getX()+speed*delta,getY());
            if(getX()> Gdx.graphics.getWidth()-getWidth()) {
                previousState=currentState;
                currentState = State.DOWN;
            }
        }

        if(currentState ==State.DOWN){
            setPosition(getX(),getY()+speed*delta);
            downMovCounter++;
            if(downMovCounter>DOWN_MOVEMENT){
                downMovCounter=0;
                currentState =previousState==State.LEFT?State.RIGHT:State.LEFT;
            }

        }
    }

}

您可能需要batch.begin(); batch.draw(centipedeBody,centipedeBody.getX(),centipedeBody.getY(),centipedeBody.getWidth(),centipedeBody.getHeight()); batch.end(); centipedeBody.update(); 中的边界,大小和位置,我无法通过一个类代码判断您的游戏要求,因此您可以轻松地将您的变量集成到我的代码中。