2014-04-29 78 views
1

我有一個SpriteNode,它受y軸上的重力影響,可以通過x軸上的加速度計移動。我的場景中還有一個邊框(SKPhysicsBody),它將我的節點保留在場景中。現在的問題是,我的節點在執行由加速度計引起的SKAction時忽略了邊框。與PhysicsBody碰撞時停止SKAction

我對X移動/加速度計和其動作代碼:

birdNode是我SpriteNode

float destX = 0.0; 


     float currentX = birdNode.position.x; 
     BOOL shouldMove = NO; 

     if (data.acceleration.x < -0.1) { 
      destX = currentX + (data.acceleration.x * playerXSpeed); 
      shouldMove = YES; 
     } 
     else if (data.acceleration.x > 0.1) { 
      destX = currentX + (data.acceleration.x * playerXSpeed); 
      shouldMove = YES; 
     } 

     if (shouldMove) { 
      if (birdNode.position.x + destX < self.frame.size.width || birdNode.position.x - destX > 0) { 

       SKAction *moveBird = [SKAction moveToX:destX duration:0.1]; 
       [birdNode runAction:moveBird]; 
      } 
     } 
+0

變量「data.acceleration.x」和「playerXSpeed」代表什麼? – sangony

+0

data.acceleration.x是加速度計和playerXSpeed設定的速度值,它設爲80 –

回答

1

我假設你有你的碰撞位掩碼設置正確處理衝突。您應該通過測試來確認這一點,以便仔細檢查。

我相信你的問題是與你的對象的速度。如果對象移動速度過快,並且在發佈的代碼中看不到任何速度限制,則您的對象可以在一個更新週期內移過屏幕邊界。

例如,您當前對象的位置是(400,100)。給定足夠的速度,你的對象的下一次更新:位置可能是(600,100)。這意味着你的對象從字面上跳過了邊界而不會引起碰撞。

解決方法是限制速度或在設置對象的新位置之前進行位置檢查。例如,如果新的x位置>屏幕寬度,則將x位置設置爲允許的最大屏幕寬度x。

+0

不,這不是問題。這個行爲與物理學沒有什麼共同之處 - 我認爲這就是爲什麼我的節點忽略邊界的問題。我已經更新了我的代碼 –

+0

@DavidP - 添加代碼NSLog(@「self:%@」,NSStringFromCGPoint(yourObjectName.position));我已經嘗試做檢查,但它仍然不工作。插入到update:方法中,並查看每個幀的x座標變化有多大。 – sangony

+0

範圍並不廣泛..介於140和280之間 –