带有 Gravity False 的 SpriteKit 节点倾斜到位

Posted

技术标签:

【中文标题】带有 Gravity False 的 SpriteKit 节点倾斜到位【英文标题】:SpriteKit Nodes with Gravity False tilted in place 【发布时间】:2017-02-27 04:15:00 【问题描述】:

我正在构建一个菜单游戏场景,其中有一个徽标和 4 个按钮,所有这些都有一个 SKPhysicsBody 和图像的矩形大小。 我只设置了所有这些:

logo.physicsBody = SKPhysicsBody(rectangleOf: logo.size)
logo.physicsBody?.affectedByGravity = false

创建对象的完整代码(都一样)

logo = SKSpriteNode(imageNamed: "logo")
logo.anchorPoint = CGPoint.zero
logo.name = "logo"
logo.zPosition = 2
logo.size = CGSize(width: 309, height: 272)
logo.setScale(Generic.utilities.getScale())
self.addChild(logo)
logo.position = CGPoint(x: self.frame.width/2 - logo.size.width/2, y: self.frame.height - logo.size.height - 40)
logo.physicsBody = SKPhysicsBody(rectangleOf: logo.size)
logo.physicsBody?.affectedByGravity = false

在按下按钮的过程中,我将所有受影响的节点更改为 true,这样它们就可以从屏幕上掉下来,并且新元素可以进来。

我遇到的问题是,当我运行应用程序时,所有元素都在屏幕上移动/倾斜,而不是在原来的位置

我只想让它们保持原位,直到我单击其中一个按钮,然后它们会从屏幕上掉下来。

为什么当我设置一个物理体和affectedByGravity时它们都像这样倾斜?

【问题讨论】:

您需要显示更多代码...例如如何创建对象、设置的重力、至少一个对象的整个物理体代码。我能够创建一个带有 3 个正方形的快速演示(2 个添加在场景编辑器中,一个添加在代码中,1 个在场景编辑器中设置了物理,另外 2 个在运行时创建了物理。添加的那个在场景编辑器中,场景加载时会轻微旋转(不知道为什么)。提供更多信息,我们可以解决这个问题 @RonMyschuk 为问题添加了更多代码 可以显示重力设置吗 对不起,我很茫然。我将代码粘贴到我的测试项目中,它按预期工作。我并不是要质疑您的“没有更多代码”,但代码或 sks 场景文件(如果您正在使用)中必须有其他内容导致了这种情况。目前我要质疑的两件事是 1)您的 getScale 函数与此有关吗? 2) 场景中是否有其他物理对象相互重叠?如果是这样,他们可能会在争夺霸权的斗争中将彼此推向不同的位置和角度:( 在我看来你的元素相互重叠,碰撞测试正在移动你的精灵 【参考方案1】:

好吧,感谢@RonMyschuk 和@Knight0fDragon,我发现(以前不知道)我可以添加到我的场景中加载以下内容:

skView.showsPhysics = true

在你的节点的物理主体周围添加边界线,这样你就可以看到它们交互。通过这样做,我看到我的一个节点的physicsBody 完全处于不同的位置,那么它应该

通过处理这个问题,一切恢复正常

【讨论】:

以上是关于带有 Gravity False 的 SpriteKit 节点倾斜到位的主要内容,如果未能解决你的问题,请参考以下文章

带有 HTML 5 画布的 Sprite-Sheet BLIT?

使用 Flex 附加带有 ActionScript3 的 Sprite

Sprite Kit:很多精灵 (1000+),带有位 Blitting

在 window.resize 事件期间,带有 sprite-animation 的 Div 没有正确更改

在 Sprite Kit 场景中创建带有重复图像的栏 - iOS

带有 Sprite 和 Rectangle 的滚动条不会移动文本,只会移动它所绘制的 Rectangle