【问题标题】:Updated collided sprite only仅更新碰撞精灵
【发布时间】:2013-07-29 01:43:07
【问题描述】:

我正在玩一个非常简单的游戏,它基于触摸/物理示例。基本上发生的情况是,当您触摸屏幕时,它会创建一个带有 body 的形状并使用 box2d 弹跳。现在,我想做的是当那个特定的精灵与任何东西发生碰撞时,它会将当前帧更改为“1”片刻,然后返回到原始帧。

我让它有点工作,但是每当任何精灵与任何东西发生碰撞时,它只会更新最近创建的精灵。这是我的碰撞检测:

private ContactListener createContactListener()
    {
        ContactListener contactListener = new ContactListener()
        {

            @Override
            public void beginContact(Contact contact) {
                face.animate(new long[] { 50, 10}, new int[] {1, 0}, 0);; 


            }

            @Override
            public void endContact(Contact contact) {

            }

            @Override
            public void preSolve(Contact contact, Manifold oldManifold) {

            }

            @Override
            public void postSolve(Contact contact, ContactImpulse impulse) {

            }

        };
        return contactListener;
    }

正如我所说,我想我很接近我似乎无法弄清楚。谢谢!

【问题讨论】:

  • 我认为您在此处显示的信息不足。什么是面子?它是如何存储的?您可能在课堂上遇到了一些您意想不到的静态内容。
  • 脸是一个附有身体的精灵。创建场景时,它会创建物理世界,重力跟随加速度计。当您触摸屏幕上的任何位置时,它会创建“脸”和它的身体,它们会四处弹跳。所以,当你触摸场景 5 次时,你会做出 5 张脸。我希望每个人在与任何东西发生碰撞时都切换到另一个框架片刻,然后回到原来的框架。

标签: android box2d andengine


【解决方案1】:

对于接触监听器,它不会被两个碰撞体单独调用。我的意思是当 BodyA 与 BodyB 发生碰撞时,只会调用一个联系人侦听器回调。您只需更新联系人侦听器注册到的类的实例。

您需要做的是在注册监听器时(对于每个),将人脸所属的类的实例作为 userData 传递。然后您可以通过以下方式从联系人中检索实例:

FaceClass* fcA = contact.GetFixtureA().GetBody().GetUserData();
FaceClass* fcB = contact.GetFixtureB().GetBody().GetUserData();

然后在检索到的实例中调用一个函数,该函数将执行您需要的操作,可能类似于“updateOnCollision”。

fcA.updateOnCollision();
fcB.updateOnCollision();

附:我从头写代码,我的 Jave 很糟糕,所以可能需要一些调整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多