Swift SpriteKit 在 x 轴上旋转节点

Posted

技术标签:

【中文标题】Swift SpriteKit 在 x 轴上旋转节点【英文标题】:Swift SpriteKit Rotate Node at x-axis 【发布时间】:2017-02-12 18:53:41 【问题描述】:

我正在关注本教程(我认为它是用 javascript 编写的):3D Terrain

我在 Swift 中使用 SpriteKit 进行尝试,但在 x 轴旋转时遇到问题。

这就是教程中的样子:

这就是我现在的位置:

我使用以下代码创建了这个网格:

var shapePoints = [CGPoint]()
for i in 0...zeilen+1
    for j in 0...spalten
        shapePoints.append(CGPoint(x: zellenGroesse*j, y: zellenGroesse*i))
        shapePoints.append(CGPoint(x: zellenGroesse*j, y: zellenGroesse*(i+1)))
    

let fertigeShape = SKShapeNode(points: &shapePoints, count: shapePoints.count)
self.addChild(fertigeShape)

现在我想将它旋转一些度数,但我只能在 z 轴上旋转它,而不是在 x 轴上。

SpriteKit 中是否也可以在 x 轴上旋转节点?

感谢和问候

【问题讨论】:

【参考方案1】:

您可以从 ios11 开始使用所谓的 SKTransformNode。当您想要 3D 透视倾斜一个节点时,将其作为子节点添加到 SKTransformNode,然后将其设置为 xRotation 或 yRotation,这是一个以弧度为单位的值。

let t = SKTransformNode()
t.addChild(someNode)
scene.addChild(t)
t.xRotation = CGFloat.pi // tilts someNode by 180 degrees

您也可以像这样为更改设置动画。

let degrees: CGFloat = 20
let radians = CGFloat.pi / 180 * degrees
let duration = 2.0
let tilt = SKAction.customAction(withDuration: duration)  (node, elapsed) in
    let percent = elapsed / CGFloat(duration)
    t.xRotation = percent * radians

tilt.timingMode = .easeOut
t.run(tilt)

【讨论】:

【参考方案2】:

不,不可能,SpriteKit 是 2d 的。您应该查看 3d 的 SceneKit。 https://developer.apple.com/reference/scenekit

【讨论】:

感谢您的回复。我看过 SceneKit,但对我来说它太复杂了。 :'( 我已经尝试了 3 个小时来在 SceneKit 中获得这个网格 - 我无法创建它..(哦,使用 cameraNode 让我发疯 - 啊)

以上是关于Swift SpriteKit 在 x 轴上旋转节点的主要内容,如果未能解决你的问题,请参考以下文章

Swift Spritekit 应用旋转脉冲

Swift SpriteKit - 防止精灵节点角旋转

(Swift SpriteKit) 沿触摸方向旋转精灵

在 SpriteKit 中移动相机

使用 SKY SpriteKit 和 Swift 4 移动和旋转精灵

如何使用按钮在一个轴上停止旋转并在新轴上开始旋转?