Sprite Kit 碰撞检测和物理
Posted
技术标签:
【中文标题】Sprite Kit 碰撞检测和物理【英文标题】:Sprite Kit collision detection and physics 【发布时间】:2014-03-23 07:22:54 【问题描述】:大家好,我正在制作一个游戏中的敌人不应该能够穿过墙壁和游戏中的物品,例如如果有一堵墙,敌人的角色不应该能够穿过它。但是,我无法让物理学完全正确地工作。如果敌人试图撞到像墙这样的另一个精灵,我希望它被阻止。
谢谢大家。
- (void) Enemy
_Enemy = [SKSpriteNode spriteNodeWithImageNamed:@"enemy"];
_Enemy.position = CGPointMake(520, _Enemy.size.height/1.50);
[self addChild:_Enemy];
- (void) EnemyHomeWalls
Wall = [SKSpriteNode spriteNodeWithImageNamed:@"Thewall@2x"];
wall.name = @"Thewall";
wall.position = CGPointMake(500, 150);
Wall.xScale = 0.12;
Wall.yScale = 0.12;
Wall.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];
[self addChild:Wall];
【问题讨论】:
【参考方案1】:你需要敌人节点也有一个physicsBody:
_Enemy.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_Enemy.size];
为了防止节点受重力影响,可以设置
_Enemy.physicsBody.affectedByGravity = NO;
或者,在 initWithSize 方法中,
self.physicsWorld.gravity = CGVectorMake(0, 0);
你需要学习SKPhysicsBody class reference。
【讨论】:
我试过了,但是会发生什么突然间敌人的角色会有某种重力,它会掉到底部边缘并停在那里。 差不多但不完全。因为现在发生的事情是,如果敌人撞到墙上,它就会卡在那里,不会离开。我该如何解决?顺便谢谢芽。 你是如何控制敌方精灵的移动的? 它是随机的。计算机根据随机的 x 和 y 位置来执行此操作。 是的,我明白了。请为此添加代码。如果您希望使用物理正确模拟您的节点,我确信您使用的 SKActions 效果不佳。以上是关于Sprite Kit 碰撞检测和物理的主要内容,如果未能解决你的问题,请参考以下文章