2016-08-09 7 views
0

このコードは、ボールを画面の上部から下部に落とすことになっています。画面の一番下にタッチすると、画面の一番上に表示されます。それはトップに移動せず、移動を停止します。私はそれが底に触れるたびにball.yの位置をリセットする連続的なループにしたい。ボールドロップアニメーションが機能しない(スウィフト)

import SpriteKit 

class GameScene: SKScene { 
    let ball = SKShapeNode(circleOfRadius: 20) 
    let label = SKLabelNode(fontNamed: "Futura") 
    let movingObjects = SKSpriteNode() 

    override func didMoveToView(view: SKView) { 
     let sceneBody = SKPhysicsBody(edgeLoopFromRect: self.frame) 
     self.physicsBody = sceneBody 

     //Ball Transition 
     let ballTransition = SKAction.sequence([SKAction.fadeInWithDuration(1)]) 
     ball.runAction(ballTransition) 

     //Ball function 
     ball.fillColor = SKColor.redColor() 

     ball.physicsBody = SKPhysicsBody(circleOfRadius: 25) 
     ball.physicsBody?.affectedByGravity = false 

     //Ball Movement 
     ball.position = CGPoint(x: self.frame.size.width/2, y: CGFloat(self.frame.size.height*1)) 

     ballMovement() 

     movingObjects.addChild(ball) 

     self.addChild(label) 
    } 

    func ballMovement() { 
     let moveBall = SKAction.moveToY(self.frame.size.height*0, duration: 3) 
     let removeBall = SKAction.removeFromParent() 
     let moveAndRemove = SKAction.sequence([moveBall, removeBall]) 
     ball.runAction(moveAndRemove) 

     //Label Sprite 
     label.position = CGPoint(x: CGRectGetMidX(self.frame), y: CGRectGetMidY(self.frame)) 
     label.fontColor = SKColor.redColor() 
     label.fontSize = 30 
    } 

    override func update(currentTime: CFTimeInterval) { 
     /* Called before each frame is rendered */ 
     label.text = "\(ball.position.y)" 

     if ball.position.y < 26 { 
      ball.position = CGPoint(x: self.frame.size.width/2, y: CGFloat(self.frame.size.height*1)) 
     } 
    } 
} 
+0

どの部分が機能していませんか?脱落や移転? – TheValyreanGroup

+0

それはちょうどクラッシュしません、前にうまくいきました。 @TheValyreanGroup – user6686513

+2

何の前に?クラッシュエラーとは何ですか? – TheValyreanGroup

答えて

1

アクション内親からボールを​​削除し、まだあなたのプログラムが複雑になるにつれて非常に脆くなるために起こっている他の場所でそれに作用します。どうしてそんなことばかりして、スプライトキットに心配しないの?

let moveBall = SKAction.moveToY(0, duration: 3) 
let goBackUp = SKAction.moveToY(self.frame.size.height, duration:0) 
let keepFalling = SKAction.sequence([moveBall, goBackUp]) 
ball.runAction(SKAction.repeatActionForever(keepFalling)) 
関連する問題