上からボールをシャワーのようにふらせるiPhoneアプリのサンプルコードを描いてみます。
import UIKit
import SceneKit
class ViewController: UIViewController, SCNSceneRendererDelegate {
var scene : SCNScene = SCNScene()
var sceneView : SCNView?
override func viewDidLoad() {
super.viewDidLoad()
sceneView = SCNView(frame: self.view.bounds)
sceneView?.delegate = self
sceneView?.scene = scene
sceneView?.backgroundColor = UIColor.orangeColor()
self.view.addSubview(sceneView!)
self.createBall()
var base = SCNBox(width: 20, height: 5, length: 20, chamferRadius: 0)
var baseNode = SCNNode(geometry: base)
baseNode.position = SCNVector3(x: 0, y: 20, z: 0)
baseNode.physicsBody = SCNPhysicsBody.staticBody()
scene.rootNode.addChildNode(baseNode)
var camera = SCNCamera()
camera.xFov = 40
camera.yFov = 40
var cameraNode = SCNNode();
cameraNode.camera = camera;
cameraNode.position = SCNVector3Make(0, 20, 100);
scene.rootNode.addChildNode(cameraNode);
scene.physicsWorld.speed = 5.0
}
var count : Int = 0
func renderer(aRenderer: SCNSceneRenderer, updateAtTime time: NSTimeInterval) {
++count
if count > 5 {
count = 0
self.createBall()
}
for n in scene.rootNode.childNodes as [SCNNode] {
let h = Float(CGRectGetMidY(self.view.frame))
if n.name == “ball” && n.presentationNode().position.y < -h {
n.removeFromParentNode()
}
}
}
var ballX : Float = 0.0
func createBall() {
var ball = SCNNode();
ball.name = “ball”
var sphere = SCNSphere(radius: 4)
var z = Float(arc4random() % 15) * 4.0
ball.position = SCNVector3(x: ballX – 15.0, y: 40, z: z)
ball.geometry = sphere;
ball.geometry?.firstMaterial?.diffuse.wrapS = .Repeat
ball.geometry?.firstMaterial?.diffuse.contents = “ballimage.jpg”;
ball.geometry?.firstMaterial?.fresnelExponent = 1.0
ball.physicsBody = SCNPhysicsBody.dynamicBody()
scene.rootNode.addChildNode(ball)
ballX = ((ballX + 17.0) % 30.0)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}