【发布时间】:2018-12-24 08:42:53
【问题描述】:
我正在使用默认的 scenekit 游戏项目来尝试实现一些点击控件来让飞船四处飞行,这是该项目附带的默认控件。我想弄清楚的是如何旋转我的船头以面对屏幕上点击的点。我一直在关注我见过的所有例子,并想出了这个:
let point:CGPoint = sender.location(in: sender.view)
let deltaY:Float = Float(point.y) - ship.position.y
let deltaX:Float = Float(point.x) - ship.position.x
let degreesToRadians = Float.pi / 180
let angle = atan2(deltaY, deltaX) + (90 * degreesToRadians)
ship.rotation = SCNVector4(0,1,0,angle)
需要注意的几点:
- 我不会更改装载船舶的
rotation或position,这两个属性都打印为每个点的0。 - 当我加载项目时,船指向下方。据我了解,您需要将
angle的计算偏移为 0 度,这就是我在angle计算中使用+ (90 * degreesToRadians)的原因。
当我用手指在船周围轻敲一圈时,船会从 0 度到 90 度以 90 度的弧度旋转。以防万一不清楚(或不正确),无论我在屏幕上的哪个位置点击,它都会在东方和北方之间移动。
最后一件事要注意。我的相机被锁定为俯视图,所以我只想旋转 Y 轴,这是方向和第一个加载位置的快速截图:
如果您有任何提示、想法或知识可以发送给我,那就太好了。这个问题把我难住了。
【问题讨论】: