2015-09-05 65 views
0

好了,所以我有一個側滾動遊戲,我用的Box2D的物理學。我的相機專注於玩家,只有玩家移動。通過使用Box2D的玩家動作,我已經設置了線速度和一切具有0摩擦的障礙似乎在一段時間口吃來回每一次,有時它似乎永遠持續下去或者從一開始就口吃。Libgdx Box2D的60fps的,但口吃

玩家的精靈呈現的方式是,玩家有得到相應的Box2D的身體和儲存該位置爲它在它的渲染方法中使用的位置的更新方法。我確實使用了PPM,其他的都是靜態的。

我有以下的,能夠檢測並阻止會關閉屏幕和重用這些塊爲更多的障礙選手後面的傳感器和我的背景做類似的事情和地面,以便玩家可以一直運行下去。只有2個背景對象2樓層對象和12個塊對象。我確信在我的渲染方法中沒有昂貴的操作,並且我不會在初始狀態負載之外創建任何新對象。 使用

Gdx.graphics.getFramesPerSecond() 

我已經確定FPS進入60和61之間,所以我不相信這是一個滯後的問題,我不知道如何解決這個問題。

主要Render方法:

public void render(){ 
    //clear screen 
    Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    //set camera to follow player 
    cam.position.set(player.getPosition().x * B2DVars.PPM + NinjaJumper.V_WIDTH/4, 
      NinjaJumper.V_HEIGHT/2, 0); 
    cam.update(); 

    sb.setProjectionMatrix(cam.combined); 
    //render the background 
    for (int i = 0; i < backgrounds.length; i++){ 
     backgrounds[i].render(sb); 
    } 

    //render the player 
    player.render(sb); 

    if(haveBlocks) { 
     for (int i = 0; i < blocks.length; i++) { 
      blocks[i].render(sb); 
     } 
    } 

    //render the ground 
    for (int i = 0; i < ground.length; i++){ 
     ground[i].render(sb); 
    } 

    sb.setProjectionMatrix(hudCam.combined); 
    hud.render(sb); 

    if(debug) { 
     //set camera to follow player 
     b2dCam.position.set(player.getPosition().x + (NinjaJumper.V_WIDTH/4)/B2DVars.PPM, 
       (NinjaJumper.V_HEIGHT/2)/B2DVars.PPM, 0); 
     b2dCam.update(); 
     b2dr.render(world, b2dCam.combined); 
    } 
} 

播放器渲染和更新方法:

public void update(float dt){ 
    animation.update(dt); 
    sprite.setRegion(animation.getFrame()); 
    sprite.setCenter(body.getPosition().x * B2DVars.PPM, 
      body.getPosition().y * B2DVars.PPM - 5); 
} 

public void render(SpriteBatch sb){ 
    sb.begin(); 
    sprite.draw(sb); 
    sb.end(); 
} 

所以有人能告訴我什麼,我做錯了,我花了幾天看着這個和我無法弄清楚。

編輯pack.pack:

pack.png 
format: RGBA8888 
filter: Linear,Linear 
repeat: none 
mainpage 
    rotate: false 
    xy: 1, 281 
    size: 960, 720 
    orig: 960, 720 
    offset: 0, 0 
    index: -1 
ground 
    rotate: false 
    xy: 1, 140 
    size: 600, 139 
    orig: 600, 139 
    offset: 0, 0 
    index: -1 
treeM 
    rotate: false 
    xy: 603, 38 
    size: 139, 241 
    orig: 139, 241 
    offset: 0, 0 
    index: -1 
tree 
    rotate: false 
    xy: 744, 39 
    size: 137, 240 
    orig: 137, 240 
    offset: 0, 0 
    index: -1 
treeS1 
    rotate: false 
    xy: 883, 42 
    size: 133, 237 
    orig: 133, 237 
    offset: 0, 0 
    index: -1 
treeS 
    rotate: false 
    xy: 1, 19 
    size: 67, 119 
    orig: 67, 119 
    offset: 0, 0 
    index: -1 
button1 
    rotate: false 
    xy: 70, 114 
    size: 70, 24 
    orig: 70, 24 
    offset: 0, 0 
    index: -1 
