2016-06-25 11 views
0

x方向に複数のノードを生成し、それをy方向に単位として生成しようとしています。私はx方向にノードを生成しました。私は、x方向に移動するノードを含む親ノードを作成し、y内の親ノードを移動しようとしました。 AppDelegateで「Thread 1:Signal SIGABRT」を取得し続けます。これは正しいアプローチですか?ここでスレッド1:シグナルSIGABRTスプライトキット

は、私がこれまで持っているものだ:ロングコード用

 func addCloud() { 
    var i = arc4random_uniform(2) 
    // RandomCloud 
    Cloud = SKSpriteNode(imageNamed: "Cloud\(i)") 

    // Position 
    Cloud.size = CGSize(width: self.size.width/3.5, height: self.size.height/12) 
    Cloud.position = CGPointMake(self.frame.size.width*0.1 , self.frame.size.height*0.65) 

    var radius = CGFloat(Cloud.size.width/2) 
    Cloud.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    Cloud.physicsBody?.categoryBitMask = PhysicsCategory.Cloud 
    Cloud.physicsBody?.collisionBitMask = PhysicsCategory.character 
    Cloud.physicsBody?.contactTestBitMask = PhysicsCategory.character 
    Cloud.physicsBody?.dynamic = false 
    Cloud.physicsBody?.affectedByGravity = false 
    Cloud.zPosition = 4 
    allCloud.addChild(Cloud) 
    Cloud.runAction(move) } 

    func add1(){ 
    var i = arc4random_uniform(2) 
    Cloud1 = SKSpriteNode(imageNamed: "Cloud\(i)") 
    Cloud1.position = CGPointMake(self.frame.size.width*0.5 , self.frame.size.height*0.65) 
    Cloud1.size = CGSize(width: self.size.width/3.5, height: self.size.height/12) 
    Cloud1.zPosition = 4 
    var radius = CGFloat(Cloud1.size.width/2) 
    Cloud1.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    Cloud1.physicsBody?.categoryBitMask = PhysicsCategory.Cloud 
    Cloud1.physicsBody?.collisionBitMask = PhysicsCategory.character 
    Cloud1.physicsBody?.contactTestBitMask = PhysicsCategory.character 
    Cloud1.physicsBody?.dynamic = false 
    Cloud1.physicsBody?.affectedByGravity = false 
    allCloud.addChild(Cloud1) 
    Cloud1.runAction(move1)} 
    func add2(){ 
    var i = arc4random_uniform(2) 
    Cloud2 = SKSpriteNode(imageNamed: "Cloud\(i)") 
    Cloud2.position = CGPointMake(self.frame.size.width*0.9 , self.frame.size.height*0.65) 
    Cloud2.size = CGSize(width: self.size.width/3.5, height: self.size.height/12) 
    Cloud2.zPosition = 4 
    var radius = CGFloat(Cloud2.size.width/2) 
    Cloud2.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    Cloud2.physicsBody?.categoryBitMask = PhysicsCategory.Cloud 
    Cloud2.physicsBody?.collisionBitMask = PhysicsCategory.character 
    Cloud2.physicsBody?.contactTestBitMask = PhysicsCategory.character 
    Cloud2.physicsBody?.dynamic = false 
    Cloud2.physicsBody?.affectedByGravity = false 
    allCloud.addChild(Cloud2) 
    Cloud2.runAction(move2) 


} 

