【问题标题】:andengine removing collectable objects like Spritesandengine 移除像 Sprites 这样的可收集对象
【发布时间】:2012-11-13 04:40:12
【问题描述】:

我正在使用 andangine 以及 tmx 和 body2d 扩展开发游戏。 我在创建地图时创建对象(精灵),例如硬币的特定位置。 我使用contactlistener来检查玩家是否与硬币碰撞。

我怎样才能删除这个精灵? 我怎样才能最好地组织我的精灵? 谢谢=)

【问题讨论】:

    标签: sprite andengine tmx


    【解决方案1】:

    我建议你设置一个身体的用户数据。在您的碰撞处理程序中,您将能够使用它。小例子:

    body.setUserData(...);
    

    ..

        public void postSolve(Contact contact, ContactImpulse impulse) {
    
                ... bodyAType = (...) bodyA.getUserData();
                ... bodyBType = (...) bodyB.getUserData();
                if (bodyAType != null && bodyBType != null) {
                   if (bodyAType.getUserData.equals(...)) {
                       //.......do what you need
                   }
                }
        }
    

    【讨论】:

      【解决方案2】:

      我假设你创建了一个PhysicsConnector 来连接你的精灵和身体。创建这些物理连接器的列表,当您决定应该移除一个主体(及其精灵)时,请执行以下操作:

      Body bodyToRemove = //Get it from your contact listener
      for(PhysicsConnector connector : mPhysicsConnectors) //mPhysicsConnectors is the list of your coins physics connectors.
          if(connector.getBody() == bodyToRemove)
              removeSpriteAndBody(connector); //This method should also delete the physics connector itself from the connectors list.
      

      关于精灵组织:硬币是可重复使用的精灵,你不应该每次都重新创建它们。你可以使用对象池,here's关于这个主题的问题。

      【讨论】:

      • 好的。我做了一个像 removeSpriteAndBody 这样的方法,但是当这个方法被调用时我的应用程序崩溃了。 -25 23:50:51.869: E/AndroidRuntime(15700): 致命异常: UpdateThread 11-25 23:50:51.869: E/AndroidRuntime(15700): java.util.ConcurrentModificationException 11-25 23:50:51.869: E /AndroidRuntime(15700): 在 java.util.ArrayList$ArrayListIterator.next(ArrayList.java:576)
      • 试试这个:Iterator iterator = mPhysicsConnectors.iterator(); while(iterator.hasNext()) { 连接器 = iterator.next(); if (connector.getBody() == needToRemove) { iterator.remove(); removeSpriteAndBody(连接器); } }
      • 我在游戏中实现类似的东西时也遇到了这个问题。使用 Racoon 所说的,它应该可以工作。
      • 还是同样的错误,我猜它是我的 removeSpriteAndBody 方法。受保护的无效removeSpriteAndBody(PhysicsConnector连接器){physicsConnectors.remove(连接器);场景.detachChild(connector.getShape());
      • 你在调用 removeSpriteAndBody 之前删除了迭代器吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 2012-02-12
      相关资源
      最近更新 更多