问题标签 [skphysicscontact]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
85 浏览

swift2 - 找到 Nil 值打开一个 Optional - 没有显而易见的原因

我知道很多类似这样的帖子错误,但我觉得这是一个例外情况。

作为教程的一部分,我正在通过该应用程序运行很长一段时间,但随后无缘无故我可以解决它因错误而崩溃

致命错误:在展开可选值时意外发现 nil。问题是,即使我非常缓慢地运行应用程序,它似乎在接触对象时会崩溃,有时不会(并且应用程序只有 3 个对象,因此很容易看到发生了什么)。它打破的功能是:

我知道这只是一个片段,但是我应该在哪里寻找错误?

0 投票
1 回答
135 浏览

ios - didBeginContact 传递 PKPhyicsObject

我有一个扩展的辅助方法SKPhysicsContact

didBeginContact()我对传入的contact.

我有时会收到此错误消息(如五分之一),这会使应用程序崩溃:

我查了一下PKPhysicsContact,它是私有框架(链接)的一部分。 SKPhysicsContact看起来它只是一个空的类定义,它只公开PKPhysicsContact.

我觉得这是 SpriteKit 团队的一个 Objective-C hack,它打破了 Swift 的强类型。

帮助?

如何确保我总是SKPhysicsContact回来?


我添加了一个检查来测试SKPhysicsContact

哪个正确捕获了类型不匹配。

事实上,它从不返回SKPhysicsContact!!?


我已经尝试在 Objective-C 中执行此操作(如响应者所建议的那样),我得到了相同的结果。

我在Apple Dev Forums上进行了讨论,这可能会为未来的答案寻求者提供一些帮助。

这是供参考的Objective-C代码:

在这里调用:

返回此崩溃:


为 Apple 添加了错误报告,#23332190

0 投票
1 回答
92 浏览

ios - 如何为 SKSpriteNode 设置最小碰撞角度

如何为 SKSpriteNode 对象设置最小碰撞角度,以便当它与任何其他精灵碰撞时,它的反向角度总是大于或等于这个角度 - 无论是负的还是正的 - ?

我的目标是防止两个平行边之间的死锁碰撞——例如——这样球就不会永远在它们之间摆动。

0 投票
1 回答
578 浏览

swift - SKPhysicsContactDelegate 使用 Swift 进行碰撞检测

我正在尝试解决我在使用 SKPhysicsContactDelegate 碰撞检测时遇到的问题。我有两个节点,nodeA 和 nodeB,nodeA 在屏幕上是静止的,而 nodeB 可以通过用户的手指在屏幕上拖动。nodeA 需要能够检测 nodeB 是否与它重叠。didBeginContact 和 didEndContact 方法被多次调用,通过研究我发现这是一种预期的行为。为了解决这个问题,我只需将一个整数变量设置为 0,并在每次有联系时将其递增,并在每次联系结束时将其递减。如果该值大于 0,则两个节点重叠,如果该值等于 0,则它们不重叠。这工作正常,直到用户将 nodeB 拖到 nodeA 上的速度太快。发生这种情况时,联系方法的调用次数并不总是正确的。例如,可能检测到 3 个接触,但只有两个末端接触(甚至没有),这使得程序认为两个节点仍然重叠,即使它们没有重叠。我假设发生这种情况是因为用户拖动节点的速度超过了程序可以更新的速度。我能做些什么来解决这个问题吗?基本上我只需要确切地知道两个节点何时重叠以及何时不重叠。另请注意,节点是凸形。以下是我的联系方式:我假设发生这种情况是因为用户拖动节点的速度超过了程序可以更新的速度。我能做些什么来解决这个问题吗?基本上我只需要确切地知道两个节点何时重叠以及何时不重叠。另请注意,节点是凸形。以下是我的联系方式:我假设发生这种情况是因为用户拖动节点的速度超过了程序可以更新的速度。我能做些什么来解决这个问题吗?基本上我只需要确切地知道两个节点何时重叠以及何时不重叠。另请注意,节点是凸形。以下是我的联系方式:

0 投票
1 回答
186 浏览

ios - 在 Swift 2 中检测物理接触

我想在我的应用程序中检测两个对象之间的接触。我有一个enum定义不同的类型:

