Я только начинаю экспериментировать с SceneKit. Пытаясь создать очень простой код для создания объекта, назначьте ему физику, дайте ему скорость с помощью крана. Пока я смог создать его, применить физику. Я смог дать ему скорость, но не смог добиться этого с помощью крана. Что я делаю не так? Я использую ту же технику, что и в SpriteKit, но она не работает в SceneKit. Пожалуйста помоги.Основы SceneKit
class GameViewController: UIViewController, SCNSceneRendererDelegate, SCNPhysicsContactDelegate {
let scene = SCNScene()
let shipNode = SCNNode()
let sceneView = SCNScene()
var cameraNode = SCNNode()
var floor = SCNFloor()
var floornod = SCNNode()
override func viewDidLoad() {
super.viewDidLoad()
let sceneView = self.view as SCNView
sceneView.scene = scene
sceneView.backgroundColor = SKColor.blueColor()
sceneView.showsStatistics = true
sceneView.scene?.physicsWorld.gravity = SCNVector3Make(0, -70, 0)
sceneView.scene?.physicsWorld.speed = 1.0
sceneView.delegate = self
sceneView.jitteringEnabled = true
sceneSetup()
sceneView.pointOfView = cameraNode
let ship = SCNScene(named: "art.scnassets/sphere.dae")!
let shipNode = ship.rootNode.childNodeWithName("Sphere", recursively: true)!
shipNode.position = SCNVector3Make(0, 50, 300)
shipNode.scale = SCNVector3Make(10, 10, 10)
shipNode.geometry?.firstMaterial?.diffuse.contents = UIImage(named: "ball.jpg")
shipNode.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Dynamic, shape: nil)
shipNode.physicsBody?.restitution = 0.9
shipNode.physicsBody?.velocity = SCNVector3Make(0, 100, 10)
scene.rootNode.addChildNode(shipNode)
println(shipNode.physicsBody?.velocity.y)
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
shipNode.physicsBody?.velocity = SCNVector3Make(0, 200, 20) // code not working
println(shipNode.physicsBody?.velocity.y) // prints nil instead of 200.00
}
func sceneSetup() {
cameraNode.camera = SCNCamera()
cameraNode.camera?.zNear = 0.01
cameraNode.camera?.zFar = 800
cameraNode.camera?.xFov = 45
cameraNode.camera?.yFov = 75
cameraNode.rotation = SCNVector4Make(1, 0, 0, -25 * 0.017453293)
cameraNode.position = SCNVector3Make(0, 150, 500)
scene.rootNode.addChildNode(cameraNode)
floornod.geometry = floor
floornod.geometry?.firstMaterial?.diffuse.contents = "wood1.png"
floornod.geometry?.firstMaterial?.locksAmbientWithDiffuse = true
floornod.geometry?.firstMaterial?.diffuse.wrapS = SCNWrapMode.Repeat
floornod.geometry?.firstMaterial?.diffuse.wrapT = SCNWrapMode.Repeat
floornod.geometry?.firstMaterial?.diffuse.mipFilter = SCNFilterMode.Linear
floornod.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.Static, shape: nil)
floornod.position = SCNVector3Make(0, 0, 0)
scene.rootNode.addChildNode(floornod)
}
}
Первый println дает результат 100.00. Печать в touchhesBegan дает результат nil каждый раз, когда я нажимаю.
Любая помощь очень ценится. Благодарю.
Ничего себе. Не могу поверить, что я пропустил это. Благодарю. Это сработало! – Dman