2014-05-07 55 views
1

我正在研究簡單的測試遊戲。我有與牆壁碰撞的動態物體。如果動態物體的速度很高(我認爲這是原因),物體就會穿過牆壁。有誰知道如何解決這個問題?SpriteKIt - 動態物體與牆壁碰撞並走槽

牆:

// Create wall ... 
    CGRect rect = CGRectMake(0, 0, 25, self.frame.size.height); 
    SKNode *wallNode = [SKNode node]; 
    wallNode.position = CGPointMake(CGRectGetMidX(self.frame) + rect.size.width * 0.5,          250); 
    wallNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:rect.size]; 
    wallNode.physicsBody.dynamic = NO; 
    wallNode.physicsBody.categoryBitMask = CollisionTypeNet; 
    [self addChild:wallNode]; 

球員:

SKSpriteNode *player = [SKSpriteNode spriteNodeWithImageNamed:@"player"]; 

player.name = playerCategoryName; 

player.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:player.frame.size]; 
player.physicsBody.restitution = 0.1f; 
player.physicsBody.friction = 0.0f; 
player.physicsBody.dynamic = YES; 

player.physicsBody.categoryBitMask = CollisionTypePlayer; 
player.physicsBody.collisionBitMask = CollisionTypeNet ; 
player.physicsBody.contactTestBitMask = CollisionTypeWall; 
[self addChild:player]; 
+1

嗯無位掩碼就沒有碰撞匹配(非零)接觸。對於高速度使用精確碰撞:https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKPhysicsBody_Ref/Reference/Reference.html#//apple_ref/occ/instp/SKPhysicsBody/usesPreciseCollisionDetection – LearnCocos2D

回答

0

高速度 「經過器」 是一個常見的問題。正如科科斯所述,將usesPreciseCollisionDetection設置爲適合您的播放器對象。

因爲usesPreciseCollisionDetection不能保證適用於運動速度非常快的物體,所以您還應該將速度上限應用於更快的移動物體。

您可以將速度上限是這樣的:

if(mySpriteA.physicsBody.velocity.dx > 50) 
    mySpriteA.physicsBody.velocity = CGVectorMake(50, mySpriteA.physicsBody.velocity.dy); 
if(mySpriteA.physicsBody.velocity.dx < -50) 
    mySpriteA.physicsBody.velocity = CGVectorMake(-50, mySpriteA.physicsBody.velocity.dy); 
if(mySpriteA.physicsBody.velocity.dy > 50) 
    mySpriteA.physicsBody.velocity = CGVectorMake(mySpriteA.physicsBody.velocity.dx, 50); 
if(mySpriteA.physicsBody.velocity.dy < -50) 
    mySpriteA.physicsBody.velocity = CGVectorMake(mySpriteA.physicsBody.velocity.dx, -50); 
+0

如何申請速度上限? –

+0

有關該主題的其他問題。當「touchesMoved」我更新了對象位置時,我記錄了對象的速度,並且不管速度如何仍然是dx:0.0和dy 0.0。我更新對象位置的方式是什麼? – DeVladinci

+0

@DeVladinci - 什麼? – sangony