2016-11-02 5 views
0

Swift 3とSprite Kitを使用してゲームを開発しています。私は移動してはならないが、衝突を検出するために重要なドットのグリッドを持っています。私の問題は、ドットがやや動いていることです。あなたはそれが動いているのを見ることはできませんが、私がポジションを印刷すると、私はポジションを見ます。これは私がドットを形成する方法である:SpriteKit isDynamicがfalseのときにスプライトが少し動く

for dot in dots { 
     //dot subclasses SKSpriteNode 
     dot.name = "dot\(index)" 
     dot.size = CGSize(width: DotWidth, height: DotHeight) 
     dot.position = pointFor(column: dot.column, row: dot.row) 
     dotsLayer.addChild(dot) 
     //dot.sprite = sprite 
     dot.physicsBody = SKPhysicsBody(circleOfRadius: 2) 
     dot.physicsBody?.affectedByGravity = false 
     dot.physicsBody?.allowsRotation = false 
     dot.physicsBody?.isDynamic = false 

     dot.physicsBody?.categoryBitMask = PhysicsCategory.Dot 
     dot.physicsBody?.contactTestBitMask = PhysicsCategory.Stick 
     dot.physicsBody?.collisionBitMask = PhysicsCategory.None 
     dot.physicsBody?.usesPreciseCollisionDetection = true 
     index += 1 

    } 

私はaffectedByGravity(無重力が存在しないにも関わらず)、およびallowsRotationのように、いくつかのことを試してみました。 1ドット(SKSpriteNodeのサブクラス)の位置を印刷すると、オプション((47.9458236694336、47.9458236694336))が得られますが、後で同じドットの位置を印刷すると、オプション((47.86669921875、79.892448425293))が得られます。私が待つ時間が長くなればなるほど、差は大きくなります。ショーフィジックスをオンにすると、ドットが左下に移動することがわかります。ドットを一切動かさない方法はありますか?

+0

これらの点は衝突に重要であり、衝突に反応する必要がありますか、単に連絡先情報提供者として使用するだけでよいのでしょうか? – Confused

+0

ドットが全く動いていない場合。正確な検出を使用しないでください。それを必要とする動きのあるオブジェクトにのみ使用してください。 – Knight0fDragon

+0

@ Confused:私は連絡先情報で行うことができます。それは実際に私が必要とする唯一のものです。私はdidBegin(_ contact:SKPhysicsContact)を使っています。それを行うための他の方法はありますか? – APvG

答えて

0

私の問題は、シミュレータでアプリケーションを実行するときにのみ存在するようです。最新のXcodeシミュレータ(Xcode 8.1)でさえも。私が使っているシミュレータ(iPhone 5、iPhone 6など)は関係ありません。実際のデバイスで同じアプリを実行しても、シフト問題は表示されません。 「ドット」は作成時と同じ位置にとどまります。だから、シミュレータのバグのようです。

+0

@ Confused:私はまだコンタクト専用ソリューションの使用に興味があります。 – APvG

+0

あなたはすでに連絡先の解決策を行っています – Knight0fDragon

+0

OK、ありがとう。私はあなたの声明でちょっと混乱しました。(これらの点は衝突のために重要であり、衝突に反応する必要がありますか、単に連絡先情報提供者として使うことができますか?_ – APvG

関連する問題