【问题标题】:SKPhysicsBody collision detection on one sideSKPhysics车身碰撞检测在一侧
【发布时间】:2014-03-19 15:58:46
【问题描述】:

是否可以检测节点是否仅在一侧与另一侧发生碰撞?

例如,一只动物与另一只动物奔跑。在这种情况下,碰撞检测方法被调用。但是当动物跳过动物并在其上“行走”时,碰撞检测不会被激活。

我会很感激每一个答案。 谢谢

我的代码:

if (lionNode.frame.origin.y + lionNode.frame.size.height < animalNode.frame.origin.y) {
        NSLog(@"Walk");
    }
    else {
        NSLog(@"dead");
    }

【问题讨论】:

    标签: ios objective-c sprite sprite-kit skphysicsbody


    【解决方案1】:

    在碰撞检测回调中检查以下内容。

    if(y-origin of the first animal + its height < the y-origin of the second animal){
        //then do the logic for walking on top of another animal (probably nothing would happen here depending on what you are trying to build)
    }
    else {
        //forward to collision logic (e.g life loss, lose points, restart level ,etc..)
    }
    

    如果第一只动物有可能进入第二只动物的下方,那么您需要将您的状况更新为以下

    if(firstAnimal.origin.y + firstAnimal.frame.size.height < secondAnimal.frame.origin.y  
    || firstAnimal.origin.y > secondAnimal.frame.origin.y + secondAnimal.frame.size.height)
    

    注意不同的坐标系,有时可能会造成混淆。 希望这会有所帮助,如果有任何不清楚的地方,请随时询问。

    【讨论】:

    • 感谢您的回答!我已经尝试了多次,但它还没有奏效..我已经在上面发布了我的代码
    • 尝试记录原始值和狮子的高度,以了解正在发生的事情。如果没有任何意义,请尝试使用该位置,如下所示
    • 我想我在代码中发现了问题,在 skscene 中,原点位于左下方,因此条件应更改为大于 if (lionNode.frame.origin.y + lionNode.frame.size .height > animalNode.frame.origin.y)
    • 两件事首先尝试记录值并共享它们,以便我们可以了解正在比较的值。其次,您如何移动精灵(例如运行动作,更改位置,..),如果可以请分享您定义两个精灵的物理体的代码
    • 问题解决了。动物的 y 原点始终为零,因此无法调用 else 条件。感谢您的大力帮助!
    【解决方案2】:

    碰撞检测将在以太情况下被调用,但在回调中你可以比较速度向量;如果他们彼此疏远,请将其视为错过。

    【讨论】:

    • 感谢您的回答!你能再解释一下你的想法吗?我不太清楚你在比较回调中的速度向量是什么意思。
    猜你喜欢
    • 2019-04-07
    • 2023-03-26
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    相关资源
    最近更新 更多