2013-08-23 58 views
0

我有一个工作碰撞系统,我不想让“玩家”通过的精灵。问题是我不知道我应该在碰撞时执行什么以使玩家不会传递精灵。Andengine Tiledmap如何让精灵不会被另一个精灵所阻挡?

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); 
} 

回答

0

问题位于here解决这个问题。下面的方法创建一个JBox2D主体,与被阻塞的tile相同的位置。我不知道这是如何与路径结合使用以排除被阻塞的磁贴,但我已经看到在其他地方使用相同的方法,假设您使用的是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); 
           } 
         } 
       } 
     }