我用这个方法在AndEngine,以确定现场被动用户。

@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
     if(pSceneTouchEvent.isActionDown()) {
         Log.e("Arcade", "Scene Tapped");
                   //Simulate player jumping

     }
    return false;
}

什么我想要做的就是当场被窃听,我希望允许播放跳。

现在两件事对于这一会会更好地使用PathModifier,或MoveYModifier考虑到它的景观模式?如果请提供一个例子。感谢

编辑:

我设法使用的物理模拟跳使用这..

@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
     if(pSceneTouchEvent.isActionDown()) {
         Log.e("Arcade", "Scene Tapped");

          final Vector2 velocity = Vector2Pool.obtain(mPhysicsWorld.getGravity().x * -0.5f,mPhysicsWorld.getGravity().y * -0.5f);
          body.setLinearVelocity(velocity);
          Vector2Pool.recycle(velocity);
         return true;
     }
    return false;
}

正如你所说的答复中通过改变的严重性。唯一的问题是,当用户保持接触屏幕的精灵保持不断上升,上升。我怎么能将它设置在哪里的用户可以只需点击一次不能让他跳一次,直到对象落地,这是一个矩形?

有帮助吗?

解决方案

使用 MoveYModifier.记住,你可以注册多的修饰语,只要你想。因此,如果,例如,游戏一个平台游戏和字一直移动的X轴上,他可以jumpt如果他想要的(就像地心引力的家伙或柳忍者,尽管这些游戏变化的严重性,这是别的东西).

你可以做像:

Entity playerEntity = ..//It doesn't matter if the player is a sprite, animated sprite, or anything else. So I'll just use Entity here, but you can declare your player as you wish.

final float jumpDuration = 2;
final float startX = playerEntity.getX();
final float jumpHeight = 100;

final MoveYModifier moveUpModifier = new MoveYModifier(jumpDuration / 2, startX, startX + jumpHeight);
final MoveYModifier moveDownModifier = new MoveYModifier(jumpDuration / 2, startX + jumpHeight, startX);
final SequenceEntityModifier modifier = new SequenceEntityModifier(moveUpModifier, moveDownModifier);

playerEntity.registerEntityModifier(modifier);

编辑:

为你的第二个问题:

  1. 创建一个变量 boolean mIsJumping 在你的场景;时跳开始设置它 true.如果用户水龙头屏幕和 mIsJumping == true, 不不 跳。
  2. 现在,注册一个 ContactListener 你的 PhysicsWorld.每当有联系之间播放机和地面设置 mIsJumpingfalse.

有很多样的使用 ContactListeners在AndEngine论坛, 快速搜索 产生一些。如果你需要一个例子,可以要求一个:)

编辑2: ContactListener 示例:

  1. 有2个变量保持Id播放机和地面: private static final String PLAYER_ID = "player", GROUND_ID = "ground";
  2. 在创建当地主体和播放机身体、组件作为用户的数据: playerBody.setUserData(PLAYER_ID);groundBody.setUserData(GROUND_ID);
  3. 创建一个 ContactListener 作为一个领域,在你的场景:

    private ContactListener mContactListener = new ContactListener() { 
    /**
     * Called when two fixtures begin to touch.
     */
    public void beginContact (Contact contact) {
        final Body bodyA = contact.getFixtureA().getBody();
        final Body bodyB = contact.getFixtureB().getBody();
    
        if(bodyA.getUserData().equals(PLAYER_ID)) {
            if(bodyB.getUserData().equals(GROUND_ID))
                mIsJumping = false;
        }
        else if(bodyA.getUserData().equals(GROUND_ID)) {
            if(bodyB.getUserData().equals(PLAYER_ID))
                mIsJumping = false;
        }
    
    }
    
    /**
     * Called when two fixtures cease to touch.
     */
    public void endContact (Contact contact) { }
    
    /**
     * This is called after a contact is updated.
     */
    public void preSolve(Contact pContact) { }
    
    /**
     * This lets you inspect a contact after the solver is finished. 
     */
    public void postSolve(Contact pContact) { }
    };
    
  4. 最后,登记册,接触监听器: physicsWorld.setContactListener(mContactListener);

编辑3:

移动你的精灵在X轴,你可以申请一个部队使用 Body.applyForce 方法,或者适用的一个脉冲使用 Body.applyLinearImpulse 法。玩的参数和找到工作的下一步。

矢量应该包括一个X的一部分;尝试 Vector2 force = Vector2Pool.obtain(50, 0);.然后用力,这种方式: body.applyForce(force, body.getWorldCenter());.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top