通过 Spritenode
Posted
技术标签:
【中文标题】通过 Spritenode【英文标题】:Passing through Spritenode 【发布时间】:2015-01-01 23:57:09 【问题描述】:我有一个英雄/玩家,我希望他能够通过物体/障碍物,当我这样做时,删除障碍物。很好用,有点。
我将此代码用于我的障碍
SKSpriteNode *Obstacle = [SKSpriteNode spriteNodeWithColor:[UIColor blackColor] size:CGSizeMake(40, 40)];
Obstacle.name = @"speedBoost";
Obstacle.position = CGPointMake(self.ObstacleX + 100,0);
Obstacle.physicsBody = [SKPhysicsBody Obstacle.size];
Obstacle.physicsBody.contactTestBitMask = ObstacleCategory;
Obstacle.physicsBody.collisionBitMask = 0;
Obstacle.physicsBody.dynamic = NO;
[self.world Obstacle];
所以当我的英雄从侧面穿过物体时,障碍物被删除并且工作正常 但是当我的英雄从障碍物上方或下方穿过障碍物时,英雄会在障碍物被删除之前停止
我该如何解决这个问题?
提前致谢
碰撞
if ([firstBody.node.name isEqualToString:@"hero"] && [secondBody.node.name isEqualToString:@"obstacle"])
[self obstacle];
【问题讨论】:
你的英雄的碰撞位掩码是什么 您如何检测联系人?障碍物的物理体不是动态的... 【参考方案1】:好的,您已经设置了 BitMask,这是一个开始。
查看某事是否有联系:
-
确保场景在界面前面有
<SKPhysicsContactDelegate>
使用didBeginContact
方法查看是否发生碰撞
同样设置位掩码:
CategoryBitMask - 识别对象,其他对象的contactTest和collision bitMask与之匹配
ContactTestBitMask - 如果碰撞中对象的 categoryBitMask 与此匹配,将调用 didBeginContact
CollisionBitMask - 它与什么碰撞
所以只需设置正确的方法并在didBeginContact
中使用按位运算符来测试...
【讨论】:
以上是关于通过 Spritenode的主要内容,如果未能解决你的问题,请参考以下文章