2016-09-08 1 views
0

Ich bin neu auf Box2d bekam ein Problem und konnte es nicht lösen. Ich möchte meinen Player nach links und rechts bewegen, wenn der Benutzer meine linke und rechte Taste berührt. Ich habe eine Fixture erstellt, ich kann Körper und Fixture bewegen, aber nicht den Player Sprite Wie kann ich meinen Player Sprite an meinem Körper befestigen? und Wie sollte ich Körper kontrollieren, weil ich es nicht stoppen kann. Ich möchte einen geeigneten Weg finden, Spieler in box2d zu steuern. Ich konnte nicht setLinerVelocity verwenden usw.Anbringen eines Sprites an einem Box2d Körper für Bewegung

dies ist meine Codes

public World world; 
public Body bplayer; 
public Box2DDebugRenderer b2dr; 
public Matrix4 cameraBox2D; 

Gabebildschirm

buttonimage.addListener(new ClickListener() { 
    public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) 
    { 

    bplayer.setLinearVelocity(-5*PPM , 0); 



    return true; 
    } 
}); 
world = new World(new Vector2(player.getPosition().x , player.getPosition().y) , false); 
b2dr = new Box2DDebugRenderer(); 
bplayer = createPlayer(player.getPosition().x , player.getPosition().y); 

zeigen Methode

buttonimage.setPosition(160,0); 
rightbuttonimage.setPosition(320,0); 
pauseimage.setPosition(220,-20); 
cameraBox2D = camera.combined.cpy(); 

Render-Methode

Gdx.gl.glClearColor(0, 0, 2f, 1); 
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 


sb.setProjectionMatrix(camera.combined); 

player.position.y += 500 * Gdx.graphics.getDeltaTime(); 
sb.begin(); 
sb.draw(bg, 0, camera.position.y - (camera.viewportHeight/2)); 
sb.draw(player.sprite, player.getPosition().x , player.getPosition().y); 
for (Tube tube : tubes) { 
    sb.draw(tube.getlefttube(), tube.getposlefttube().x, tube.getposlefttube().y); 
    sb.draw(tube.getrighttube(), tube.getposrighttube().x, tube.getposrighttube().y); 
    sb.draw(tube.getLight() , tube.getPoslight().x , tube.getPoslight().y); 
} 





delta*=speed; 
sb.end(); 

update(delta); 
b2dr.render(world , cameraBox2D); 
stage.draw(); 

app.batch.begin(); 
app.font23.draw(app.batch,"Lights collected :" + dropsGathered , 0, 720); 
app.batch.end(); 

Camera Methode

Vector3 position = camera.position; 
position.x = player.position.x; 
position.y = player.position.y; 
camera.position.set(position); 

create Methode

Body pBody; 
BodyDef def = new BodyDef(); 
def.type = BodyDef.BodyType.DynamicBody; 
def.position.set(x * PPM, y * PPM ); 
def.fixedRotation = true; 
pBody = world.createBody(def); 

return pBody; 

Update-Methode

world.step(1/60f , 6 , 2); 

for(int i = 0; i < tubes.size; i++) { 

    Tube tube = tubes.get(i); 

    if (camera.position.y - (camera.viewportWidth/2) > tube.getposlefttube().y + tube.getlefttube().getWidth()) { 
     tube.reposition(tube.getposlefttube().y + (TUBE_COUNT)); 

    } 

    if (tube.collides(player.getBounds())){ 
     app.setScreen(new GameOver(app)); 


    } 

    if (tube.gathered(player.getBounds())){ 

      dropsGathered++; 




    } 

    if (dropsGathered >= 50){ 
     //app.setScreen(new Stage2(app)); 
    } 


} 
camera.update(); 

handleInput(); 
camera.position.y = player.getPosition().y + 300; 
player.update(delta); 
camera.update(); 

cameraUpdate(delta); 

stage.act(delta); 
+0

Verwenden Sie TextureRegion anstelle von Sprite und verwenden Sie eine Zeichenmethode, mit der Sie die Drehung angeben können. – Tenfour04

+0

Ich verstehe nicht. kannst du genauer sein ?. –

Antwort

0

nicht die Klasse Sprite anwenden. Verwenden Sie stattdessen die TextureRegion-Klasse. Sprite wird von TextureRegion verwirrend subklassifiziert. Wenn Sie also batch.draw(sprite, ...) aufrufen, werden seine Positions- und Rotationsparameter ignoriert, da sie als TexturRegion behandelt werden.

Sie könnten einen Sprite verwenden, indem Sie sprite.draw(batch) aufrufen, aber ein Sprite ist überflüssig, weil Ihr Body bereits Positions- und Rotationsparameter hat.

Verwenden Sie eine TextureRegion direkt mit dem SpriteBatch. Sie können es mit Rotationsparametern ausrichten, die an die Zeichenmethode übergeben werden.

+0

ok, aber ich möchte Zeitlupe hinzufügen. wie Bild für Bild. Soll ich dafür animieren? –

+0

Ich sehe nicht, was das mit deiner ursprünglichen Frage zu tun hat oder was du überhaupt fragst. Frame-für-Frame-Bewegung ist die Definition von Animation, also verwenden Sie natürlich Animation. – Tenfour04

Verwandte Themen