func add3() { 
    var i = arc4random_uniform(2) 
    Cloud3 = SKSpriteNode(imageNamed: "Cloud\(i)") 
    Cloud3.position = CGPointMake(self.frame.size.width + Cloud3.size.width/2 , self.frame.size.height*0.65) 
    Cloud3.size = CGSize(width: self.size.width/3.5, height: self.size.height/12) 
    Cloud3.zPosition = 4 
    var radius = CGFloat(Cloud3.size.width/2) 
    Cloud3.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    Cloud3.physicsBody?.categoryBitMask = PhysicsCategory.Cloud 
    Cloud3.physicsBody?.collisionBitMask = PhysicsCategory.character 
    Cloud3.physicsBody?.contactTestBitMask = PhysicsCategory.character 
    Cloud3.physicsBody?.dynamic = false 
    Cloud3.physicsBody?.affectedByGravity = false 
    allCloud.addChild(Cloud3) 
    Cloud3.runAction(move3) 


} 
func add4() { 
    var i = arc4random_uniform(2) 
    Cloud4 = SKSpriteNode(imageNamed: "Cloud\(i)") 
    Cloud4.position = CGPointMake(self.frame.size.width + Cloud4.size.width/2 , self.frame.size.height*0.65) 
    Cloud4.size = CGSize(width: self.size.width/3.5, height: self.size.height/12) 
    Cloud4.zPosition = 4 
    var radius = CGFloat(Cloud4.size.width/2) 
    Cloud4.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    Cloud4.physicsBody?.categoryBitMask = PhysicsCategory.Cloud 
    Cloud4.physicsBody?.collisionBitMask = PhysicsCategory.character 
    Cloud4.physicsBody?.contactTestBitMask = PhysicsCategory.character 
    Cloud4.physicsBody?.dynamic = false 
    Cloud4.physicsBody?.affectedByGravity = false 
    allCloud.addChild(Cloud4) 

    Cloud4.runAction(move4) 


} 
func add5() { 
    var i = arc4random_uniform(2) 
    Cloud5 = SKSpriteNode(imageNamed: "Cloud\(i)") 
    Cloud5.position = CGPointMake(self.frame.size.width + Cloud5.size.width/2 , self.frame.size.height*0.65) 
    Cloud5.size = CGSize(width: self.size.width/3.5, height: self.size.height/12) 
    Cloud5.zPosition = 4 
    var radius = CGFloat(Cloud5.size.width/2) 
    Cloud5.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    Cloud5.physicsBody?.categoryBitMask = PhysicsCategory.Cloud 
    Cloud5.physicsBody?.collisionBitMask = PhysicsCategory.character 
    Cloud5.physicsBody?.contactTestBitMask = PhysicsCategory.character 
    Cloud5.physicsBody?.dynamic = false 
    Cloud5.physicsBody?.affectedByGravity = false 
    allCloud.addChild(Cloud5) 
    Cloud5.runAction(move5) 

} 

func add6() { 
    var i = arc4random_uniform(2) 
    Cloud6 = SKSpriteNode(imageNamed: "Cloud\(i)") 
    Cloud6.position = CGPointMake(self.frame.size.width + Cloud6.size.width/2 , self.frame.size.height*0.65) 
    Cloud6.size = CGSize(width: self.size.width/3.5, height: self.size.height/12) 
    Cloud6.zPosition = 4 
    var radius = CGFloat(Cloud6.size.width/2) 
    Cloud6.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    Cloud6.physicsBody?.categoryBitMask = PhysicsCategory.Cloud 
    Cloud6.physicsBody?.collisionBitMask = PhysicsCategory.character 
    Cloud6.physicsBody?.contactTestBitMask = PhysicsCategory.character 
    Cloud6.physicsBody?.dynamic = false 
    Cloud6.physicsBody?.affectedByGravity = false 
    Cloud6.runAction(move6) 
    allCloud.addChild(Cloud6) 
} 

func addall(){ 

self.addChild(allCloud) 
    allCloud.runAction(move7) 
} 
func spawnCloudX() { 


    var remove = SKAction.runBlock({self.allCloud.removeFromParent()}) 



    var distance = CGFloat(self.frame.size.width + Cloud.size.width/2) 
    var distance1 = CGFloat(self.frame.size.width + Cloud1.size.width/2) 
    var distance2 = CGFloat(self.frame.size.width + Cloud2.size.width/2) 
    var distance3 = CGFloat(self.frame.size.width + Cloud3.size.width/2) 
    var distance4 = CGFloat(self.frame.size.width + Cloud4.size.width/2) 
    var distance5 = CGFloat(self.frame.size.width + Cloud5.size.width/2) 
    var distance6 = CGFloat(self.frame.size.width + Cloud6.size.width/2) 



    var add:SKAction = SKAction.runBlock({ 
     () in 
     self.addCloud()}) 
    var add1:SKAction = SKAction.runBlock({ 
     () in 
     self.add1()}) 
    var add2:SKAction = SKAction.runBlock({ 
     () in 
     self.add2()}) 
    var add3:SKAction = SKAction.runBlock({ 
     () in 
     self.add3()}) 
    var add4:SKAction = SKAction.runBlock({ 
     () in 
     self.add4()}) 
    var add5:SKAction = SKAction.runBlock({ 
     () in 
     self.add5()}) 
    var add6:SKAction = SKAction.runBlock({ 
     () in 
     self.add6}) 

    var removea = SKAction.removeFromParent() 


    var movex = SKAction.moveToX(-distance, duration: 5) 
    var movex1 = SKAction.moveToX(-distance1, duration: 6.5) 
    var movex2 = SKAction.moveToX(-distance2, duration: 8) 
    var movex3 = SKAction.moveToX(-distance3, duration: 10) 
    var movex4 = SKAction.moveToX(-distance4, duration: 10) 
    var movex5 = SKAction.moveToX(-distance5, duration: 10) 
    var movex6 = SKAction.moveToX(-distance6, duration: 10) 



    var delay = SKAction.waitForDuration(2) 
    var spawn = SKAction.sequence([add3,delay,add4,delay,add5,delay,add6]) 
    self.runAction(add) 
    self.runAction(add1) 
    self.runAction(add2) 
    var spawnforever = SKAction.repeatActionForever(spawn) 
    self.runAction(spawnforever) 


    move = SKAction.sequence([movex,removea]) 
    move1 = SKAction.sequence([movex1,removea]) 
    move2 = SKAction.sequence([movex2,removea]) 
    move3 = SKAction.sequence([movex3,removea]) 
    move4 = SKAction.sequence([movex4,removea]) 
    move5 = SKAction.sequence([movex5,removea]) 
    move6 = SKAction.sequence([movex6,removea]) 

      var distance7 = CGFloat(self.frame.size.height + allCloud.size.height/2) 
    var movey7 = SKAction.moveToY(distance7, duration: 5) 

    var addall: SKAction = SKAction.runBlock({ 
     () in 
     self.addall() }) 
    var delayY = SKAction.waitForDuration(1) 
    var spawnY = SKAction.sequence([addall,delayY]) 
    var spawnYforever = SKAction.repeatAction(spawnY, count: 2) 
    move7 = SKAction.sequence([movey7,removea]) 

    self.runAction(spawnYforever) 


} 

