2016-03-30 10 views
0

スプライトキットを使用して最初のSwiftアプリケーションを作成しようとしています。 アプリは、ランダムに画面を移動する必要があるオブジェクトを5つまで作成する必要があります。速度は増加し、サイズは5秒ごとに減少します。 シーン設定が正しく、オブジェクトが表示され、移動しますが、しばらくしてからCPU使用率が100%になると、FPSが0になりアプリケーションがハングアップします。時にはそれは数秒間働くことがありますが、しばしばそれはしません。 理由は何ですか?スプライトキットアプリケーションがハングアップ

私はXcodeでうなずきます。シミュレーション中に現在どのブロックのコードが動作しているか確認できますか?

ここに更新機能があります。私はdidMoveToViewtouchesBegan部分を含んでいなかったため、問題に影響していないようです。

override func update(currentTime: CFTimeInterval) { 
    if (currentTime-oldTime)>1 { 
     if arrayofAims.isEmpty==false { 
      for currentAim in arrayofAims { 
       repeat {xvelocity=(Int(arc4random())%3 - 1) * aimSpeedX} while xvelocity == 0 
       repeat {yvelocity=(Int(arc4random())%3 - 1) * aimSpeedX} while yvelocity == 0 
       currentAim.physicsBody?.applyForce(CGVectorMake (CGFloat(xvelocity), CGFloat(yvelocity))) 
       } 
      } 
     oldTime=currentTime 
     timecount+=1 
    } 
    if timecount>5 { 
     if aimSpeedX < 5000 { 
      aimSpeedX+=200 
     } 
     if aimSizeRatioX > 0.3 { 
      aimSizeRatioX -= 0.05 
      aimSizeRatioY -= 0.05 
     } 
     timecount=0 
     if arrayofAims.count<6 { arrayofAims.append(createAnAim()) 
      currentAim=arrayofAims[arrayofAims.count-1] 
      addChild(currentAim) 
     } 
    } 
} 
+0

と相互作用しない[そう]へようこそ! [ask]セクションをお読みください。ところで、誰もまだ答えていないので、あなたは誰ですか? –

+0

デバッグの最も基本的な方法として、コードの一部を削除して問題を切り分けてください。だから、 'addChild(currentAim)'行を削除して、問題がまだ起こっているかどうかを確認します。更新メソッドが原因であると完全に確信していますか?描画数( 'skView.showsDrawsCount')とノード数(' skView.showsNodesCount')を示すデバッグラベルを有効にします。アプリが立ち往生したときに何番に表示されますか? – Whirlwind

+0

問題を再現できる最小限の例で質問を更新してください(またはgithubリポジトリをアップロードすることもできます)。 – Whirlwind

答えて

-1

いくつかのスプライトキットの衝突モデルのバグがありますか?

aim.physicsBody = SKPhysicsBody(texture: aim.texture!, size: aim.size) 
aim.physicsBody?.categoryBitMask = aimCategory 
aim.physicsBody?.collisionBitMask = aimCategory | boundCategory 

を持っていたAは、私が

aim.physicsBody?.collisionBitMask = boundCategory 

とそれを交換し、消失したフリーズが、オブジェクトがお互いの

+0

に相互作用し、それはありません boundCategory Sprite Kitのバグだと推測するのは決して良い考えではありませんが、APIの障害であることを証明できるまで、バグは常にあなたの側にあると仮定してください。 – Knight0fDragon

+0

@ Knight0fDragonあなたは正しいですが、オブジェクトの衝突時にランダムに現れ、衝突チェックが取り除かれたときに消えてしまったためです。カテゴリ宣言はlet letCategory:UInt32 = 0x1 << 0 let boundCategory:UInt32 = 0x1 << 1 – DimitryTheBlack

+0

@DimitryTheBlackこの問題を再現できる最小限の例でリポジトリをアップロードすると、より多くのことがわかります。私はこれがSpriteKitのバグだとは思っていません。あなたのコードに何か間違っているとは言いますが(しかし決して分かりません)。 – Whirlwind

関連する問題