2015-08-13 24 views
5

使用下面顯示的代碼我的場景中有一個球體,它具有藍色背景...我是iOS的sceneKit新手,我想知道如何移動該對象(拖動球體)到另一個位置(Drop)。Scenekit - 如何拖放

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) 

} 

回答

1

明白了,我在幾個月前嘗試過使用objective-c的sceneKit,可能會幫助你推廣解決方案。對於使用UIPanGestureRecognizer的節點的拖放。然後,在 「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]; 
    } 
} 

的平移(移動)

//姿勢識別

UIGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)]; 
[[self view] addGestureRecognizer:panGestureRecognizer]; 

//如需更多幫助,您可以檢查這個不錯的教程http://www.raywenderlich.com/44270/sprite-kit-tutorial-how-to-drag-and-drop-sprites

+0

海..感謝代碼..但它不能正常工作...球體是SCNNode,我不能給SKAction。(我導入了SpriteKit並嘗試SKAction),並且還有位置問題:就像im在SCNVector中獲取位置3 ..轉換爲CGPoint失敗.. – Mee

+0

Mee ..提供代碼爲spriteKit而不是sceneKit。我應該注意這一點。 – Jaideep

+0

你可以更新scenekit的代碼嗎? – madLokesh