Andengine Tiledmap如何使精灵无法通过另一个?

时间:2013-08-23 16:12:24

标签: andengine collision sprite

我有一个工作的碰撞系统,精灵,我不希望“玩家”通过。问题是我不知道我应该在碰撞时执行什么才能让玩家不通过精灵。

wallCollision()方法目前为空。

if(tmxTileProperties.containsTMXProperty("collision", "1")) {       
    Rectangle rect = new Rectangle(tmxTile.getTileX(), tmxTile.getTileY() ,128, 128, mEngine.getVertexBufferObjectManager()) 
    {
        @Override
        protected void onManagedUpdate(float pSecondsElapsed)
        {
            if (player.collidesWith(this))
            {
                wallCollision();
            }
        }
    };
    rect.setVisible(false);
    mainScene.attachChild(rect);
}

1 个答案:

答案 0 :(得分:0)

位于here的问题解决了这个问题。下面的方法在与阻止的tile相同的位置创建一个JBox2D主体。我不确定它如何与路径查找一起使用以排除被阻止的磁贴,但我已经看到了在其他地方使用的相同方法,假设您正在使用GLES2。希望这会有所帮助。

  private void createUnwalkableObjects(TMXTiledMap map){
                // Loop through the object groups
                 for(final TMXObjectGroup group: this.mTMXTiledMap.getTMXObjectGroups()) {
                         if(group.getTMXObjectGroupProperties().containsTMXProperty("wall", "true")){
                                 // This is our "wall" layer. Create the boxes from it
                                 for(final TMXObject object : group.getTMXObjects()) {
                                        final Rectangle rect = new Rectangle(object.getX(), object.getY(),object.getWidth(), object.getHeight());
                                        final FixtureDef boxFixtureDef = PhysicsFactory.createFixtureDef(0, 0, 1f);
                                        PhysicsFactory.createBoxBody(this.mPhysicsWorld, rect, BodyType.StaticBody, boxFixtureDef);
                                        rect.setVisible(false);
                                        mScene.attachChild(rect);
                                 }
                         }
                 }
        }