当它小于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;
}
}
}
答案 0 :(得分:1)
为什么你的子类中的边界Sprite
已经有界限,如果你对与其他对象的碰撞感兴趣,请使用它。对于位置和大小相同,我认为您的Child类中不需要这些额外的数据成员,使用父x
,y
作为位置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();
中的边界,大小和位置,我无法通过一个类代码判断您的游戏要求,因此您可以轻松地将您的变量集成到我的代码中。