问题标签 [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.

0 投票
1 回答
1278 浏览

objective-c - 将 SKShapeNode 保持在 SKSpriteNode 的范围内

我必须在这里遗漏一些非常明显的东西。我的目标:在屏幕中央创建一个盒子,一个弹跳球留在那个盒子里。我正在尝试为边界框创建一个基于边缘的 SKSpriteNode,为内部球创建一个基于体积的 SKShapeNode。球在盒子的中心生成,穿过盒子,从屏幕上掉下来,显然撞到了屏幕底部下方的东西,然后在底部边缘上方反弹了几次,最后消失了。一直以来,didBeginContact 都不会触发。

问题1:为什么我的球从可见的盒子里掉了下来,却碰到了屏幕边缘以下的东西?我的物理体是否与实际的精灵错位了?

问题2:为什么 didBeginContact 没有触发?[编辑,好的,这很简单。忘记设置physicsworld.delegate]

谢谢!

场景.h

Scene.m,didBeginContact

场景.m,initWithSize

0 投票
2 回答
970 浏览

dynamic - Sprite Kit 断言失败:(typeA == b2_dynamicBody || typeB == b2_dynamicBody)

这是之前问过的,但最初的提问者不需要更改动态属性,所以他通过取消提问来回答自己的问题。

我在 iOS7 中使用 Sprite Kit,我希望能够在运行时更改 SKPhysicsBody 的动态属性。最初我在 touchesBegan: 方法中改变了它。Apple Dev 论坛中有人建议将更改移至 didSimulatePhysics: 方法,但这也无济于事。

此代码导致错误:

}

调试器中出现的错误是:

断言失败:(typeA == b2_dynamicBody || typeB == b2_dynamicBody),函数 SolveTOI,文件 /SourceCache/PhysicsKit/PhysicsKit-4.6/PhysicsKit/Box2D/Dynamics/b2World.cpp,第 670 行。

我在别处环顾四周,但这似乎是 Sprite Kit 的 Box2D 实现(和覆盖)的问题。

也许?

0 投票
1 回答
1349 浏览

objective-c - Sprite Kit - Resting physics body object at correct collision contact point

I am trying to make a game about balls and using sprite kit with physics body for IOS 7. My problem is about resting objects when contact / collide. Here is my code in didBeginContact:

Actually contact.bodyA is already resting but I just set it to make sure both objects are set to resting. The problem is, balls are not touching to each other even if I set contact.bodyA(or B).resting = YES.

This is what I want:

http://i.stack.imgur.com/p8JTk.png

This is what happening sometimes:

http://i.stack.imgur.com/LWORO.png

As you can see in second picture, the blue ball is a bit far from other balls. Is there any other way to magnet the ball at contact point always?

0 投票
1 回答
863 浏览

ios - 子类化 SKSpriteNode 时物理体的问题?

我在继承 SKSpriteNode 时遇到问题。这是我对子类的实现:

然后我在我的主要游戏场景中创建了一只松鼠:

一切都创建得很好。然而,在游戏过程中,我尝试在触摸开始时“暂停”松鼠物理身体,然后在触摸结束时重新启用它(tempSquirrelBody 是场景的 SKPhysicsBody 实例变量)。基本上,我试图给出松鼠在用户触摸屏幕时向用户移动并越过其他对象的错觉。

不幸的是,这不起作用;当physicsbody应该设置为nil时,物理体没有被暂停,松鼠会与其他物体发生碰撞。当我将代码从我的 SSSquirrel 类移动到游戏场景时,它可以工作。我做错了什么?

谢谢!

0 投票
2 回答
1277 浏览

ios - 使用 UIPanGestureRecognizer 轻弹 SpriteKit 精灵

我正在尝试使用 UIGestureRecognizers 来在 SpriteKit 场景中移动精灵。到目前为止,它移动得很好,但只要我的手指离开屏幕,它就会停止。我现在要做的是将手势结束转换为精灵上的轻弹式运动,以便它继续沿我移动手指的方向,并基于该运动以一定程度的力移动。

这就是我到目前为止所拥有的,它似乎适用于水平运动,但在 Y 轴上一直以错误的方向发送精灵。

更新 - 更多关于我当前滑动时会发生什么。平移和释放产生的效果导致精灵以正确的方向行进,但添加了一个向下的角度。向下滑动会导致向上移动,向上滑动会导致向下移动。

更新 2 - 可能是这段代码对于我想要实现的目标来说太简单了,我应该计算精灵在施加力之前应该移动多远,这样我就可以根据它的移动给它一个特定的速度向量?

0 投票
0 回答
158 浏览

ios - 如何将实体添加到 SKPhysicsWorld

我正在为 iOS 设备开发一款正在运行的游戏,但遇到了问题。我为一个有 4 个屏幕长度的游戏图块创建了一个子类。游戏图块将有一些节点,这些节点是障碍物。我有一个创建玩家、一些背景装饰和粒子系统的场景。我需要将障碍物节点添加到场景中的物理模拟中,以便我可以检测它们何时接触。我不知道该怎么做......还有其他更简单的解决方案吗?在此先感谢您的帮助。

0 投票
1 回答
871 浏览

ios - - (void)didBeginContact:(SKPhysicsContact *) 拒绝触发

1)我在 SKScene 标头上设置了委托协议:

2)我将委托设置为物理世界:

3)我设置了我的位掩码:

4)我让我的播放器:

5)我做我的结束瓷砖:

6)但这永远不会被调用!:(

我正在做一个迷宫游戏。玩家当前可以与所有墙壁发生碰撞,但我希望游戏在到达最后一个瓷砖时结束。目前,没有调用联系事件。我真的不知道出了什么问题,我将调试器输出设置为显示所有输出(无论如何,如果它到达事件,所有子级都应该被删除)。

为什么

0 投票
2 回答
434 浏览

sprite-kit - SKPhysicsContact 当对象与多个对象发生碰撞时,首先处理,忽略所有其他对象.. 怎么样?

好的,我有一些物理对象,它们都被很好地分类,并且我的 didBeginContact 被正确触发,并且做了它应该做的事情。问题是这样的:

我有两类物体,比如球和桨……当球碰到桨时,球应该爆炸……很简单……问题在于球可以同时接触 2 个桨……所以,不止一个 didBeginContact 被调用,因此发生了不止 1 次爆炸(每个球接触的桨 1 次)。所以我想弄清楚的问题是,如何删除/忽略所有后续与桨的接触如果代码已经处理了涉及原始球的碰撞,则不会被处理?在开始爆炸之前从父级移除 SKSpriteNode 不会使其他联系人无效,它们仍然会被处理......所以我该怎么说......嘿,物理联系人的东西......那个身体不再在图片中......所以只是把那些联系人扔掉,不要担心他们?

我想我可以在进行爆炸等之前明确检查父级在联系代码中是否仍然有可用的 SKSpriteNode ,但这似乎充其量是笨拙的,尽管我认为它会起作用......还有另一种/更好的方法来处理这个吗?我必须相信有。

0 投票
2 回答
4020 浏览

swift - SKshapenode 没有响应 Physicsbody

我已经创建了一个SKShapeNode并且我已经分配了一个physicsBody给它。但是,当有接触时它不会被触发。

代码创建SKShapeNode

这是触发代码:

如果有人知道我做错了什么,为什么SKShapeNode没有激活physicsBody,请告诉我。

0 投票
1 回答
590 浏览

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

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

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