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

sprite-kit - 将物理体设置为恒定速度

以恒定速度移动球

我试图制作一盒球,其中球以恒定速度移动。当它们相互碰撞时,它们不应减速。我想我已经正确设置了所有属性,但它没有用,30 秒后所有的球都停止移动。

盒子是这样设置的:

球是这样设置的:

在此处输入图像描述

这是物理引擎的错误还是我错过了什么?

0 投票
4 回答
6644 浏览

swift - iOS Swift didBeginContact 未被调用

在过去的两天里,我一直在努力让两个 SKSpriteNodes 注册一个碰撞并唤起didBegin#contact

我已经为这两个对象设置了它们的位掩码 ' categoryBitMask'、' contactTestBitMask' 和 ' collisionTestBitMask'。

我还将dynamic两者的 ' ' 属性设置为 ' true'

initPhysics()好像设置physicsWorld还好。

我所期待的是didBegin#Contact被称为,但它不是

0 投票
2 回答
519 浏览

objective-c - 获取物理引擎移动的对象的方向

我正在使用 spritekit 来了解游戏中的物理行为,当 sprite 节点球从表面反弹时,物理引擎将自动计算其新方向。

我如何在代码中获得这个新方向?

我正在使用 swift,xcode spritekit。但是对象 c spritekit (cocos2d) 也很好

(目的是在弹跳球后面获得一条火迹,但我不知道如何根据球的运动矢量旋转粒子发射器。发射器当前被添加为球节点的子节点)

0 投票
1 回答
354 浏览

ios - Sprite Kit didBeginContact 未在 body 和 edgeRect 之间调用

我有一个游戏,我正在将身体从屏幕上弹开。我想检测这些身体何时与屏幕的边缘接触(仍然让身体通过屏幕离开屏幕),我已经实现了一切,但它仍然无法正常工作..这是我的代码:

游戏场景.h

游戏场景.m

0 投票
1 回答
207 浏览

swift - Swift 中的 SKPhysics - 降低速度属性抖动

通常在像 JBox2D 这样的 2D 物理引擎中,如果用户想要以“慢动作”运行模拟,您只需减小模拟世界迭代的值,例如以 60fps 的正常运动,步长为 1/ 60 如果物理世界每帧都向前迈进。

但是对于使用 swift 的 xcode 6 中精灵套件中的 SKPhysics 类,我只看到名为“.speed”的属性,当我减少时,只会导致混乱,每 10 帧更新一次物理体。

是否有特定的属性或技巧可以让 SKPhysics 世界以较小的增量及时迭代而不会出现严重的故障运动?

0 投票
1 回答
607 浏览

ios - CoreDeviceMotion 无法更新物理世界重力

我正在尝试获取设备运动数据并改变重力方向,这样当我倾斜我的 iPhone 时,球就会在倾斜方向上移动。在本教程中,方法是在节点上获取加速度数据和 applyForce。但是,我想通过改变重力方向来实现这个目标(无论我如何倾斜手机,重力总是沿着真实的物理重力方向)。

这是我的代码:

在上面的代码中,我使用 CMDeviceMotion 来获取重力数据,并将重力值赋予physicsWorld.gravity。该应用程序在我运行时总是崩溃。

Xcode 表示gravityUpdate() 函数中存在错误,但我找不到。希望有人能帮我解决这个问题。或者给我一个更好的方法来模拟重力。谢谢!

0 投票
1 回答
187 浏览

ios - physicsWorld.bodyAlongRayStart() 创建幻象 println(读取“机会”) - 覆盖 println 函数?

我正在编写的游戏中使用 Sprite Kit 的内置物理引擎。为了检查一个角色是否在地上,我使用's的bodyAlongRayStart()功能来检查角色左下角和右下角下面的身体(这个函数属于角色的类) :SKScenephysicsWorld

这段代码在场景的update()函数中被调用(虽然我应该把它移到didSimulatePhysics()......)并且它工作正常!然而,令人讨厌的是,Swift 以其无限的智慧决定在Chance每次检测到沿射线的物体时打印到控制台。

场景中只有一个角色并不太麻烦,但我很快就会添加敌人(他们的工作方式大致相同,但处理他们的动作会有不同的功能),所有这些println()调用都会减慢模拟器的速度对了。我看不出有办法抑制这种情况;调用来自我无法更改的类库。

是否有可靠的方法来覆盖标准println()功能?像这样的东西:

如果是这样,我应该把它放在我的项目中的什么地方?它目前在,但即使我更改标志,AppDelegate.swift其他库(和函数)仍在打印到控制台......bodyAlongRayStart()

0 投票
2 回答
1143 浏览

ios - 阻止 SKSpriteNode 减速

我试图让我的 SKSpriteNodes 永远以恒定的速度移动,即使在碰撞之后也是如此。我已将重力设置为 0,摩擦设置为 0,线性和角度阻尼设置为零,但 Sprites 仍然缓慢减速到零速度。我怎样才能让他们继续前进?

根据下面的答案,这是我尝试过的:编辑下面的代码有效!我只需要检查节点是否比限制慢并加快它们的速度。

0 投票
2 回答
99 浏览

ios - didBeginContact 没有在快速移动的精灵上调用

我有一个游戏,用户在我的主要精灵周围拖动。主精灵与其他精灵碰撞得很好,除非用户非常快速地拖动主精灵。有时,当主精灵快速移动时,物理实体正好相互穿过,两个精灵突然重叠。我有一个断点集,它记录了 didBeginContact 的命中计数,但它没有被命中。

精灵可以移动多快并且仍然被 didBeginContact 覆盖是否有限制?我是否允许用户以比游戏循环处理碰撞的速度更快的速度移动精灵?

同样,当精灵以低速移动时,物理运行正常。

0 投票
2 回答
393 浏览

ios - 向 SKNode 施加脉冲以在屏幕上移动并检测碰撞

我正在制作一个基本的应用程序,它可以在屏幕上推送形状并检测与 Sprite Kit 的碰撞。我的第一次尝试是moveTo在节点上使用。我遇到的问题是碰撞,物体会相互旋转而不是反弹。

因此我发现我需要使用applyForceOR applyImpulse

在这种情况下,例如,我有一个圆圈,它在生命开始时位于屏幕外。然后我们确定一个目标退出点,并希望在那个方向上“轻弹”/“推动”节点。

我无法弄清楚如何将Impulse 应用于我作为CGPoint 的目标结束位置。我需要将其发送到 CGVector,但我不确定需要做什么。我环顾四周,发现了一些 Ray tuts,但它们只显示 applyForce 或 moveTo。我不确定如何计算。