我还添加SKPhysicsContactDelegate到我的SKView

didMoveToView,我有

所以这是我定义的对象

didBeginContact我的功能中:

如果您点击屏幕,球对象会从屏幕的一半跳到另一个,并且名为 box1 的对象正在屏幕的一半上“下落”,并且“不可见”的间隙可以检测玩家是否在没有与盒子碰撞的情况下通过位于屏幕的另一半。所以我想检测球是否触及间隙,以便球员得分,否则球与盒子碰撞

0 投票
1 回答
447 浏览

swift - 将 SKPhysicsContact 放在 GKComponent 中

目前,我使用 SKPhysicsContact 从 GameScene 中触发我的精灵的行为变化。问题是随着每次开发,游戏场景变得越来越长。有没有人设法制作一个嵌入了 SKPhysics 的 GKComponent 以简化联系人管理?这将如何工作?

0 投票
1 回答
252 浏览

ios - SpriteKit:如何防止两个 SKSpriteNodes 碰撞(在 Swift 中)

我正在制作一个由玩家、障碍物和硬币组成的相对简单的游戏。我的目标是仅在障碍物和玩家之间发生碰撞,并让玩家和硬币之间的接触触发didBeginContact

这是一些代码:

didBeginContact函数将硬币从视图中移除,并将一枚硬币添加到用户的货币银行中。此函数在玩家击中硬币时调用,但在硬币被移除之前发生碰撞。碰撞对游戏玩法非常具有破坏性,我一直无法找到可行的解决方案。有什么建议么?

0 投票
0 回答
37 浏览

debugging - 模拟器与设备接触点转换差异?

我已经为此苦苦挣扎了一段时间,似乎无法找到问题所在。

我有一个SKScene我将称为 的self,还有一个SKNodechapterScene添加到self. 我有一个包含可移动角色的边界设置。这是我的设置方式

ViewController.m(呈现SKScene子类的控制器OLevel

这是我的OLevel.m

这里的要点是,最终我已经正确设置了我的场景及其子节点(正如我最近所期望的那样)。当我在模拟器(iPhone 6)上运行时,我正在使用该- (void)didBeginContact:(SKPhysicsContact *)contact方法来监控和碰撞。每当联系开始时,我都会记录以下内容

我还记录了字符位置,以确保这个转换点是正确的。

当我在模拟器上运行它时,移动节点角色撞到墙上,我得到这个:

这是完全正确的。

但是,无论出于何种原因,我似乎都找不到,这是在我的iPhone 5C上运行的完全相同的代码......

我真的希望这是一个我缺少的简单修复。如果有人可以帮助我,我将不胜感激。谢谢

更新 似乎正在发生的一切是,当我在模拟器上运行它时,该点是从屏幕中心(0,0)引用的,而在设备上,参考点是真正的原点,左上角角为 (0,0),在iPhone 5c的情况下,中心为 (160, 284)。仍然不知道如何纠正这个......或者为什么它甚至会发生。

到目前为止,这是我能想到的唯一解决方案......

但这很尴尬。这可能是 Xcode 或 Apple 的错误,或者这是发生的原因和不同的解决方案。

0 投票
2 回答
37 浏览

ios - 精灵没有正确接触

有一个球和一个桨,球应该在桨上并接触它,但球从不接触桨并在到达桨之前停止,有人能帮我吗?

在此处输入图像描述

0 投票
1 回答
72 浏览

swift - iOS SpriteKit 碰撞检测在解码保存后失败

我有一个游戏,其中 Falling Nodes 掉下来并击中 Base Number Sprite Node 并且游戏逻辑从那里运行。当我从头开始设置一个新游戏时,碰撞检测完全按照它应该的方式工作。当我使用 NSCoding 从以前的保存创建游戏时,会出现我的问题。在这两种情况下(新游戏和从保存游戏继续),物理主体都是相同的 - 动态、相同大小的主体、相同的 contactTestBitMask、相同的 categoryBitMask。我已经测试了所有这些,所以我知道这是真的。物理接触委托也设置为正确的对象。但是,在保存后继续进行的游戏中,未注册联系人,我无法弄清楚原因。我唯一能想到的,

任何帮助将非常感激