2016-04-15 52 views
0

我一直在開發一個遊戲,其中彩色點(SpriteKitShapeNodes)從屏幕頂部落到底部。之前,我使用SpriteKit萬能引力來降低點,但是我已經決定要改善下降的方面,並決定使用衝動。出於某種奇怪的原因,這些點並沒有收到衝動或別的東西。點根本不動。興趣點位於「更改[顏色]」功能。應用衝動不能正常工作

var Green = SKShapeNode() 
var Red = SKShapeNode() 
var Yellow = SKShapeNode() 
var Purple = SKShapeNode() 
var Blue = SKShapeNode() 
var Green2 = SKShapeNode() 
var Red2 = SKShapeNode() 
var Yellow2 = SKShapeNode() 
var Purple2 = SKShapeNode() 
var Blue2 = SKShapeNode() 
//var sparkEmitter = SKEmitterNode(fileNamed: "Animations/Spark") 
let userDefaults = NSUserDefaults.standardUserDefaults() 
var ScoreLabel:SKLabelNode! 
var HighScoreLabel:SKLabelNode! 
var RestartLabel:SKLabelNode! 
var BackButton:SKSpriteNode! 
var π = M_PI 
var clickPlayer: AVAudioPlayer = AVAudioPlayer() 
var hitPlayer: AVAudioPlayer = AVAudioPlayer() 
var jumpPlayer: AVAudioPlayer = AVAudioPlayer() 
var musicPlayer: AVAudioPlayer = AVAudioPlayer() 
var pointPlayer: AVAudioPlayer = AVAudioPlayer() 
var pop2Player: AVAudioPlayer = AVAudioPlayer() 

var Background = SKSpriteNode() 
var startTimer = NSTimer() 


var CustomWidth: UInt32 = UInt32() 

override func didMoveToView(view: SKView) { 
    /* Setup your scene here */ 



    //Add this back in if you want the color needed to change every minute 
    //var timer = NSTimer.scheduledTimerWithTimeInterval(60, target: self, selector: "update", userInfo: nil, repeats: true) 

    CustomWidth = UInt32(frame.size.width - 300) 
    print("Normal Width Is: \(frame.size.width)") 
    print("Other Width Is: \(UIScreen.mainScreen().bounds.size.width)") 
    print("Middle is: \(self.size.width/2)") 

    self.size.width = UIScreen.mainScreen().bounds.size.width 
    self.size.height = UIScreen.mainScreen().bounds.size.height 
    print("Width is now: \(self.size.width)") 


    Background = SKSpriteNode(imageNamed: "images/edit/background") 
    Background.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2) 
    Background.zPosition = -1.0 

    self.addChild(Background) 

    //Physics 
    //self.physicsWorld.gravity = CGVector(dx: 0.0, dy: -0.2) 
    //self.physicsWorld.contactDelegate = self 
    print(physicsWorld.speed) 

    setupCircles() 
    spawnCircles() 

    changeColorNeeded() 


func restartGame() { 

    //self.physicsWorld.speed = 1.0 
    spawnCircles() 
    changeColorNeeded() 
    removeRestartLabel() 
    addBackScoreLabels() 
    //self.physicsWorld.gravity = CGVector(dx: 0.0, dy: -0.2) 
} 

