2016-08-02 5 views
0

スケーリング後にSKReferenceNodeが正しく衝突しないという奇妙な問題があります。それは中央でよく衝突しますが、衝突やエッジの接触は無視されます。SKReferenceNodeスケールの後にスウィフトコリジョンが機能しない

Here is the first photo of the scene。 SKReferenceNodeは大幅に拡大され、this写真のように、エッジで正しく衝突しません。 PhysicsBodyは(showPhysics onで)正しいと思われますが、ボールは衝突しません。

SKReferenceNodeは、将来アニメーションなどを行うために、より大きなスプライトに変更する必要があるため、アルファ衝突マスクを使用しています。さらに、スケーリングされていないオブジェクトは完全に正常に機能します。最後に、ボールが動作しているセンターにボールが衝突し、ブロックがリセットされると、衝突が再び期待通りに機能し始めます。それを修正するコードはおそらくリセット機能にありますが、レベルがロードされる前にすべてをリセットするので、意味がありません。ここに私のリセットコードの一部です:

func reset() { 
    physicsWorld.gravity = CGVectorMake(0, -9.8) 
    for grav in gravityBlock { 
     grav.reset() 
    } 

    gravity = -9.8 

    //Resets blocks 
    for blocks in destroyedBlocks { //the blocks are stored in destroyedBlocks when collided with 
     blocks.reset() 
    } 

    destroyedBlocks = [] 

    /*Irrelevant code removed*/ 
    } 

ここに私のblocks.reset()関数です:

override func reset() { 
    super.reset() 

    self.physicsBody?.categoryBitMask = 1 
    removeAllActions() 

    self.texture = self.text 
    shadow.hidden = false 

    self.alpha = 0 
    shadow.alpha = 0 

    let appear = SKAction(named: "Appear")! 
    self.runAction(appear) 
    shadow.runAction(SKAction.fadeInWithDuration(0.25)) 
} 

ここsuper.reset()

func reset() { 
    self.hidden = false 
    state = .NotBroken 
} 

は本当にありがとうございました!

答えて

0

スプライトの縮尺を変更すると、視覚的な表示が変更されます。フィジックスボディは同じままです。だからこそ、衝突中にあなたは「奇妙な」状態に陥っています。

あなたは、物理学を示すことは、あなたのシーンで使用していることだけオープンGameViewControllerを見るとちょうど

skView.showsNodeCount = true 

はその後、再びあなたのゲームを実行し、この行の後、viewDidLoadの内側にこのライン

skView.showsPhysics = true 

を追加することができます物理境界が強調表示されます。

+0

私は実際にこれを試しましたが、[ここ](http://i.imgur.com/ZC40jam.png)は写真へのリンクです。 physicsBodyはブロック全体をカバーしますが、まだ衝突しません。 –

関連する問題