は申し訳ありません。 ありがとう、

+0

私はあなたのコードを1時間見てきましたが、これが何であるかはまだ分かりません。あなたのコードフォームを200行以上70行に掃除しましたが、余りにも多くの冗長性が残っています。あなたが画面上で何をしたいかをプレーンな英語で説明してください。 –

+0

ご迷惑をおかけして申し訳ありません。私の目標は、x軸方向に一定の割合で移動する別々のノードを作成することです。その後、y軸のノードを一定の割合で移動させます。したがってx軸とy軸を別々に産み出します。私は雲が左に動いて上がっているように見たいと思う。私はこれが理にかなってほしい。ありがとう。 – Yraw

+0

このコードは、あなたが達成しようとしているもののために信じられないほど複雑なものですが、それは大きな過度のものです。 –

答えて

0

このコードを試してみてください。

spawnClouds() 

func createCloud() -> SKSpriteNode { 

    let i = arc4random_uniform(2) + 1 
    let randomPos = arc4random_uniform(200) 

    let cloud = SKSpriteNode(imageNamed: "cloud\(i)") 
    cloud.position = CGPointMake(self.size.width + cloud.size.width/2 - CGFloat(50 + randomPos) , self.size.height * 0.65 - CGFloat(50 + randomPos)) 
    cloud.zPosition = 4000 
    let radius = CGFloat(cloud.size.width/2) 
    cloud.physicsBody = SKPhysicsBody(circleOfRadius: radius) 
    cloud.physicsBody?.categoryBitMask = PhysicsCategory.Cloud 
    cloud.physicsBody?.collisionBitMask = PhysicsCategory.Hero 
    cloud.physicsBody?.contactTestBitMask = PhysicsCategory.Hero 
    cloud.physicsBody?.dynamic = false 
    cloud.physicsBody?.affectedByGravity = false 
    addChild(cloud) 

    return cloud 
} 

func spawnClouds() { 

    for _ in 0..<5 { 

     let addAndMoveCloud = SKAction.runBlock({ 
      let randomDuration = CGFloat(arc4random_uniform(2))/5 + 10 
      let cloud = self.createCloud() 
      cloud.runAction(SKAction.moveTo(CGPoint(x: -cloud.size.width, y: self.size.height + cloud.size.height), duration: NSTimeInterval(randomDuration)), completion: { cloud.removeFromParent() 
      }) 
     }) 

     let delay = SKAction.waitForDuration(2) 
     let spawnClouds = SKAction.sequence([addAndMoveCloud, delay]) 

     runAction(SKAction.repeatActionForever(spawnClouds)) 
    } 
} 
+0

ここでの問題は、雲が個別に上に移動することです。私は親ノードを作ったので、子ノードは一緒に動くことができます。 – Yraw

+0

Btw私のコードは、繰り返しアクション(Count = 1)を1回呼び出すと完全に機能します。 – Yraw

+0

画面を横切っていくつかの雲を動かすために200行以上のコードが「完全に」主観的です。私は雲のグループを作るためにコードを変更しました –

関連する問題