2014-09-23 89 views
0

所以,即时尝试实现触发主角在游戏中移动的按键。 这里是我的代码:玩家运动(跳转问题)

public class Play implements Screen{ 

变量:

World world; 
Box2DDebugRenderer b2Dr; 
OrthographicCamera camera; 
OrthographicCamera hudCamera; 
private SpriteBatch batch; 
private Body toniBody; 
private RHContactListener rhcl; 

渲染的东西(注意,我有一个名为InputController为setInputProcessor一个Java类,它扩展InputAdapter和它全球有机纺织品标准的设定一定的键向下和向上的状态):

@Override 
public void render(float delta) { 
    Gdx.gl.glClearColor(1, 1, 1, 1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    Gdx.input.setInputProcessor(new InputController()); 
    RHInput.update(); 
    camera.update(); 
    handleInput(); 
    world.step(delta, 6, 2); 


    batch.setProjectionMatrix(camera.combined); 
    batch.begin(); 
    batch.end(); 

    b2Dr.render(world, camera.combined); 
} 

这里就是相机被设置为特定的缩放

@Override 
public void resize(int width, int height) { 

    camera.viewportWidth = width/24; 
    camera.viewportHeight = height/24; 
    camera.update(); 

} 

的东西在屏幕上:

@Override 
public void show() { 
    world = new World(new Vector2(0, -9.81f),true); 
    rhcl = new RHContactListener(); 
    world.setContactListener(rhcl); 
    b2Dr = new Box2DDebugRenderer(); 

    batch = new SpriteBatch(); 
    camera= new OrthographicCamera(); 

这里是我定义我的场景的对象,地面和球员:

////Box2D//// 

    //CREATE GROUND 
    //body definition 
    BodyDef bDef = new BodyDef(); 
    bDef.position.set(0,-14);//meters 
    bDef.type = BodyDef.BodyType.StaticBody; 
    Body body = world.createBody(bDef); 
    //shape definition 
    PolygonShape ground = new PolygonShape(); 
    ground.setAsBox(25, 1);//meters 
    //fixture definition 
    FixtureDef fDef = new FixtureDef(); 
    fDef.friction= .5f; 
    fDef.shape = ground; 
    fDef.filter.categoryBits = B2DVariables.BIT_ground;//colision type 
    fDef.filter.maskBits = B2DVariables.BIT_can;//matching collision type 
    body.createFixture(fDef).setUserData("ground"); 

    //CREATE TONI 
    //body definition 
    bDef.position.set(-10,-10);//meters 
    bDef.type = BodyDef.BodyType.DynamicBody; 
    toniBody = world.createBody(bDef); 
    //shape definition 
    PolygonShape tBox = new PolygonShape(); 
    tBox.setAsBox(0.5f,2);//meters 
    //fixture definition 
    fDef.shape = tBox; 
    fDef.filter.categoryBits = B2DVariables.BIT_can;//colision type can step on ground 
    fDef.filter.maskBits = B2DVariables.BIT_ground; 
    toniBody.createFixture(fDef).setUserData("toni"); 

    //Toni's foot the Ground Sensor 
    tBox.setAsBox(.2f , 0.2f, new Vector2(0, -2),0); 
    fDef.shape = tBox; 
    fDef.filter.categoryBits = B2DVariables.BIT_can; 
    fDef.filter.maskBits = B2DVariables.BIT_ground; 
    fDef.isSensor = true; 
    toniBody.createFixture(fDef).setUserData("toniFoot"); 

    ground.dispose(); 
    tBox.dispose(); 
} 

这里是部分地方一某些关键触发动作

public void handleInput(){ 

    //press W key aka Up key or BTNup 
    if (RHInput.isDown(RHInput.BTNup)){ 

     if(rhcl.isPlayerOnGround()) { 
      toniBody.setLinearVelocity(0,100); 
      System.out.println("Toni jumps"); 
     } 
    } 


    if (RHInput.isDown(RHInput.BTNright)){ 
     rhcl.isPlayerOnGround(); 
     toniBody.setLinearVelocity(5,0); 
     System.out.println("Toni walks right"); 
    }else { 

     toniBody.setLinearVelocity(0,0); 
    } 


    if (RHInput.isDown(RHInput.BTNleft)){ 

     if(rhcl.isPlayerOnGround()) { 
      toniBody.setLinearVelocity(-5,0); 
      System.out.println("Toni walks left"); 
     } 
     else { 

      toniBody.setLinearVelocity(0,0); 
     } 
    } 

      if (RHInput.isPressed(RHInput.BTNdown)){ 
     System.out.println("pressed s"); 
    } 
    if (RHInput.isDown(RHInput.BTNdown)){ 
     System.out.println("holding s"); 
    } 
} 

其他libGDX东西

@Override 
public void hide() { 
    dispose(); 
} 

@Override 
public void pause() { 

} 

@Override 
public void resume() { 

} 

@Override 
public void dispose() { 
    world.dispose(); 
    b2Dr.dispose(); 
} 

}

的代码工作。角色以线性速度左右移动。但它不会跳得很高,当它下降时,它会非常缓慢地下降。如何解决这个问题?

谢谢!

+0

让事情变得更快的简单方法是增加重力。让玩家跳得更高的简单方法是增加你让他跳跃的冲动/速度。 – iforce2d 2014-09-24 00:45:07

回答

1

呃...我从来没有使用libgdx,但一直在阅读如何实现跳转http://obviam.net/index.php/getting-started-in-android-game-development-with-libgdx-tutorial-part-3-jumping-gravity-and-movement/并检查您添加的物理代码。我看到你有太多的摩擦(如.5左右),所以这个精灵应该浮出水面。并且以5米/秒的速度跳跃,而世界构造函数中的重力则为9.8米/秒^ 2,所以它会在一秒钟内减慢,而不会再次减少你添加的摩擦力。所以,移除摩擦,想象,就像在教程中。