2017-06-10 12 views
3

注:私は私のゲームの実行をさせるの5分後に、私のSKSpriteNodesの間のギャップを取得していますGap between SKSpriteNodes in SpriteKit collision detection奇妙なギャップ - 迅速

私はこの答えを試してみました。

let tileNode = SKSpriteNode(imageNamed: "world1Tile\(tileNumber).png") 
tileNode.position.x = x 
tileNode.position.y = y 
tileNode.size.width = 128 
tileNode.size.height = 128 
tileNode.zPosition = 10 
tileNode.physicsBody = SKPhysicsBody(rectangleOf: tileNode.size) 
tileNode.physicsBody!.isDynamic = false 
tileNode.physicsBody!.restitution = 0 
tileNode.physicsBody!.allowsRotation = false 
tileNode.name = "Tile" 
row.append(tileNode) 

フィジックスボディを削除すると、正常に動作しています。ここでは、私が何を意味するかを示すいくつかの画像です: With physics immediately taken.

この画像は物理学のボディを持ち、アプリの実行直後に撮影されました。

This image was taken 5 minutes after running the app.

この画像は、アプリを実行した後、5分を取りました。

どうしてですか?私はそれが物理学のボディとは何かを持っていると仮定します。なぜなら、物理学のボディがなければ私のアプリケーションは最初の写真のように見えます。何が起こるのを止めるために、私はどのような物理的なボディプロパティを変更する必要がありますか?どんな助けもありがとう。

答えて

1

ギャップがないと思います。あなたはおそらくあなたのgameviewcontrollerで 'showPhysics'をtrueにしていて、そのラインは私にとっては隙間に見えます。

位置を比較してpbがある場合とない場合を確認してください。

+0

'self.view!.showsPhysics = false'が問題を解決しました。ありがとう! – KingCoder11

+0

@ KingCoder11 Huzzah! :D – Fluidity

1

あまりにもずっと前から、タイル張りのノード間にギャップが現れていたのと同じ問題がありました(物理は使用しませんでしたが)。 this answerに基づいて、ノード間の完全な位置合わせが必要な場合は、ノードの位置とノードの幅と高さが整数であることを確認することをお勧めします。

の値をxyの値で四捨五入して、違いがあるかどうかを確認することをおすすめします。

+0

しかし、なぜゲームが始まるとうまくいくのですか?5分後にはどうしてそれが起こりますか?とにかく、私はそれらを切り捨てようとしましたが、全体的に数字であったので、違いはありませんでした。 – KingCoder11

0

今後必要と思われる人のために、私は自分の問題に固有の答えを見つけました。 JohnVが述べたように、私は位置を設定するときに値を丸める必要があるかもしれませんが、コードを実行するときに、私はSKActionsを実行するときにもそれを行う必要があることを知りました。