问题标签 [skphysicsworld]

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 投票
4 回答
8717 浏览

ios7 - iOS7 SKScene 如何让精灵从屏幕边缘反弹?

我正在构建一个球在 iPad 屏幕内弹跳的游戏。类似于乒乓球游戏。我看到 SKScene 的 SKPhysicsWorld 具有重力属性,并且还控制对象如何相互碰撞。

有什么方法可以自动检测精灵的边缘是否与屏幕的边缘碰撞,所以它可以反弹?还是我需要编写自己的碰撞代码?

0 投票
1 回答
315 浏览

ios7 - 加入后奇怪的 SKPhysicsWorld 行为

我正在使用 SKSpriteKit 制作钓鱼游戏。我有一个用于钩子和一些鱼的精灵节点(为此我扩展了 SKSpriteNode 类)。理想情况下,鱼被钩住时的行为是鱼的嘴会移动到鱼钩的尖端(使用动作来做到这一点):

然后鱼会向下旋转一点以模拟挂在钩子上(另一个动作:)

我认为这样运行这些:

这或多或少有效(根据鱼的方向解决扭结)

我后来想做的是在鱼和鱼钩之间创建一个关节,所以如果我移动鱼钩并且它已经钓到了一条鱼,鱼就会跟着一起走。

我这样做:

如果我在没有关节的情况下运行代码,鱼会留在钩子上并旋转。但是,一旦创建了关节并运行了动作,就不会调用来自上方的旋转动作(尽管会移动到钩子)。

我一点也不知道为什么会发生这种情况。有人有任何指示吗?

0 投票
1 回答
590 浏览

ios - 加速精灵套件的物理时钟

我有一个使用 spritekit 物理世界的动画。我一直在寻找是否有办法通过物理“快进”并获得结果或路径而不显示动画。我看着physicsWorld并没有看到任何东西?关于我如何做到这一点的任何想法?

基本上我想在用户决定执行之前向用户展示动画的结果位置。

0 投票
2 回答
3086 浏览

ios - SKPhysicsContactDelegate Not Working

I have the following code:

in my scene:

As you can see, I set both ship and energy at the same location to start with, so they will always collide.

For both classes, I have the following code in their init method:

What I found is that the NSLog is never get called, so that the physical collision detection never works, I've read a lot from apple developer tutorials and it seems all the same of what they had, not sure why is not working. I can see the ship and energy images on screen collide each other.

0 投票
3 回答
156 浏览

objective-c - 如何检测 SpriteKit 中涉及碰撞的节点数

我正在创建一个射击游戏,我在其中从一个节点向敌方射弹射击射弹。当射弹同时与两个敌方节点接触时,接触代表会被调用两次。我希望能够知道弹丸接触了多少个节点,以便为玩家提供 2 倍的奖励。

任何人都可以提出一种干净有效的方法来实现这一目标吗?

0 投票
1 回答
365 浏览

ios7 - PhysicsBody -allContactedBodies 如何列出 PhysicsWorld 中的关节

我正在制作一个包含许多不同类别的身体的游戏。当用户移动一个物体并将其与同一类别的另一个物体碰撞时,它们会相互粘合。当三个身体总共粘在一起时,它们就会消失。

身体有一个位掩码,用于它的特定类别和一个 CNPhysicsCategoryGenBody 通常识别身体。这是一个游戏要求,因为还有其他参与碰撞的物体不受用户控制并且不会相互粘合。

粘合身体所涉及的 didBeginContact 的代码:

到目前为止,一切都很好。当我想列出附加到另一个身体的身体时,问题就来了。SKPhysicsBody -allContactedBodies 方法不会返回关节中的实体。我认为这可能是因为身体连接到一个关节而不是另一个身体。

SKPhysicsWorld 有添加或删除关节的方法,但我找不到列出参与关节的物体的方法。我需要列出这些物体以检查哪些物体被粘合,看看它们是否超过一定数量并将它们移除。

