【问题标题】:Collision Detection in cocos2d-xcocos2d-x 中的碰撞检测
【发布时间】:2016-02-13 19:42:48
【问题描述】:

我是 cocos2d-x 的初学者,我正在 xcode 中使用 cocos2d-x 开发游戏。在我的游戏中,我添加了一个名为 man 的玩家精灵和一个名为 obs1 的障碍物精灵。现在我试图互相碰撞。为此,我正在使用以下代码,但在运行时进入 Playscene 时,它​​在 getpositionX 和 getpositionY 中显示了一些错误。我在头文件中将 kman 和 kobs1 声明为枚举。请帮我解决这个问题。

   schedule(schedule_selector(PlayScene::update));


 void PlayScene::update(float dt)
{
CCSprite *man = (CCSprite*)getChildByTag(kman);
CCSprite *obs1 = (CCSprite*)getChildByTag(kobs1);
CCRect manRect   = CCRectMake(man->getPositionX(),man->getPositionY(),6,1);
CCRect obs1Rect     = CCRectMake(obs1->getPositionX(),obs1->getPositionY(),6,1);

if(manRect.intersectsRect(obs1Rect))
{
    CCDirector::sharedDirector()->end();

}

}

谢谢。

【问题讨论】:

  • 确保在将两个 Sprite 添加到图层时设置了这些标签。在更新方法中调用它们的任何成员之前,还要检查空条件。如果需要进行连续的碰撞检查,那么你应该同时贴上Sprites as a Member Pointer off the PlayScene

标签: c++ xcode cocos2d-x


【解决方案1】:

你可以使用

man->getBoundingBox() (Return a Rect)
obs1->getBoundingBox() (Return another Rectangle

并检查

if(man-> intersectsRect(obs1)
{

// Do Something 
}

谢谢

【讨论】:

    【解决方案2】:

    你为什么不利用 COCOS2D 中提供的两个物理引擎之一(Chipmunk 或 Box2D)

    http://chipmunk-physics.net/release/ChipmunkLatest-Docs/

    http://www.iforce2d.net/b2dtut/collision-callbacks

    在这两种情况下,您都必须定义您的世界规则(即重力矢量、边界等),并为您希望遵循物理规则的游戏中的每个元素(即质量、尺寸等)定义对象。 )。然后您可以将这些对象绑定到您的精灵,以便精灵的位置和角度根据物理对象进行更新。您还可以绑定两个对象碰撞时调用的回调。

    【讨论】:

    • 感谢您的评论。我想在不使用您在回答中提到的任何物理引擎的情况下碰撞我的玩家和障碍物。如果有任何可能吗?
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2011-08-14
    • 1970-01-01
    相关资源
    最近更新 更多