【问题标题】:cocos2d check collisioncocos2d 检查碰撞
【发布时间】:2011-03-15 07:42:30
【问题描述】:

我想检查鸟类和鱼类的碰撞。

我有一个BirdCache,其中包含

-(void) isBirdCollidingWithRect:(CGRect) rect

检查缓存中所有可见的鸟

-(void) update:(ccTime) delta

调用isFishCollidingWithRect 来测试每只鸟,如果YESbird.visible = NO

还有一个FishCache(类似于BirdCache

但结果是鱼在碰撞时永远不会死亡。 (我在两个更新中都设置了visible = NO

我认为问题是当bird.visible = NO首先是比赛条件,然后鱼不会与鸟相撞。然后我尝试schedule:selector(delayedInvisible) interval: 1.0 / 10.0f,但仍然失败。

这类问题有什么通用的方法吗?

【问题讨论】:

    标签: iphone xcode cocos2d-iphone collision


    【解决方案1】:

    所以这个工作是这样的:

    • 为每只活的鸟检查它是否 与任何鱼碰撞,如果它 是的,你杀了那只鸟
    • 检查每条活鱼是否与任何鸟类发生碰撞,以及是否 确实,你杀了鱼

    所以如果鸟撞到鱼,只有鸟会被杀死。

    您必须在每种方法中杀死两个碰撞对象,或者为鸟类和鱼类添加字段(该动物应该在下一帧被杀死),并将其设置为碰撞,而不是直接设置可见字段。

    【讨论】:

    • 向鸟类和鱼类添加字段(该动物应在下一帧被杀死),并将其设置为碰撞,而不是直接设置可见字段。是的,我确实有一个延迟不可见的方法,它将在 1/10 秒后调用。在delayInvisible里面我先unschedule:_cmd 然后设置invisible
    • 我会不使用多线程。你有没有一种方法可以循环遍历每一帧中的所有鱼和鸟?
    • 您的解决方案有效!!!我只是让 [fish gotHit] 在返回 true 之前。但我仍然想知道为什么我原来的方式不起作用。它是单线程。是的,在 isFish/BirdCollidingWithRect 中,我检查了所有的鱼/鸟
    • 顺便说一句,剩下的唯一问题(也许)是鸟类的运动。你能在这里检查我的问题吗?stackoverflow.com/questions/5295028/…
    • 我不知道目标 c,也不知道 cocoa,但我怀疑你首先检查了鸟类的碰撞,当碰撞发生时你将那只鸟设置为被杀死,但你已经离开了碰撞的鱼活。然后你检查了每条鱼与每只活着的鸟的碰撞,我们的鱼没有碰撞到任何鱼,因为与鱼碰撞的鸟已经被杀死了。
    猜你喜欢
    • 2011-07-18
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多