Hallo,
die Ausgangssituation: Bei unserem Spiel soll ein Spieler gezeichnet werden (inkl. Box2D-Kollisionserkennung).
das Problem: Der Box2D-Debugrenderer rendert den Spieler an die richtige Position. Allerdings ist das dazugehörige Sprite an einer anderen Position, als der Box2D-Body.
Bild:
Code:
[Renderer]
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
|
//Draw the player
batch.begin();
batch.draw(game.getPlayer().getSprite(), game.getPlayer().getSprite().getX(), game.getPlayer().getSprite().getY(), game.getPlayer().getSprite().getOriginX(),
game.getPlayer().getSprite().getOriginY(), game.getPlayer().getSprite().getWidth(), game.getPlayer().getSprite().getHeight(),
game.getPlayer().getSprite().getScaleX(), game.getPlayer().getSprite().getScaleY(), game.getPlayer().getSprite().getRotation());
batch.end();
//Draw Box2D collision shapes
debugRenderer.render(game.getWorld(), cam.combined);
batch.setProjectionMatrix(cam.combined);
|
[GameScreen]
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
|
@Override
public void render(float delta) {
player.update(delta);
//Move camera to player position
renderer.getCam().translate(player.getMovement().x*Gdx.graphics.getDeltaTime(), player.getMovement().y*Gdx.graphics.getDeltaTime(), 0);
renderer.getCam().update();
renderer.render(delta);
}
|
[Player]
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
public class Player{
private Texture tex;
private Vector2 movement;
private float speed;
private Sprite sprite;
private Body b2Body;
public Player(GameScreen game) {
tex = new Texture("smiley.png");
movement = new Vector2(0,0);
speed = 300;
sprite = new Sprite(tex);
sprite.setScale(0.3f);
sprite.setX(game.getRenderer().getCam().position.x);
sprite.setY(game.getRenderer().getCam().position.y);
//B2D
BodyDef bdef = new BodyDef();
bdef.type = BodyDef.BodyType.DynamicBody;
b2Body = game.getWorld().createBody(bdef);
CircleShape shape = new CircleShape();
shape.setRadius(sprite.getWidth()*sprite.getScaleX()/2);
FixtureDef fdef = new FixtureDef();
fdef.shape = shape;
b2Body.createFixture(fdef);
}
public void update(float dt) {
sprite.setPosition(sprite.getX() + movement.x * dt, sprite.getY() + movement.y * dt);
b2Body.setTransform(sprite.getX(), sprite.getY(), sprite.getRotation());
}
public Sprite getSprite() {
return sprite;
}
public float getSpeed() {
return speed;
}
public Vector2 getMovement() {
return movement;
}
public void setSpeed(float speed) {
// TODO Automatisch generierter Methodenstub
this.speed = speed;
}
public void setMovement(Vector2 movement) {
this.movement = movement;
}
}
|
Wo ist der Fehler?
Vielen Dank im Voraus.