在過去的幾個小時裏,我一直在調試我的LibGdx遊戲,試圖找出爲什麼有些精靈在四處移動,有些則不在。我基本上有一個LittleMan類的玩家類,當我移動我的玩家時,精靈會沿着漂亮的方向移動。然後我有另一班班樂隊代表子彈,但我射擊的子彈無法正確渲染。我嘗試從玩家的位置開始繪製它們,但它總是從地圖上的另一個固定點繪製它們。 (首發球員的位置)LibGdx爲什麼sprite draw()方法會改變我的X和Y
現在,這裏是怪異的一部分;我調試了我的應用程序,試圖瞭解玩家的移動來自哪裏,奇怪的是,每次我調用super.draw(batch)時,X和Y座標都會改變。我不明白如何或爲什麼會發生這種情況。它的罰款,因爲它的作品,但我想知道它是如何工作的,所以我可以用它爲我的子彈。
下面是一些代碼澄清:
LittleMan.java:
private Texture littleMan;
private TextureRegion stand;
public LittleMan(Texture littleMan, World world) {
super(new Sprite(littleMan));
speed = 1;
pv=50;
stamina = 100;
power = 1;
defense = 1;
this.world = world;
defineMario();
this.littleMan = littleMan;
stand = new TextureRegion(getTexture(), 39, 21);
setBounds(0,0,39,21);
setRegion(stand);
}
public void update(float dt){
setPosition(b2body.getPosition().x - getWidth()/2, b2body.getPosition().y - getHeight()/2);
}
public void defineMario() {
BodyDef bdef = new BodyDef();
bdef.position.set(32/ FacultyWars.PPM, 32/ FacultyWars.PPM);
bdef.type = BodyDef.BodyType.DynamicBody;
b2body = world.createBody(bdef);
FixtureDef fdef = new FixtureDef();
CircleShape shape = new CircleShape();
shape.setRadius(30/ FacultyWars.PPM);
fdef.shape = shape;
b2body.createFixture(fdef);
}
@Override
public void draw(Batch batch){
update(Gdx.graphics.getDeltaTime());
super.draw(batch); //this is the line the coords change, tested with debugger and getY() and getX()
}
Bullet.java:
float rotation = littleMan.getRotation();
float x =littleMan.b2body.getPosition().x;
float y =littleMan.b2body.getPosition().y;
Bullet bullet = new Bullet(new Sprite(new Texture("bullet.png")), 30, 500, 1, x, y, rotation,world);
:
private int bulletSpd;//speed
private int bulletRng;//range
private int dmg;//damage
//texture est déja dans sprite
private float rotation;
public World world;
public Body b2body;
public Bullet(Sprite sprite, int speed,int range, int dmg,float x, float y ,float rotation, World world){
super(sprite);
bulletRng=range;
bulletSpd=speed;
this.dmg=dmg;
this.rotation=rotation;
this.world = world;
defineBullet(x,y);
}
public void defineBullet(float x, float y) {
BodyDef bdef = new BodyDef();
bdef.position.set(x/ FacultyWars.PPM, y/ FacultyWars.PPM);
bdef.type = BodyDef.BodyType.DynamicBody;
b2body = world.createBody(bdef);
FixtureDef fdef = new FixtureDef();
CircleShape shape = new CircleShape();
shape.setRadius(30/ FacultyWars.PPM);
fdef.shape = shape;
b2body.createFixture(fdef);
}
@Override
public void draw(Batch batch){
update(Gdx.graphics.getDeltaTime());
super.draw(batch);
}
public void update(float dt){
setPosition(b2body.getPosition().x - getWidth()/2, b2body.getPosition().y - getHeight()/2);
}
使用該代碼創建的子彈對象
的Littl林二汶類是由一個同學做,但他可以給我它是如何工作沒有解釋任何所以我試圖複製它盡我所能,但我真的無法弄清楚如何:
爲了讓子彈渲染正確的地方
爲什麼地球上的draw()方法改變x和y COORDS
誰能幫我解釋一下是怎麼回事或者什麼,我做錯了什麼?
所有幫助非常感謝!
什麼這些類是否延伸?setPosition是做什麼的? – Sebastian
哦,是的,我很抱歉,完全忘了補充一點。它們都擴展了Sprite並且setPosition來自Sprite。 –