问题标签 [skphysicsbody]
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.
ios - SpriteKit Physics:在不同的z平面上时忽略
使用 SpriteKit,是否有可能有两个节点相互碰撞,但是当引入另一个节点时,物理的工作方式会发生变化吗?
例如,考虑以下 3 个节点:
- Object
- Object_Hole
- Player
因此,一个包含玩家(橙色圆圈)和对象(蓝色矩形)的场景:
在上面的场景中,玩家(圆形)会受到重力影响并与物体(方形)发生碰撞。我知道这是如何通过使用物理体、类别和碰撞位掩码来工作的。
现在,介绍 Object_Hole(绿色方块):
在上面的场景中,Object_Hole(绿色方块)覆盖了 Object(蓝色矩形)——它可以在同一个 z 平面或更高的平面上。
是否可以让 Player(圆)上的 PhysicsBody 不与 Object_Hole 所在区域的 Object 发生碰撞?
如果有比添加覆盖节点更好的方法来实现这一点,请告诉我。否则,有可能吗?
谢谢!
ios - Physicsbody 不遵守节点的锚点
我的场景有一堆矩形,其物理实体与矩形大小相同。我喜欢将我的所有对象都锚定到 CGPointZero,但是我注意到当我这样做时,物理体仍然锚定在中间。换句话说,我的物理身体的位置在视觉表示的左侧低 100 个像素。
这是一个简单的代码片段:
任何解决此问题的想法或建议将不胜感激。例如,如果我可以可视化物理物体,那可能会有所帮助,但我不确定如何去做。
更新:所以我通过简单地不设置锚点并重新定位我的矩形来解决了这个问题。所以问题仍然存在,但我有一个解决方法,并且解决方法运行良好。
objective-c - SKPhysicsBody bodyWithPolygonFromPath 内存泄漏
在创建具有自定义形状的 Sprite Kit 物理主体时,我有一个奇怪的内存泄漏。这就是我的实现的样子:
一切都在SKSpriteNode
方法内部进行。Instruments 在创建此类主体后告诉我一些内存泄漏:
这CGPathRelease(path);
条线是必要的 - 没有它,我会得到更多的内存泄漏,CGPath
这是可以理解的。当我改为使用此实现时(出于测试目的):
...一切运行良好,没有内存泄漏。我想知道这是 Sprite Kit 错误还是我做错了什么。
ios7 - 雪碧套件 iOS 7 bodyWithPolygonFromPath 错误
我正在尝试在精灵周围创建物理主体,但是在使用 时bodyWithPolygonFromPath
,我收到错误消息“SKPhysicsBody:尝试创建具有 18 个顶点的多边形时出错,最大值为 12”。然后我尝试使用不同的选项,例如bodyWithEdgeChainFromPath
,但这些选项对重力没有反应。我需要知道如何使用重力bodyWithEdgeChainFromPath
,或者让它能够创建多边形。
sprite-kit - SKPhysicsBody 显得太大
我有SKSpriteNode
一架飞机。这是图像(300px x 83px):
p40@2x.png
该图像在我的 Xcode 项目中命名。
现在我在飞机上添加一个物理体:
CGPath
由SKPhysicsBody Path Generator 生成
为了调试飞机的物理体,我添加了一个SKShapeNode
与CGPath
物理体相同的:
结果如下:
难道我做错了什么?
PS:注意到一件有趣的事情。如果我指定CGPath
如下:
形状很适合飞机!
ios - 自定义physicsBody 的SKSpriteNode 不受重力影响
我正在为 SKSpriteNode 的物理体创建自定义边缘路径。
我尝试使用以下代码分配physicsBody:
这些都不能使精灵受到重力的影响。
但是,如果我使用简单bodyWithCircleOfRadius:
的精灵会受到重力的影响。
任何人都可以解释为什么会这样吗?
ios - Sprite Kit 中的碰撞检测
我在 Sprite Kit 中使用碰撞检测。它正在工作并防止我的精灵穿过路径。但是,我在 didBeginContact: 中没有收到通知,而且我似乎无法控制发生碰撞时物理引擎的响应方式。
我有各种汽车(SKSpriteNodes)使用 SKAction followPath:asOffset:orientToPath:duration 在以下路径中移动:
以前,如果两辆车相交,它们都会像往常一样继续行驶,其中一辆驶过另一辆。为了实现碰撞检测,我进行了以下更改...
将此添加到我的@interface:
将此添加到我的@implementation:
在我的 init 方法中添加了这个:
我创建了我的蓝色汽车:
我还创造了一辆红色汽车:
还有其他汽车,但我只是在使用这两个,直到我弄清楚问题所在。我想收到任何两辆车之间发生碰撞的通知。这就是为什么我只使用一个类别,carCategory。
第一个问题是我没有收到任何通知。我有这个,但它从不将任何内容记录到控制台:
第二个问题是,当两辆车相交时,它们会开始互相推开。这没关系,但我似乎无法管理如何处理碰撞的任何方面。奇怪的是,当我对我的两种汽车创建方法执行此操作时,没有任何变化:
碰撞检测仍然与为两辆车注释掉的那三行相同。这对我来说似乎不正确。只有当我也注释掉这一行时,碰撞检测才会停止:
所以我的主要问题是:为什么contactTest 没有报告任何内容?我的第二个问题是:当我没有为任何汽车分配 categoryBitMask、collisionBitMask 或 contactTestBitMask 时,为什么会发生碰撞检测?
ios - 如何对齐 SKPhysicsBody 和 SKShapeNode?
我有以下代码创建一个SKShapeNode
(self.tiles
)。
但似乎创建的物理体与屏幕上创建的形状不一致。SKShapeNode 正是我想要在屏幕上显示的位置(视觉上)。
我不知道物理实体到底在哪里。
如何对齐SKShapeNode
和SKPhysicsBody
?
ios - Sprite Kit 物理断言失败:(typeA == b2_dynamicBody || typeB == b2_dynamicBody)
我正在尝试使用包含物理的 SpriteKit 制作具有完全 IOS 7 功能的游戏。因此,当用户点击屏幕时,我将球扔过其他一些球(这些球没有移动,我dynamic=NO
为这些目标球设置)。我想做的是:
- 立即停止球(我正在使用
resting=YES
这个) - 将 categoryBitMask 和 contactTestBit 掩码从投掷球切换到目标球的类别/contactBitMask
- 停止这个球的动力。
一切都很好,除了一件事,当我在dynamic=NO
里面设置didBeginContact
(甚至任何其他函数,如update
or didSimulatePhysics
)时出现以下错误:
断言失败:(typeA == b2_dynamicBody || typeB == b2_dynamicBody),函数 SolveTOI,文件 /SourceCache/PhysicsKit_Sim/PhysicsKit-4.6/PhysicsKit/Box2D/Dynamics/b2World.cpp,第 670 行。
好吧,我明白了原因,因为关于物理的计算仍在继续,但不知何故我必须设置它。
那么如何在碰撞/接触后以编程方式停止动力学?
ios7 - bodyWithEdgeLoopFromRect 断言失败
尝试在我的 iOS7 Sprite 工具包项目中设置物理世界时,我收到以下错误。
奇怪的是,在我向项目中添加新场景之前,我使用的代码可以正常工作。我将我的项目恢复到它正确运行的最后一个已知时间,但它仍然无法正常工作。一旦我删除物理世界,该项目将建立。
程序在尝试执行时终止……</p>
如果我将此代码放入一个新项目中,它就可以正常工作。关于我的项目发生了什么以及如何解决它的任何想法?