0 投票
2 回答
1766 浏览

objective-c - 使用物理 SKSpriteNode 子节点暂停 SpriteKit 游戏

我有一个 SKSpriteNode,在SKNode *_fgLayer.

现在,当我暂停或取消暂停游戏时,我希望 SKSpriteNode 保持原位而不旋转或掉落。如果我简单地使用_fgLayer.paused = YES;SKSpriteNode 并不会停留在原地,而是会旋转并掉落。如果我physicsBody.dynamic = NO;在暂停和 取消暂停时设置physicsBody.dynamic = YES;它可以工作。

但是,经过几次尝试后,我总是会遇到以下崩溃:

"Assertion failed: (typeA == b2_dynamicBody || typeB == b2_dynamicBody), function SolveTOI, file /SourceCache/PhysicsKit/PhysicsKit-4.6/PhysicsKit/Box2D/Dynamics/b2World.cpp, line 670."

所以,我猜设置 aphysicsBody.dynamic = NO;和 back 是行不通的。

有没有人知道
如何在游戏暂停时暂停动态物理体以保持原位?

0 投票
1 回答
400 浏览

sprite-kit - 将关节​​添加到 Sprite Kit 中的 SKPhysicsWorld 后无法更改 SKPhysicsJointLimit maxLength

因此,我创建了一个 SKSpriteNode 环,它们本质上是使用销接头连接在一起的矩形。我想将此环悬挂在 SKShapeNode 圆圈内。我已经使用 SKPhysicsJointLimit 将每个节点连接到 SKShapeNode。

这一切都很好,如果我将 maxLength 设置为我主观确定的“正确”数字,我就会得到我正在寻找的效果。

我已经将所有的限制关节存储在一个数组中,这样我就可以轻松访问,并且我已经将它们添加到了物理世界中。

所有这些都按预期正常工作,尽管需要一些工作才能使代码正确。这些东西很挑剔!

现在,我真正想做的是将 maxLength 设置为某个较大的数字,然后随着时间的推移逐渐减少该数字,以便戒指从“松散悬挂”变为“拉紧”

我尝试了多种方法——似乎都没有。首先,我试过:

但这根本没有做任何事情。

我终于意识到,在将关节添加到物理世界后,您似乎无法更改关节的属性。所以,我在场景的更新方法中尝试了这样的事情:

但是,这也不起作用。它抛出了错误:

即使我已经清楚地删除了它。所以,我真的不知道从这里去哪里。互联网上关于关节的文档和现有材料非常薄。我想接下来我会尝试移除所有关节并添加它们,但这将是一个巨大的痛苦。

任何想法都会非常有帮助!

0 投票
1 回答
268 浏览

objective-c - SKPhysicsJoints 都相当不稳定且富有弹性

所以,我有一个由几个物理体组成的物体,有 10 个左右的关节将它固定在一起(销钉和固定)。它运作良好,但我对关节的摇晃程度感到惊讶。我认为“固定”就像我将它们合并到一个物理体中一样固定,但它基本上摇摇晃晃以至于无法使用。同样使用针脚,当对连接对象施加力时,每个物理体上的点似乎彼此之间存在相当大的差异。情况一直如此,所涉及的两个物体的运动都不受任何限制。

我希望关节更坚硬,弹性更小。有没有人能够找到解决方案或原因?添加更多的关节似乎并没有使它变得更加僵硬。

0 投票
1 回答
257 浏览

ios - 由于联系委托中的断言失败导致游戏崩溃

当我的游戏因断言失败而崩溃时,我收到以下日志。

这种情况会间歇性发生(大约每 10 次我玩游戏就有一次)。我所能得到的是,Box2D 引擎与场景的物理世界中的接触检测相关的发生了一些不一致。但我无法在我的代码中查明问题的原因。

有人可以告诉我如何去寻找这个问题的根源吗?