[英]Scenekit - how can i drag and drop
使用下面顯示的代碼我可以在我的場景中有一個球體。帶有藍色背景......我是iOS中的sceneKit的新手。我想知道我們如何移動該對象(將球體拖動到另一個位置)(Drop) 。
override func viewDidLoad() {
super.viewDidLoad()
sceneView = SCNView(frame: self.view.frame)
sceneView.scene = SCNScene()
self.view.addSubview(sceneView)
let groundGeometry = SCNFloor()
groundGeometry.reflectivity = 0
let groundMaterial = SCNMaterial()
groundMaterial.diffuse.contents = UIColor.blueColor()
groundGeometry.materials = [groundMaterial]
ground = SCNNode(geometry: groundGeometry)
let camera = SCNCamera()
camera.zFar = 10000
self.camera = SCNNode()
self.camera.camera = camera
self.camera.position = SCNVector3(x: -20, y: 15, z: 20)
let constraint = SCNLookAtConstraint(target: ground)
constraint.gimbalLockEnabled = true
self.camera.constraints = [constraint]
let ambientLight = SCNLight()
ambientLight.color = UIColor.darkGrayColor()
ambientLight.type = SCNLightTypeAmbient
self.camera.light = ambientLight
let spotLight = SCNLight()
spotLight.type = SCNLightTypeSpot
spotLight.castsShadow = true
spotLight.spotInnerAngle = 70.0
spotLight.spotOuterAngle = 90.0
spotLight.zFar = 500
light = SCNNode()
light.light = spotLight
light.position = SCNVector3(x: 0, y: 25, z: 25)
light.constraints = [constraint]
let sphereGeometry = SCNSphere(radius: 1.5)
let sphereMaterial = SCNMaterial()
sphereMaterial.diffuse.contents = UIColor.greenColor()
sphereGeometry.materials = [sphereMaterial]
sphere1 = SCNNode(geometry: sphereGeometry)
sphere1.position = SCNVector3(x: -15, y: 1.5, z: 0)
sceneView.scene?.rootNode.addChildNode(self.camera)
sceneView.scene?.rootNode.addChildNode(ground)
sceneView.scene?.rootNode.addChildNode(light)
sceneView.scene?.rootNode.addChildNode(sphere1)
}
嗯,幾個月前我用objective-c嘗試過sceneKit可能會幫助你推廣解決方案。 對於節點的拖放,我使用了UIPanGestureRecognizer。
//用於平移(移動)的手勢識別器
UIGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];
[[self view] addGestureRecognizer:panGestureRecognizer];
//然后在“handlePanFrom”中
- (void)handlePanFrom:(UIPanGestureRecognizer *)recognizer {
if (recognizer.state == UIGestureRecognizerStateChanged)
{
//Getting the new location of the view after pan gesture
CGPoint translation = [recognizer translationInView:recognizer.view];
//Converting this translation as per the SpriteKit coordinates
translation = CGPointMake(translation.x, -translation.y);
//Changing the position of sphere node with the translation
CGPoint position = [sphere position];
[sphere setPosition:CGPointMake(position.x + translation.x, position.y + translation.y)];
//Resetting the values of recognizer
[recognizer setTranslation:CGPointZero inView:recognizer.view];
}
else if (recognizer.state == UIGestureRecognizerStateEnded)
{
float scrollDuration = 1;
CGPoint velocity = [recognizer velocityInView:recognizer.view];
//Taking current position of sphere node
CGPoint pos = [sphere position];
//Finding change in position on the basis of velocity and scroll duration
CGPoint p = mult(velocity, scrollDuration);
//Calculating new position of the sphere
CGPoint newPos = CGPointMake(pos.x + p.x, pos.y - p.y);
[sphere removeAllActions];
//Action for moving the sprite to the new location
SKAction *moveTo = [SKAction moveTo:newPos duration:scrollDuration];
[moveTo setTimingMode:SKActionTimingEaseOut];
[sphere runAction:moveTo];
}
}
如需更多幫助,請查看這本精彩的教程http://www.raywenderlich.com/44270/sprite-kit-tutorial-how-to-drag-and-drop-sprites
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.