2
即時通訊在iOS和cocos2d庫中使用box2d。 我目前正在嘗試使用聯繫人過濾,但發現類別位掩碼方法根本不適用於我。我已經理解了這個方法,但是由於一些奇怪的原因,它不能工作。Box2d聯繫人篩選
我創建對象後,初始化我的對象過濾器數據,這是因爲我使用外部庫,並沒有創建時直接訪問燈具。 (它駐留在.plist文件中)。
bodydef.type = b2_dynamicBody;
bodydef.position.Set(location.x/PTM_RATIO, location.y/PTM_RATIO);
bodydef.userData = self;
bodydef.fixedRotation = true;
//bodydef.angularDamping = 2.0f;
body = world->CreateBody(&bodydef);
// add the fixture definitions to the body
[[GB2ShapeCache sharedShapeCache] addShapesWithFile:@"bubblephysics.plist"];
[[GB2ShapeCache sharedShapeCache] addFixturesToBody:body forShapeName:filename];
[sprite setAnchorPoint:[[GB2ShapeCache sharedShapeCache] anchorPointForShape:filename]];
//Apply a new filter on the initialized body
b2Fixture *tempFixture = self.body->GetFixtureList();
b2Filter temp = tempFixture->GetFilterData();
if ([self isMemberOfClass:[Boopop class]]){
temp.categoryBits = 0x0004;
temp.maskBits = 0x0000;
temp.groupIndex = 0;
tempFixture->SetFilterData(temp);
}
if ([self isMemberOfClass:[BubbleNode class]]){
temp.categoryBits = 0x0004;
temp.maskBits = 0x0000;
temp.groupIndex = 0;
tempFixture->SetFilterData(temp);
}
基本上即時通訊是即時更新我的聯繫方式的過濾器,用兩種方法:
-(void)freezeBubble{
self.isFrozen = NO; //Stops Iteration of the b2Body and CCSprite;
b2Fixture *tempFixture = self.body->GetFixtureList();
b2Filter temp = tempFixture->GetFilterData();
temp.groupIndex = 0;
temp.categoryBits = 0x0004;
temp.maskBits = 0x0000;
tempFixture->SetFilterData(temp);
}
-(void)unfreezeBubble{
self.isFrozen = NO;
b2Fixture *tempFixture = self.body->GetFixtureList();
b2Filter temp = tempFixture->GetFilterData();
NSLog(@"Previous Bits: cat = %d, mask = %d",temp.categoryBits,temp.maskBits);
temp.groupIndex = 0;
temp.categoryBits = 0x0004;
temp.maskBits = 0x0000;
tempFixture->SetFilterData(temp);
}
我已經試過這兩種技術中,對groupIndex和categoryBits,雙方不工作。將所有組標記設置爲-1並不會導致我的所有BubbleNode和Boopop對象過濾碰撞。同樣,將其maskBits設置爲0x0000也不會導致它過濾它們的衝突。我認爲這可能與我的方法有關,但將所有groupIndex值設置爲-1應導致它們全部過濾彼此。
所以現在,即時通訊質疑我的代碼比位。
幫助任何人!
謝謝!
嗨,是的,我瞭解位掩碼,但有些東西不能在我的代碼中工作。我看着你的另一個帖子,關於一個身體上的多個裝置,如果它們產生了,它們會粘在一起。我解決了這個問題,並從plist文件中刪除了初始化,並且現在可以使用蒙版。 謝謝! – Ospho