【问题标题】:Collision detection with particles in Cocos2dCocos2d 中的粒子碰撞检测
【发布时间】:2011-06-29 22:36:46
【问题描述】:

我正在使用 CCParticleSystemQuad 创建粒子效果。现在我想测试与 Cocos2d 场景中的 CGRect 的碰撞。我列出了另一个与这个相似的主题,并且离得更近了一点,但是我仍然没有完整的解决方案,所以我重新列出了一个稍微不同的主题标题。

我有一半的解决方案。我可以获取每个粒子的位置并可以测试碰撞,现在我想设置每个粒子碰撞时的位置。 我目前正在继承 CCParticleSystemQuad,然后像这样添加自己的 getter:

-(tCCParticle*)getQuadParticle:(int)quadIndex
{
    return &particles[quadIndex];
}

然后在我的 Cocos2d 场景中我可以得到粒子和位置:

tCCParticle *particle = [emitter getQuadParticle:i];
CGPoint pos = particle->pos;

这可行,但会警告 CCParticleSystemQuad 可能不会响应 getQuadParticle。这是一个问题,但我现在想做的是以类似的方式从场景中设置位置,例如:

[emitter setParticlePos:i newPosition:newPos];

但是我不确定如何制作一个可以在我的场景中执行此操作的 setter。如果可能的话,我不想在粒子子类中进行碰撞检测。

我开始了另一个类似性质的主题,称为“如何在 Cocos2d (iphone) 中获取粒子位置”,并被告知要覆盖“update”方法或“updateQuadWithParticle”方法,但我不确定如何准确解决这个问题.

如果有人可以向我展示如何执行此操作的示例,我将不胜感激。

【问题讨论】:

  • 您想要对每个单独的粒子进行碰撞检测?我可以告诉你如何检测发射器上的碰撞,但我认为这不是你想要的。
  • 是的,我需要单独管理每个粒子。有什么想法吗?
  • 并非如此。只是猜测,因为我还没有深入研究粒子系统,但是您实际上不必使用内置的粒子系统(或者您可以覆盖它们)。每个粒子只是以不同的色调和不透明度显示的精灵(我猜)。您最好的选择可能是深入研究 Cocos2d 代码并覆盖一些方法,从而为每个精灵/粒子添加自己的身体。
  • 如果您管理它,请发布您是如何做到的 :)
  • 好的。我会看看它,但它可能超出了我的技能范围。我之前做过一个粒子系统,但它的执行速度很慢,但是我当时没有使用 Cocos2d,所以这次我可能会有更好的运气。谢谢你的帮助。如果我有任何成功,我一定会发布结果。干杯!

标签: iphone xcode cocos2d-iphone collision-detection particles


【解决方案1】:

这可行,但警告 CCParticleSystemQuad 可能无法响应 getQuadParticle。

对于警告,请确保您的发射器是由您的子类(而不是常规的 CCParticleSystemQuad)制成的,并且您的 getter 方法在接口(.h 文件)中声明并在实现(.m 文件)中定义。

查看API,我没有看到setParticlePos:newPosition: 的方法,但有一些看起来相似:-(void) updateQuadWithParticle:(tCCParticle*)particle newPosition:(CGPoint)pos;

我没有使用过它,但是看一下源代码表明它可以满足您的需求。

所以也许试试 [emitter updateQuadWithParticle:particle newPosition:newPos];

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 2023-03-27
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    相关资源
    最近更新 更多