gpt4 book ai didi

ios - Sprite 套件与子 Sprite 的碰撞检测

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:06:28 25 4
gpt4 key购买 nike

我正在尝试检测两个 sprite 之间的碰撞,但我无法对子 sprite 执行此操作。

self.player = [[Player alloc] initWithImageNamed:@"player"];
self.player.position = CGPointMake(150, 75);
[self addChild:self.player];

_object = [SKSpriteNode spriteNodeWithImageNamed:@"object"];
_object.position = CGPointMake(-40, 27);
[self.player addChild:_object];

然后我有这样的碰撞检测

- (void)checkCollisions {
[self.map enumerateChildNodesWithName:@"enemy"
usingBlock:^(SKNode *node, BOOL *stop){SKSpriteNode *enemy = (SKSpriteNode *)node;
if (CGRectIntersectsRect(enemy.frame, _object.frame)) {
[enemy removeFromParent];
}
}]; }

*这不起作用!!!但如果我使用:

CGRectIntersectsRect(enemy.frame, self.player.frame)  

我可以检测到与主体的碰撞。我如何对另一个 Sprite 的 child 进行碰撞检测?

最佳答案

子节点的 positionframe 属性是相对于它的 parent 的,您需要在代码中考虑这一点。

SKNode 有两种方法可以帮助您将给定 SKNodeposition 转换为另一个节点的坐标空间或从另一个节点的坐标空间转换:

convertPoint:fromNode:
convertPoint:toNode:

您可以使用它们将 SKNodeposition 属性转换为另一个坐标空间。你想要做的是将 _object 的位置转换为敌人的坐标空间,反之亦然,然后使用临时 CGRect 为你的 CGRectIntersectsRect 检查。

这是一个例子:

CGPoint globalPosition = [self.player convertPoint:_object.position toNode:self.player.parent];
CGRect tempRect = CGRectMake(globalPosition.x, globalPosition.y, _object.frame.size.width, _object.frame.size.height);

if (CGRectIntersectsRect(enemy.frame, _object.frame))
{
// collision occurred
}

这段代码假设你的敌人和你的玩家在同一个坐标空间中。 (具有相同的父级)

关于ios - Sprite 套件与子 Sprite 的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21870605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com