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 碰撞检测和物理的主要内容,如果未能解决你的问题,请参考以下文章

Sprite Kit 从未检测到我的碰撞

Sprite Kit 碰撞检测仅适用于左右屏幕边缘

在 Sprite Kit 中为碰撞执行您自己的物理计算

Sprite kit:删除特定节点而不是所有节点

Sprite 套件中的 SKShapeNode 碰撞检测未检测到碰撞

如何检测精灵套件中的碰撞?