我有一个自上而下的策略游戏。问题是,我正在尝试找到一种解决方案,使我的联系人可以比碰撞更远(更大的圆圈)。原因很合理,我想知道什么时候一个节点在另一个节点的“范围”内。
例如,假设一个精灵的“范围”圆圈距离实际精灵20个像素。
我试着让精灵上的物理体比精灵的框架大,但碰撞是基于“距离圆”而不是精灵。
我还试着给精灵添加了一个SKShapeNode圆,并用它添加了一个物理体。问题是,当我这样做时,子节点仍然与另一个子节点范围圆的物理体发生冲突。
更不用说我只有20个节点(以及它们自己的物理体、range节点和它们的物理体)的性能很快就会下降。
我更喜欢在物理模拟中保持联系,而不是临时解决方案。
有什么想法/建议吗?
// Mover physics
self.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:(self.frame.size.width/2)];
self.physicsBody.collisionBitMask = self.player == kPlayer_Human ? CATEGORY_HUMAN_MOVER : CATEGORY_AI_MOVER;
self.physicsBody.categoryBitMask = self.player == kPlayer_Human ? CATEGORY_HUMAN_MOVER : CATEGORY_AI_MOVER;
self.physicsBody.contactTestBitMask = 0;
_rangeNode = [SKShapeNode node];
_rangeNode.name = @"rangeNode";
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddArc(path, NULL, 0,0, _range, 0, M_PI*2, YES);
_rangeNode.path = path;
_rangeNode.lineWidth = 1.0;
_rangeNode.fillColor = [SKColor clearColor];
_rangeNode.strokeColor = [SKColor whiteColor];
_rangeNode.hidden = YES;
[self addChild:_rangeNode];
_rangeNode.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:_range];
_rangeNode.physicsBody.dynamic = NO;
_rangeNode.physicsBody.categoryBitMask = self.player == kPlayer_Human ? CATEGORY_HUMAN_MOVER_RANGE : CATEGORY_AI_MOVER_RANGE;
_rangeNode.physicsBody.contactTestBitMask = self.player == kPlayer_Human ? CATEGORY_AI_MOVER | CATEGORY_AI_HERO | CATEGORY_AI_TOWER : CATEGORY_HUMAN_MOVER | CATEGORY_HUMAN_HERO | CATEGORY_HUMAN_TOWER;
_rangeNode.physicsBody.collisionBitMask = 0;
类别定义,全局设置:
static const uint32_t CATEGORY_HUMAN_MOVER = 0x1 << 0;
static const uint32_t CATEGORY_AI_MOVER = 0x1 << 1;
static const uint32_t CATEGORY_HUMAN_HERO = 0x1 << 2;
static const uint32_t CATEGORY_AI_HERO = 0x1 << 3;
static const uint32_t CATEGORY_HUMAN_TOWER = 0x1 << 4;
static const uint32_t CATEGORY_AI_TOWER = 0x1 << 5;
static const uint32_t CATEGORY_WALLS = 0x1 << 6;
static const uint32_t CATEGORY_HUMAN_MOVER_RANGE = 0x1 << 7;
static const uint32_t CATEGORY_AI_MOVER_RANGE = 0x1 << 8;
谢谢,E
发布于 2014-08-04 03:52:47
我不确定您的问题实际上是什么,但请注意,您的"mover“节点的SKPhysicsBody
设置为节点本身大小的两倍。这可能就是为什么你们的节点会奇怪地互相“推”在一起。
其他注意事项/问题:
为隐藏节点设置笔触和填充颜色有什么特殊的原因吗?
为什么要为range物理主体创建任意大小的父节点?如果您有一个具有相同范围圆物理体的“空”节点,性能可能会提高吗?
如果在敌人与多个节点接触/碰撞时性能受到影响,请仔细注意您的联系处理例程(didBeginContact
和didEndContact
)。是否有可能对性能产生负面影响的地方?
https://stackoverflow.com/questions/25099426
复制相似问题