J'ai débogué mon jeu LibGdx ces dernières heures pour essayer de comprendre pourquoi certains sprites se déplaçaient et d'autres pas. J'ai en gros une classe LittleMan qui est la classe des joueurs et l'esprit se déplace bien quand je bouge mon joueur. Ensuite, j'ai une autre classe Bullet qui représente les balles mais les balles que je tire ne sont pas rendues correctement. J'essaie de les dessiner à partir de la position du joueur mais il les tire toujours d'un autre point fixe sur la carte. (position de départ du joueur)LibGdx Pourquoi la méthode sprite draw() change-t-elle mon X et Y
Maintenant, voici la partie étrange; J'ai débogué mon application pour essayer de comprendre d'où venait le mouvement du joueur et étrangement les coords X et Y changent chaque fois que j'appelle super.draw (batch). Je ne comprends pas comment ou pourquoi cela arrive. C'est bien parce que ça marche mais je veux savoir comment ça marche donc je peux l'utiliser pour mes balles.
Voici un code pour clarifier:
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:
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);
}
Un objet Bullet est créé en utilisant ce code:
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);
Le Littl classe Eman a été faite par un autre étudiant, mais il ne peut pas me expliquer comment cela fonctionne soit donc j'essayé de copier le meilleur que je pouvais, mais je ne peux vraiment pas comprendre comment:
Pour rendre les balles rendent de le bon endroit
Pourquoi diable le tirage au sort() méthode change x et y coords
quelqu'un peut-il me aider et expliquer ce qui se passe ou ce que je fais mal?
Toute aide est grandement appréciée!
Qu'est-ce que ces classes s'étendent-elles et que fait setPosition? – Sebastian
Oh ouais je suis désolé, totalement oublié d'ajouter cela. Ils étendent tous les deux Sprite et setPosition est de Sprite. –