问题标签 [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 投票
0 回答
51 浏览

sprite-kit - 有没有办法在 spritKit 中的身体接触之前停止动画?

我有一个 SpriteKit 动画,其中两个身体高速接触。不幸的是,如果我使用 didBeginContact 方法,当我停止动画时,两个身体已经重叠了一点。我想在接触发生之前停止动画,比如 willBeginContact 方法。有办法吗?谢谢。

0 投票
1 回答
94 浏览

ios - 描述 SKPhysicsContact 对象(属性和方法)

我知道(至少我认为)当两个精灵发生碰撞时,在 SKPhysicsConstactDelegate 中定义的 didBeginContact 方法将被调用,并以 SKPhysicsContact 作为参数。

与 SKPhysicsContact 对象关联的方法和属性是什么?

除了来自https://developer.apple.com/的“Sprite Kit 自动创建一个 SKPhysicsContact 对象来描述两个物理身体之间的接触”之外,我似乎在网上找不到任何关于此的信息。

也许我误解了 SKPhysicsContact 对象到底是什么。有谁知道任何描述它的链接?

0 投票
2 回答
196 浏览

swift - SpriteKit 的 didBeginContact 不能被调用

我用一个简单的场景进行了测试。

无法didBeginContact调用函数。

我尝试使用collisionBitMaskand s1.physicsBody = SKPhysicsBody(circleOfRadius: 100)。问题一直存在。

我能做些什么来修复它?

0 投票
1 回答
130 浏览

swift - 一旦位置已设置,更改节点的位置。(SpriteKit)

我正在开发一个游戏,该游戏涉及在屏幕上移动的对象(鱼),您需要用另一个可以上下移动的对象(钩子)来捕捉这些对象(鱼)。一旦物体接触到鱼的位置,就应该与鱼钩的位置相同。所以在开始接触(确实有效,我确定)我说,当鱼钩和鱼接触时,鱼的位置变得与鱼钩相同。

出于某种原因,当我运行它并且他们联系时没有任何反应。我知道确实开始接触工作正常,因为当我告诉它在碰到鱼钩时将鱼移开时,它就可以工作。问题是我无法更改绿鱼的位置。为什么会这样,我能做些什么来解决它?

0 投票
0 回答
89 浏览

ios - SKPhysicsContact.CollisionImpulse 值似乎不一致

我正在创建一个游戏,其中玩家导航他们的船只(SKSpriteNode A)并尝试与缓慢旋转的静止矩形精灵(SKSpriteNode B)接触。他们可以通过脉冲来导航他们的船只,以加速、减速、改变方向等。当发生接触时,我使用 SKPhysicsContact 对象的“CollisionImpulse”属性来判断碰撞是否过于剧烈。两个物体的质量相同。问题是我在测试时得到不一致的结果。我每次都会以看似相同的速度与对象发生碰撞,并获得非常不同的 CollisionImpulse 值(有时大约 10,有时大约 30)。

由于对象 A 是静止的(尽管是旋转的)并且只有对象 B 在移动,所以我的假设是 CollisionImpulse 值将仅基于对象 B 在撞击时的速度,但事实似乎并非如此。

对象 A 的旋转会影响 CollisionImpulse 吗?还有其他东西会影响我缺少的 CollisionImpulse 值吗?

0 投票
3 回答
264 浏览

ios - Spritekit-DidBeginContact 未被调用

我注意到这个问题已经发生在很多人身上。我确保self.physicsWorld.contactDelegate = self 在 didMove 函数中有,但它仍然不起作用。这是我的代码:

0 投票
2 回答
133 浏览

sprite-kit - SpriteKit 中的物理接触

是否可以解释位掩码如何仅适用于这种简单的情况:

他们之间没有碰撞,因为不知何故,这在他们之间被关闭了。我假设通过将它们的碰撞掩码设置为 00 一直到 32 位......但是让我们把它留给另一个问题,我还没有想出如何关闭这些。

将每个球设置为具有唯一的接触位掩码后,如何在它们接触时提供联系信息?

如何知道哪两个球相互接触?

是否可以让任何给定接触中的最大球只收到联系信息?


更新:

我不一定在代码之后。如果你需要代码来解释什么是什么,它是如何工作的,以及为什么不管做什么,那就去做吧。

但我真正追求的是理解位掩码如何工作以提供允许确定“谁”参与任何联系的逻辑。

我给每个球尺寸一个不同的位掩码的原因是我认为这可能有助于确定两个球之间任何给定接触中的较大球。不过,我可能错了。

更新 2:

对进展过程的理解:

据我了解,这些是该过程的一部分:

  1. 将 SKView 子类化为 SKScene 注册为符合物理世界联系通知委托。也说是这样。

  2. 将位掩码设置为希望在模拟中了解和/或控制的每种身体交互类型的类别

  3. 使用这些位掩码,通过适当地应用它们来阐明希望成为接触和/或碰撞一部分的每个对象的性质(这里有一些神奇的决策)。

  4. 在注册为委托的同一个 SKView 子类中,使用执行操作的代码覆盖联系人回调

  5. 创建一些魔术代码来确定谁/什么联系了谁。


我了解其中一些,但不了解设置联系人位掩码与命名类别位掩码的推理之间的差异,也不了解如何确定谁联系了谁。

0 投票
1 回答
96 浏览

swift - SpriteKit didEndContact 没有被调用

在我的didEndContact:方法中,我增加了一个“currentScore”。

由于某种原因,didEndContact:没有被调用,因此“currentScore”没有被增加。任何想法为什么或我应该寻找什么来调试这个?

这是相关代码,如果我也可以添加任何其他有用的详细信息,请告诉我:

0 投票
0 回答
120 浏览

swift - SpriteKit 和 Swift 3 - 弹跳不能与球节点正常工作

我做了一个游戏,它基本上有一个球、几个目标和桨。但是,我需要根据球与哪个目标相撞,只要它不低于最小速度或不超过最大速度,速度就会增加三倍、两倍或减半。

为此,我一起使用了 didBegin(contact) 函数并设置了不同的速度,如下面的代码所示:

我的问题是有时当球与目标相撞时,它会以一种非常奇怪和不切实际的方式弹开,有时基本上会出现故障(请查看下面的链接以获取显示我的意思的简短视频剪辑)

注意:在视频 2/3 秒处是一个奇怪的反弹发生的例子

https://drive.google.com/open?id=0BxgQmn_JruJ_aUU2dVBoVlprV0k

为什么会发生这种情况,更重要的是我该如何解决?

PS:我认为可能导致这种情况的一个建议是,速度矢量同时控制了球的角度(方向)和速度(我认为),因此当我设置速度时,没有考虑方向。如果这是原因,是否有可能在使弹跳逼真的同时将速度增加三倍/两倍/减半?

0 投票
1 回答
263 浏览

objective-c - SKPhysicsContact 中的 bodyA 和 bodyB 是如何确定的?

我在 SKScene 中有两个不同的固定 SKPhysicsBody。两者之间的唯一区别是它们的 categoryBitMask。一个的 categoryBitMask 为 512,另一个为 1024。

在我的程序中,我有一个标准的联系人处理程序,从-(void)didBeginContact:(SKPhysicsContact *)contact 它开始调用:

在我的程序中,我需要确定一个动态物体和两个固定物体之一之间的接触矢量。为此,我访问了 SKPhysicsContact 的 contactNormal 属性

不过,我注意到接触向量不一致,我确定这是因为有时 SKPhysicsContact 的 bodyA 是固定体,有时 bodyA 是动态体。

例如,当子弹(动态体)从左侧击中建筑物(固定体)时,我希望(-1,0)每次的接触向量都是。目前,接触向量有时(-1,0)(从左边)有时(1,0)(从右边)都取决于哪个身体contact.bodyA

我的问题:假设所有其他条件都相同(物理属性等),什么决定了 SKPhysicsContact 中的 bodyA 和 bodyB 是什么?