2016-09-07 8 views
0

私はBox2dに問題があります。私はBox2dで新しくなっていますので、私のプレーヤーの動きを処理できませんでした。 ゲームで左右のボタンに触れると、左右に移動したいです。私のゲームプレイヤーの はすでに上のy軸を通過しています。 プレイヤーをコントロールしながらクールな滑らかなアニメーションを見たいと思っていました。 私はプレイヤーを左に移動できませんでした。どうすればいいですか?私はテスト用治具を作成し、事前Libgdx Box2d Player does not move

// EDITED

で おかげで、私は治具ではなく、私のプレーヤーを移動することができます。 プレーヤスプライトをボディに貼り付けるにはどうすればよいですか? と私は体を制御するための適切な方法を見つける必要があります。それはあなたが始めると止まりません。 これは私のコード

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

はPlayScreen

ある
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); 

showメソッド

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

Renderメソッド

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(); 

するCameraUpdate方法

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

createPlayerメソッド

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; 

更新方法あなたのcreatePlayer方法で

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

が機能しませんでした。私の体と世界はカメラのようなプレーヤーに従う必要があります –

答えて

0

あなたがbody.setUserData(sprite)を行うことができます。次に、あなたのrenderメソッドでは、あなたは(どのようにレンダリングされているチューブと同様に)これを行うことができます。

for (Body body : bodies) { 
    Sprite playerSprite = (Sprite) body.getUserData(); 
    playerSprite.setPosition(body.getPosition().x, body.getPosition().y); 
    playerSprite.draw(spriteBatch); 
} 

これを身体の位置にスプライトの位置を更新します。

+0

'array bodies'を作成し、' world.getBodies(bodies) 'を呼び出すことでbodyを世界に格納することができます。 –