2016-09-08 5 views
0

새로운 Im2 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); 

표시 방법

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

렌더링 방법

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

등등

을 setLinerVelocity를 사용 couldnt한다 16,

된 CameraUpdate 방법

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

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

Sprite 대신 TextureRegion을 사용하고 회전을 지정할 수있는 draw 메서드를 사용합니다. – Tenfour04

+0

이해가 안됩니다. 더 자세하게 얘기해 주 시겠어요 ?. –

답변

0

는 Sprite 클래스를 사용하지 마십시오

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; 

업데이트 방법. 대신 TextureRegion 클래스를 사용하십시오. Sprite는 TextureRegion에서 혼란스럽게 서브 클래 싱되므로, batch.draw(sprite, ...)을 호출하면 위치 및 회전 매개 변수가 TextureRegion으로 처리되므로 무시됩니다.

sprite.draw(batch)을 호출하여 스프라이트를 사용할 수 있지만 본문에 이미 위치 및 회전 매개 변수가 있으므로 스프라이트가 중복됩니다.

TextureRegion을 SpriteBatch와 함께 직접 사용하십시오. draw 메소드에 전달 된 회전 매개 변수를 사용하여 방향을 지정할 수 있습니다.

+0

ok하지만 슬로우 모션을 추가하고 싶습니다. 프레임 단위로 그것을 위해 애니메이션을 사용해야합니까? –

+0

나는 원래의 질문이나 당신이 묻는 것을 보지 못했습니다. 프레임 별 모션은 애니메이션의 정의이므로 애니메이션을 사용합니다. – Tenfour04

관련 문제