2014-05-22 22 views
1

我正在製作一個可以通過參考下面的圖像來最好地描述的地圖遊戲。 紅瓦是我的地板,它與我的玩家發生碰撞,它也處理精靈是否可以跳躍(如果沒有接觸不跳)。所以,當我穿過紅色的瓷磚時,如果碰到黃色瓷磚,我會「跳過」 。我的NSLog再次打印「可以跳」,因爲我有很長時間的球員和牆的接觸。但如果我離開黃色瓷磚,仍然走在紅色。我收到一條通知說「不能跳」,結果我的精靈不能再跳,因爲它沒有檢測到我的玩家和我的地板之間的碰撞。當它仍然存在時,聯繫正在結束

如果我能給出關於如何處理這個問題的想法,我會很感激。 感謝

floor.name = @"floor"; 
floor.position = CGPointMake(x + w/2, y + h/2); 
floor.zPosition=0; 

floor.physicsBody = 
[SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(w, h)]; 
floor.physicsBody.usesPreciseCollisionDetection=YES; 
floor.physicsBody.categoryBitMask = floorCategory; 
floor.physicsBody.contactTestBitMask=spriteCategory; 
floor.physicsBody.dynamic = NO; 




- (void)didBeginContact:(SKPhysicsContact *)contact { 
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask); 
    if (collision == (floorCategory|spriteCategory)) { 

     NSLog(@"Can jummp"); 
     onFloor=YES; 

} 
} 
- (void) didEndContact:(SKPhysicsContact *)contact { 
    uint32_t contactTest = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask); 
    if (contactTest == (spriteCategory| floorCategory)) { 


    NSLog(@"dont jumps"); 
    onFloor = NO; 
} 

enter image description here

+0

你有沒有機會得到很多可以/不能很快跳過消息? – sangony

+0

@sangony不,我不跳,當我跳我得到「不能跳」,當我登陸平臺時,我得到「可以跳」。 – Jennifer

+0

因此,如果他與黃色和紅色接觸,然後在與紅色接觸時失去與黃色的接觸,那麼你的傢伙顯示「不跳躍」? – sangony

回答

0

問題在聊天中得到解決。

問題是紅色和黃色物體都有相同的物理類別(floorCategory)。

玩家在與紅色物體接觸的同時與黃色物體接觸。然後,玩家與黃色物體失去聯繫,右移,並觸發didEndContact:方法,因爲黃色物體與紅色物體具有相同的類別,從而設置「無跳轉」狀態。

解決方法是在黃色物體的一側添加「牆類別」,從而防止didEndContact:觸發。

相關問題