func setupCircles() { 

    Green = SKShapeNode(circleOfRadius: radius) // Size of Circle 
    Green.position.y = frame.size.height 
    Green.strokeColor = SKColor.clearColor() 
    Green.glowWidth = 1.0 
    Green.fillColor = SKColor.greenColor() 
    Green.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    Green.physicsBody?.categoryBitMask = Physics.Enemy 
    Green.physicsBody?.contactTestBitMask = Physics.Bar 
    Green.physicsBody?.collisionBitMask = Physics.Bar 
    Green.physicsBody?.dynamic = true 
    Green.name = "Enemy" 

    Red = SKShapeNode(circleOfRadius: radius) // Size of Circle 
    Red.position.y = frame.size.height 
    Red.strokeColor = SKColor.clearColor() 
    Red.glowWidth = 1.0 
    Red.fillColor = SKColor.redColor() 
    Red.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    Red.physicsBody?.categoryBitMask = Physics.Enemy 
    Red.physicsBody?.contactTestBitMask = Physics.Bar 
    Red.physicsBody?.collisionBitMask = Physics.Bar 
    Red.physicsBody?.dynamic = true 
    Red.name = "Enemy" 

    Blue = SKShapeNode(circleOfRadius: radius) // Size of Circle 
    Blue.position.y = frame.size.height 
    Blue.strokeColor = SKColor.clearColor() 
    Blue.glowWidth = 1.0 
    Blue.fillColor = SKColor.blueColor() 
    Blue.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    Blue.physicsBody?.categoryBitMask = Physics.Enemy 
    Blue.physicsBody?.contactTestBitMask = Physics.Bar 
    Blue.physicsBody?.collisionBitMask = Physics.Bar 
    Blue.physicsBody?.dynamic = true 
    Blue.name = "Enemy" 

    Yellow = SKShapeNode(circleOfRadius: radius) // Size of Circle 
    Yellow.position.y = frame.size.height 
    Yellow.strokeColor = SKColor.clearColor() 
    Yellow.glowWidth = 1.0 
    Yellow.fillColor = SKColor.yellowColor() 
    Yellow.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    Yellow.physicsBody?.categoryBitMask = Physics.Enemy 
    Yellow.physicsBody?.contactTestBitMask = Physics.Bar 
    Yellow.physicsBody?.collisionBitMask = Physics.Bar 
    Yellow.physicsBody?.dynamic = true 
    Yellow.name = "Enemy" 

    Purple = SKShapeNode(circleOfRadius: radius) // Size of Circle 
    Purple.position.y = frame.size.height 
    Purple.strokeColor = SKColor.clearColor() 
    Purple.glowWidth = 1.0 
    Purple.fillColor = SKColor.purpleColor() 
    Purple.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    Purple.physicsBody?.categoryBitMask = Physics.Enemy 
    Purple.physicsBody?.contactTestBitMask = Physics.Bar 
    Purple.physicsBody?.collisionBitMask = Physics.Bar 
    Purple.physicsBody?.dynamic = true 
    Purple.name = "Enemy" 

    self.addChild(Green) 
    self.addChild(Red) 
    self.addChild(Blue) 
    self.addChild(Yellow) 
    self.addChild(Purple) 
} 



func changeGreen(){ 

    if IsPaused == false{ 

    Green.position.y = frame.size.height + CGFloat(arc4random_uniform(100) + 1) 

    var PositionX: CGFloat = CGFloat(UInt32(radius) + arc4random_uniform(UInt32(self.frame.width - 2.0 * radius))) 


    Green.position.x = CGFloat(PositionX) 

     while Green.containsPoint(Red.position) || Green.containsPoint(Blue.position) || Green.containsPoint(Yellow.position) || Green.containsPoint(Purple.position) { 
      print("Overlap Detected") 
      changeGreen() 

     } 
     let randomX: CGFloat = CGFloat(drand48()) 
     print("RandomX For Impulse = \(randomX)") 
     self.Green.physicsBody?.applyImpulse(CGVectorMake(0, 0.1)) 
    } 

} 

func changeRed(){ 

    if IsPaused == false{ 

    Red.position.y = frame.size.height + CGFloat(arc4random_uniform(100) + 1) 

    var PositionX: CGFloat = CGFloat(UInt32(radius) + arc4random_uniform(UInt32(self.frame.width - 2.0 * radius))) 


    Red.position.x = CGFloat(PositionX) 

     while Red.containsPoint(Blue.position) || Red.containsPoint(Yellow.position) || Red.containsPoint(Green.position) || Red.containsPoint(Purple.position) { 
      print("Overlap Detected") 
      changeRed() 

     } 
     let randomX: CGFloat = CGFloat(drand48()) 
     print("RandomX For Impulse = \(randomX)") 
     self.Red.physicsBody?.applyImpulse(CGVectorMake(0, 0.1)) 
    } 
} 

