2016-09-08 16 views
0

Im新しいBox2dに問題があり、解決できませんでした。 ユーザーが左右のボタンに触れると、プレーヤーを左右に移動したいと思います。 私はボディとフィクスチャを移動できますが、プレーヤスプライトは移動させることはできません プレーヤのスプライトを私の体にどのように付けることができますか? と私はそれを停止することができないため、私はどのように体を制御する必要があります。 box2dでプレーヤーを制御する適切な方法を見つけたいと思います。私は、これは私のコード移動のためにBox2d本体にスプライトを添付する

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

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

あるなど

をsetLinerVelocityを使用couldntの

する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; 

更新方法

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

Spriteの代わりにTextureRegionを使用し、回転を指定できる描画メソッドを使用します。 – Tenfour04

+0

私は理解していません。あなたはもっと具体的になりますか? –

答えて

0

はSpriteクラスを使用しないでください。代わりにTextureRegionクラスを使用してください。スプライトはTextureRegionから混乱してサブクラス化されるので、batch.draw(sprite, ...)を呼び出すと、その位置と回転パラメータはTextureRegionとして扱われるため無視されます。

sprite.draw(batch)を呼び出してスプライトを使用することはできますが、本体にはすでに位置と回転パラメータがあるため、スプライトは冗長です。

SpriteBatchで直接TextureRegionを使用します。 drawメソッドに渡される回転パラメータを使用して方向を変えることができます。

+0

okですが、スローモーションを追加したいと思います。フレームごとのように。アニメーションを使用する必要がありますか? –

+0

私はあなたの元の質問やあなたが尋ねていることとは何が関係しているのか分かりません。フレームごとのモーションはアニメーションの定義なので、もちろんアニメーションを使用します。 – Tenfour04

関連する問題