2017-12-22 29 views
1

私はゲームの始めに現れる2つの四角形を持っていますが、一度開始すると重力が落ちます。下のコードは別の "Floor.swift"クラスにあります。私はまた、以下の情報を持つ "BitMaskCategories.swift"ファイルを持っています。重力をSKNodeフロアクラスから削除

let ballCategory : UInt32 = 0x1 << 1 
let avoidCategory : UInt32 = 0x1 << 2 
let floorCategory : UInt32 = 0x1 << 3 
let pointCategory : UInt32 = 0x1 << 4 
let lifeCategory : UInt32 = 0x1 << 5 

そして、ここに私の「Floor.swift」クラスは

ある
import Foundation 
import SpriteKit 

class Floor: SKNode { 
    override init() { 
     super.init() 

     let leftWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 50, height: 300)) 
     leftWall.position = CGPoint(x: 0, y: 100) 
     leftWall.physicsBody!.isDynamic = false 
     leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size) 
     self.addChild(leftWall) 

     let rightWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 50, height: 300)) 
     rightWall.position = CGPoint(x: 100, y: 200) 
     rightWall.physicsBody!.isDynamic = false 
     rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size) 
     self.addChild(rightWall) 

     // self.physicsBody?.affectedByGravity = false 
     // self.physicsBody?.isDynamic = false 

     // Set the bit mask properties 
     self.physicsBody?.categoryBitMask = balloonCategory 
     self.physicsBody?.contactTestBitMask = nailDropCategory | pointCategory | lifeCategory 
     //self.physicsBody?.collisionBitMask = balloonCategory 
    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemted") 
    } 
} 

私はエラーを取得するか、なぜ「スレッド1:致命的なエラー:予期せずオプションの値をアンラップしながら、nilを見つけ」が、ときに私使う "?"の代わりに "!"アプリは動作しますが、四角形は崩れます。私は彼らがそれをしないようにするためにその行が必要であり、私はこれがどういう意味があるかを知ることさえできません。

答えて

3

あなたが代入しようとしている:.isDynamic = false をオブジェクトの初期化の前に、

をあなたがleftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size)

と同じ後leftWall.physicsBody!.isDynamic = false

を移動する必要があります。

それを移動、rightWall.physicsBody!.isDynamic = falseの後、の後:rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size)

ので、あなたのコードは次のようになります。

let leftWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 50, height: 300)) 
leftWall.position = CGPoint(x: 0, y: 100) 
leftWall.physicsBody = SKPhysicsBody(rectangleOf: leftWall.size) 
leftWall.physicsBody!.isDynamic = false 
self.addChild(leftWall) 

let rightWall = SKSpriteNode(color: UIColor.brown, size: CGSize(width: 50, height: 300)) 
rightWall.position = CGPoint(x: 100, y: 200) 
rightWall.physicsBody = SKPhysicsBody(rectangleOf: rightWall.size) 
rightWall.physicsBody!.isDynamic = false 
self.addChild(rightWall) 
+0

私はあなたがそんなにひどく神経質に感謝! – Dewan

+0

うれしいことがありましたらうれしいです。うん! :) –

+0

もう一つの問題につながったことは、ソリューションをかなり速く知っているような気がします。チャンスがあれば新しい投稿をチェックしてくださいhttps://stackoverflow.com/questions/47946410/skysysicscontact-not-detecting-categorybitmask-collision – Dewan

関連する問題