func changeBlue() { 

    if IsPaused == false{ 

    Blue.position.y = frame.size.height + CGFloat(arc4random_uniform(100) + 1) 

    var PositionX: CGFloat = CGFloat(UInt32(radius) + arc4random_uniform(UInt32(self.frame.width - 2.0 * radius))) 

    Blue.position.x = CGFloat(PositionX) 

     while Blue.containsPoint(Red.position) || Blue.containsPoint(Yellow.position) || Blue.containsPoint(Green.position) || Blue.containsPoint(Purple.position) { 
      print("Overlap Detected") 
      changeBlue() 

     } 
     let randomX: CGFloat = CGFloat(drand48()) 
     print("RandomX For Impulse = \(randomX)") 
     print("Applying Impulse") 
     self.Blue.physicsBody?.applyImpulse(CGVectorMake(0, 0.1)) 
    } 
} 

func changeYellow() { 

    if IsPaused == false{ 

    Yellow.position.y = frame.size.height + CGFloat(arc4random_uniform(100) + 1) 

    var PositionX: CGFloat = CGFloat(UInt32(radius) + arc4random_uniform(UInt32(self.frame.width - 2.0 * radius))) 


    Yellow.position.x = CGFloat(PositionX) 

     while Yellow.containsPoint(Red.position) || Yellow.containsPoint(Blue.position) || Yellow.containsPoint(Green.position) || Yellow.containsPoint(Purple.position) { 
      print("Overlap Detected") 
      changeYellow() 

     } 
     let randomX: CGFloat = CGFloat(drand48()) 
     print("RandomX For Impulse = \(randomX)") 
     self.Yellow.physicsBody?.applyImpulse(CGVectorMake(0, 0.1)) 
    } 
} 

func changePurple() { 

    if IsPaused == false{ 

    Purple.position.y = frame.size.height + CGFloat(arc4random_uniform(100) + 1) 

    var PositionX: CGFloat = CGFloat(UInt32(radius) + arc4random_uniform(UInt32(self.frame.width - 2.0 * radius))) 


    Purple.position.x = CGFloat(PositionX) 

     while Purple.containsPoint(Red.position) || Purple.containsPoint(Blue.position) || Purple.containsPoint(Yellow.position) || Purple.containsPoint(Green.position) { 
      print("Overlap Detected") 
      changePurple() 

     } 
     let randomX: CGFloat = CGFloat(drand48()) 
     print("RandomX For Impulse = \(randomX)") 
     self.Purple.physicsBody?.applyImpulse(CGVectorMake(0, 0.1)) 
    } 
} 

func spawnCircles() { 

    changeRed() 
    changeBlue() 
    changeGreen() 
    changeYellow() 
    changePurple() 
} 

func randomYPos() -> Double{ 

    var rand = Double(arc4random_uniform(UInt32(0.10) + UInt32(0.8))) 

    return rand 
} 

func changeColorNeeded() -> SKColor { 

    colorNeeded = randomColor() 
    return self.colorNeeded 

} 


func randomColor() -> SKColor{ 
    var colors: [SKColor] = [SKColor.yellowColor(),  SKColor.blueColor(), SKColor.greenColor(), SKColor.redColor(), SKColor.purpleColor()] 

    var rand = Int(arc4random_uniform(4) + 0) 

    return colors[rand] 
} 
+0

你一定要遵循命名約定,特別是在StackOverflow(因爲高亮顯示錯誤),像@ crashoverride777指出他的答案(和耶,0.1可能對你的身體沒有影響)。 – Whirlwind

回答

2

我看不出任何明顯錯誤的代碼。 你是否嘗試增加衝動的價值? 0.1似乎相當低。另外如果你想讓它們向下移動,你需要使它成爲負值。

如果您遵循快速編程指南,這也是一個好主意。你的屬性不應該以大寫字母開頭,只能是類,協議和結構。這使得你的代碼也難以閱讀,因爲它被標記爲藍色,但不應該。

+0

我曾嘗試增加值。感謝您的建議。 – jacobsan420

+0

這很奇怪。你有沒有嘗試幾個100? – crashoverride777