Mig*_*Slv 1 scenekit sprite-kit swift
在大多数游戏中,我的游戏都有一个场景和HUD(SKScene).为了避免与HUD元素重叠,我需要计算主要对象的投影大小.因为对于每个iPhone模型,对象的HUD尺寸和投影尺寸是不同的,所以我需要一种方法来动态地执行此操作,为此我需要获得主要对象的投影尺寸.
对我来说显而易见的方法是使用xFov和yFov,但由于某种原因它们总是为零.usesOrthographicProjection被设置为false所以它不是因为那个.
下面是一个简单的测试代码,它试图使场景平面与HUD上的平面相等.
import UIKit
import QuartzCore
import SceneKit
import SpriteKit
class GameViewController: UIViewController {
var hud:SKScene!
override func viewDidLoad() {
super.viewDidLoad()
// create a new scene
let scene = SCNScene()
// create and add a camera to the scene
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
scene.rootNode.addChildNode(cameraNode)
cameraNode.position = SCNVector3(x: 0, y: 0, z: 10)
// retrieve the SCNView
let scnView = self.view as SCNView
// set the scene to the view
scnView.scene = scene
let sCPlaneGeo = SCNPlane(width: 5, height: 5)
let sCPlane = SCNNode(geometry: sCPlaneGeo)
scene.rootNode.addChildNode(sCPlane)
hud = SKScene(size: view.bounds.size)
scnView.overlaySKScene = hud
let sKplane = SKShapeNode(rectOfSize: CGSizeMake(50, 50))
sKplane.lineWidth = 1
sKplane.position = CGPointMake(view.bounds.size.width/2, view.bounds.size.height/2)
sKplane.strokeColor = UIColor.redColor()
hud.addChild(sKplane)
println(cameraNode.camera?.xFov) //Prints Zero
}
}
Run Code Online (Sandbox Code Playgroud)
使用getBoundingBoxMin(_:max:)找到你的3D元素在SceneKit场面占据空间的角落.
使用projectPoint这些点从3D场景坐标到2D视图坐标转换.
使用convertPointFromView从转换(UIKit的)视图坐标您SpriteKit场景的坐标系.
从步骤3中的点开始,您可以构建一个矩形或其他形状,以避免HUD元素.
| 归档时间: |
|
| 查看次数: |
1791 次 |
| 最近记录: |