我尝试使用SKSpriteNode实现单面平台。我正在进行的方法是在英雄在平台下时尝试切换collisionBitMask,并在结束时重新打开它。
我的平台物理主体配置如下:
platform.physicsBody.dynamic = NO;
platform.physicsBody.categoryBitMask = platformCategory;
platform.physicsBody.collisionBitMask = heroCategory;
我的英雄就是这样
hero.physicsBody.categoryBitMask = heroCategory;
hero.physicsBody.contactTestBitMask = enemyProjectileCategory|monsterCategory;
hero.physicsBody.collisionBitMask = groundCategory;
我有一个更新方法,在检查它的平台上的每个模拟步骤之前进行检查:
if (self.position.y < self.hero.position.y) {
NSLog(@"setting collision to hero");
self.physicsBody.collisionBitMask = heroCategory;
} else {
NSLog(@"removing collision");
self.physicsBody.collisionBitMask = 0;
}
我的类别如下:
typedef enum : uint8_t {
friendlyProjectileCategory = 1,
enemyProjectileCategory = 2,
monsterCategory = 4,
heroCategory = 8,
groundCategory = 16,
platformCategory = 32
} physicsCategories;
问题在于,当我的英雄跳过平台时(他正确地从底部穿过),我看到碰撞位掩码正确翻转,但随后他正好穿过它(应该碰撞),尽管我正在看到&#34;消除碰撞&#34;记录执行。