0

我正在尝试制作一个随机类型的平台(基于我放置的精灵的形状),我的游戏主角将位于其中;如果敌人通过平台形状,它将被移除(就像它被倒下一样)。这是我想说的图片:

蓝点是英雄,红点是坏人;紫色圆圈内的那个是从圆形平台上掉下来应该去掉的那个

所以基本上,我不知道如何正确检测角色何时下降,我现在有一些东西,但是当整个身体都下降时它们会下降:

- (void) boundsCheck:(SKSpriteNode*)sprite{
    CGPoint newPosition = self.position;
    CGPoint newVelocity = self.velocity;

    CGPoint bottomLeft = CGPointMake(sprite.frame.origin.x, sprite.frame.origin.y);
    CGPoint topRight = CGPointMake(sprite.frame.origin.x + sprite.size.width,
                                   sprite.frame.origin.y + sprite.size.height);

    if (newPosition.x <= bottomLeft.x) {
        [self removeCharacterWithPosition:newPosition];
    }
    if (newPosition.x >= topRight.x) {
        [self removeCharacterWithPosition:newPosition];
    }
    if (newPosition.y <= bottomLeft.y) {
        [self removeCharacterWithPosition:newPosition];
    }
    if (newPosition.y >= topRight.y) {
        [self removeCharacterWithPosition:newPosition];
    }

    self.position = newPosition;
    self.velocity = newVelocity;
}

你能告诉我一些提示吗?谢谢

4

2 回答 2

0

答案很简单,有一个方法叫做:containsPoint我可以检测出敌人的CGPont是否在平台内部:)所以我做到了:

 if ([bezierPath containsPoint:newPosition]) {
        self.position = newPosition;
        self.velocity = newVelocity;
        return;
    }

感谢您的回答!

于 2013-10-17T16:16:32.230 回答
0

如果平台是完全圆形的,您可以检查红点与平台中心的距离。如果它们的距离大于平台半径,您可以将它们视为平台之外。要检查两个 CGPoints 之间的距离(用于存储节点的位置属性),您可以使用如下函数:

- (float)distanceBetween : (CGPoint) centerOfPlatform and: (CGPoint)enemy
{
    return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p1.y,2));
}
于 2013-10-17T07:43:31.023 回答