button2 
    rotate: false 
    xy: 70, 88 
    size: 70, 24 
    orig: 70, 24 
    offset: 0, 0 
    index: -1 
platform 
    rotate: false 
    xy: 963, 969 
    size: 32, 32 
    orig: 32, 32 
    offset: 0, 0 
    index: -1 
block 
    rotate: false 
    xy: 1, 1 
    size: 16, 16 
    orig: 16, 16 
    offset: 0, 0 
    index: -1 

pack2.png 
format: RGBA8888 
filter: Linear,Linear 
repeat: none 
treeM1 
    rotate: false 
    xy: 1, 625 
    size: 255, 378 
    orig: 255, 378 
    offset: 0, 0 
    index: -1 
treeH 
    rotate: false 
    xy: 258, 540 
    size: 200, 463 
    orig: 200, 463 
    offset: 0, 0 
    index: -1 
ninja1 
    rotate: false 
    xy: 460, 503 
    size: 500, 500 
    orig: 500, 500 
    offset: 0, 0 
    index: -1 
ninja2 
    rotate: false 
    xy: 1, 1 
    size: 500, 500 
    orig: 500, 500 
    offset: 0, 0 
    index: -1 
ninja3 
    rotate: false 
    xy: 503, 1 
    size: 500, 500 
    orig: 500, 500 
    offset: 0, 0 
    index: -1 

pack3.png 
format: RGBA8888 
filter: Linear,Linear 
repeat: none 
ninja4 
    rotate: false 
    xy: 1, 503 
    size: 500, 500 
    orig: 500, 500 
    offset: 0, 0 
    index: -1 
ninja5 
    rotate: false 
    xy: 503, 503 
    size: 500, 500 
    orig: 500, 500 
    offset: 0, 0 
    index: -1 
ninja6 
    rotate: false 
    xy: 1, 1 
    size: 500, 500 
    orig: 500, 500 
    offset: 0, 0 
    index: -1 
ninja7 
    rotate: false 
    xy: 503, 1 
    size: 500, 500 
    orig: 500, 500 
    offset: 0, 0 
    index: -1 

pack4.png 
format: RGBA8888 
filter: Linear,Linear 
repeat: none 
mainpage1 
    rotate: false 
    xy: 1, 1 
    size: 900, 600 
    orig: 900, 600 
    offset: 0, 0 
    index: -1 

pack5.png 
format: RGBA8888 
filter: Linear,Linear 
repeat: none 
ninja8 
    rotate: false 
    xy: 1, 1 
    size: 500, 500 
    orig: 500, 500 
    offset: 0, 0 
    index: -1 
+0

你是否在使用TexturePacker進行修剪? –

+0

我使用TexturePacker,但我不知道修剪是什麼。 – user1804234

+0

在TP你有類似「修剪模式」你有沒有把它設置爲somethnig否則**沒有**? –

回答

0

有可能是口吃的源兩種可能的領域 - 渲染和物理。

當您使用在TexturePacker微調你需要處理繪圖時偏移但它不是你的情況 - 請注意,你都抵消零大小是完全一樣的原稿

你應該專注於你的物理。當兩個身體 - 小的和大的 - 接觸並導致口吃時,會出現box2D中衆所周知的錯誤。請嘗試以下兩件事情:

  • 使用Box2D debug renderer,看看你的身體是口吃或只是一個精靈
  • 嘗試註銷體。爲getPosition()在每一步,以查看是否XÝ在有道

正在改變。如果它是與物理問題的解決方案是夾具材料恢復原狀設置爲並嘗試setLinearDamping避免一點點動作

+0

好吧我認爲問題是與物理導致身體做口吃,但多少,以及我什麼時候設置LinearLampping?它是在創建還是在所有更新和多少? – user1804234

+0

從修改材料恢復開始。如果它不會幫助你測試多少傾銷你需要從說1開始 - 你需要做一次,當創建主體 –

+0

我已經一切恢復原狀設置爲1,而且我已經嘗試過的抑制從1 - 0.025,但是口吃仍然存在,即使當抑鬱減緩我的傢伙爬行我仍然可以看到口吃 – user1804234