2017-08-30 13 views
0

私はすべてのコードを検索しましたが、なぜ私が取得しているエラーを受信して​​いるのか理解できません。私はまた、他のスレッドを見て、スプライトキットに新しいものを見つけることができませんでしたので、私は自分の質問を聞いて中継しました。 XCodeのは、それがスレッド1である私に言っている:シグナルSIGABRTを私の "クラスAppDelegate:UIResponder、UIApplicationDelegate" AppDelegateでERROR:Swift 3、iOS 10 - エラー:スレッド1シグナルSigabrt(SPRITEKIT)

2017-08-29 23:26:57.775 Flappy Land[10451:1252264] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attemped to add a SKNode which already has a parent: <SKSpriteNode> name:'(null)' texture:[<SKTexture> 'Wall' (100 x 1000)] position:{20, -600} scale:{1.00, 1.00} size:{100, 1000} anchor:{0.5, 0.5} rotation:0.00' 
*** First throw call stack: 
(
    0 CoreFoundation      0x000000010d2fcb0b __exceptionPreprocess + 171 
    1 libobjc.A.dylib      0x0000000109c3e141 objc_exception_throw + 48 
    2 CoreFoundation      0x000000010d365625 +[NSException raise:format:] + 197 
    3 SpriteKit       0x000000010a904c95 -[SKNode insertChild:atIndex:] + 162 
    4 SpriteKit       0x000000010a904bd2 -[SKNode addChild:] + 68 
    5 Flappy Land       0x000000010965bf02 _TFC11Flappy_Land9GameScene11createWallsfT_T_ + 2018 
    6 Flappy Land       0x000000010965ccd3 _TFFC11Flappy_Land9GameScene12touchesBeganFTGVs3SetCSo7UITouch_4withGSqCSo7UIEvent__T_U_FT_T_ + 35 
    7 Flappy Land       0x000000010965cdb7 _TTRXFo___XFdCb___ + 39 
    8 SpriteKit       0x000000010a8f2f1f -[SKRunBlock updateWithTarget:forTime:] + 99 
    9 SpriteKit       0x000000010a8c4ae5 _ZN11SKCSequence27cpp_updateWithTargetForTimeEP7SKCNoded + 99 
    10 SpriteKit       0x000000010a8b280b _ZN9SKCRepeat27cpp_updateWithTargetForTimeEP7SKCNoded + 45 
    11 SpriteKit       0x000000010a8baace _ZN7SKCNode6updateEdf + 250 
    12 SpriteKit       0x000000010a8d0d95 -[SKScene _update:] + 628 
    13 SpriteKit       0x000000010a8eeb8f -[SKView _update:] + 984 
    14 SpriteKit       0x000000010a8eb5ed __51-[SKView _vsyncRenderForTime:preRender:postRender:]_block_invoke.322 + 285 
    15 SpriteKit       0x000000010a8eaa16 -[SKView _vsyncRenderForTime:preRender:postRender:] + 580 
    16 SpriteKit       0x000000010a8ec1f9 __29-[SKView setUpRenderCallback]_block_invoke + 211 
    17 SpriteKit       0x000000010a922ae4 -[SKDisplayLink _callbackForNextFrame:] + 335 
    18 QuartzCore       0x0000000111128767 _ZN2CA7Display15DisplayLinkItem8dispatchEy + 51 
    19 QuartzCore       0x000000011112862d _ZN2CA7Display11DisplayLink14dispatch_itemsEyyy + 439 
    20 CoreFoundation      0x000000010d28fb61 __CFMachPortPerform + 161 
    21 CoreFoundation      0x000000010d28faa9 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41 
    22 CoreFoundation      0x000000010d28fa21 __CFRunLoopDoSource1 + 465 
    23 CoreFoundation      0x000000010d287ba0 __CFRunLoopRun + 2352 
    24 CoreFoundation      0x000000010d287016 CFRunLoopRunSpecific + 406 
    25 GraphicsServices     0x0000000111759a24 GSEventRunModal + 62 
    26 UIKit        0x000000010aaee0d4 UIApplicationMain + 159 
    27 Flappy Land       0x000000010965f0d7 main + 55 
    28 libdyld.dylib      0x000000010e29c65d start + 1 
    29 ???         0x0000000000000001 0x0 + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 

MY CODE:

import SpriteKit 
import GameplayKit 

struct PhysicsCategory { 

static let Ghost : UInt32 = 0x1 << 1 
static let Ground : UInt32 = 0x1 << 2 
static let Wall : UInt32 = 0x1 << 3 

} 

class GameScene: SKScene { 

//Variables - Global 
var Ground = SKSpriteNode() 
var Ghost = SKSpriteNode() 
var Wall = SKSpriteNode() 
let btmWall = SKSpriteNode(imageNamed: "Wall") 
var gameStarted = Bool() 


var moveAndRemove = SKAction() 

override func didMove(to view: SKView) { 

    //Ground Stuff 
    Ground = SKSpriteNode(imageNamed: "Ground") 
    Ground.setScale(1) 
    Ground.position = CGPoint(x: 0 , y: -640) 

    Ground.physicsBody = SKPhysicsBody(rectangleOf : Ground.size) 
    Ground.physicsBody?.categoryBitMask = PhysicsCategory.Ground 
    Ground.physicsBody?.collisionBitMask = PhysicsCategory.Ghost 
    Ground.physicsBody?.contactTestBitMask = PhysicsCategory.Ghost 
    Ground.physicsBody?.affectedByGravity = false 
    Ground.physicsBody?.isDynamic = false 

    self.addChild(Ground) 

    //Ghost Stuff 
    Ghost = SKSpriteNode(imageNamed: "Ghost") 
    Ghost.size = CGSize(width: 60, height: 70) 
    Ghost.position = CGPoint(x: -200, y: 0.0) 
    Ghost.setScale(2.0) 

    Ghost.physicsBody = SKPhysicsBody(circleOfRadius: Ghost.frame.height/2) 
    Ghost.physicsBody?.categoryBitMask = PhysicsCategory.Ghost 
    Ghost.physicsBody?.collisionBitMask = PhysicsCategory.Ground | PhysicsCategory.Wall 
    Ghost.physicsBody?.contactTestBitMask = PhysicsCategory.Ground | PhysicsCategory.Wall 
    Ghost.physicsBody?.affectedByGravity = true 
    Ghost.physicsBody?.isDynamic = true 


    self.addChild(Ghost) 


    createWalls() 

     } 

func createWalls() { 



    btmWall.setScale(1) 
    btmWall.position = CGPoint(x: 20, y: -600) 


    btmWall.physicsBody = SKPhysicsBody(rectangleOf: btmWall.size) 
    btmWall.physicsBody?.categoryBitMask = PhysicsCategory.Wall 
    btmWall.physicsBody?.collisionBitMask = PhysicsCategory.Ghost 
    btmWall.physicsBody?.contactTestBitMask = PhysicsCategory.Wall 
    btmWall.physicsBody?.isDynamic = false 
    btmWall.physicsBody?.affectedByGravity = false 

    btmWall.run(moveAndRemove) 

    addChild(btmWall) 

} 

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 

    if gameStarted == false { 

     gameStarted = true 

     let spawn = SKAction.run({ 
      () in 

      self.createWalls() 
     }) 

     let delay = SKAction.wait(forDuration: 2.0) 
     let spawnDelay = SKAction.sequence([spawn , delay]) 
     let spawnDelayForever = SKAction.repeatForever(spawnDelay) 

     self.run(spawnDelayForever) 

     let distance = CGFloat(self.frame.width + btmWall.frame.width) 
     let movePipes = SKAction.moveBy(x: -distance, y: 0, duration: TimeInterval(0.01 * distance)) 
     let removePipes = SKAction.removeFromParent() 
     moveAndRemove = SKAction.sequence([movePipes , removePipes]) 

     Ghost.physicsBody?.velocity = CGVector(dx: 0, dy: 0) 
     Ghost.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 500)) 


    } else { 


     Ghost.physicsBody?.velocity = CGVector(dx: 0, dy: 0) 
     Ghost.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 500)) 



    } 


} 

} 

何か助けが大変ありがとうございます。ありがとうございました!

+2

どこからXcode 10が見つかりましたか? – technerd

+1

アプリがクラッシュする実際の行を指定せずにアプリケーションがクラッシュしている理由を知りたがっている人に、良い話題はありません。 –

+0

彼はどこでクラッシュしたのかを示すスタックトレースを投稿しました。それは「なぜ私のアプリがクラッシュするのですか?」と投稿した人の99.99%の人よりも優れています。問題。 –

答えて

1

問題:createWalls()didMove(to:)に呼び出します。 にはcreateWalls()とも呼ばれます。最初にcreateWalls()と呼ぶと、シーンにノードが追加されます。 2回目にcreateWalls()と呼ぶと、同じノードをシーンに再度追加しようとします。すでにシーンに追加されているノードを追加しようとしているという例外が表示されます。

解決策:しないでください。 createWalls()は、一度だけ呼び出す必要がある設定方法であることを明確に示しているため、一度呼び出されていることを確認してください。

+0

Worked!チャールズありがとう。 –

関連する問題