【问题标题】:Making a SKSpriteNode platform that recognize when a SKSprite is outside of it制作一个 SKSpriteNode 平台来识别 SKSprite 何时在其外部
【发布时间】:2026-01-07 05:05:02
【问题描述】:

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

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

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

- (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;
}

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

【问题讨论】:

  • 我试过了,但不明白你想要什么......如果敌人通过平台形状,你是什么意思。你可以只使用 hero 和enemy 的向量长度吗?如果 > 比 "set dist" 它被删除?
  • @Smick 现在我正在比较框架的形状,但它是如何完成的很奇怪,我想要更准确的东西......对不起,如果我没有解释自己
  • 所以如果红点移动到黑色圆圈之外,它会被移除吗?你是如何移动红点的?

标签: iphone ios xcode ipad sprite-kit


【解决方案1】:

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

- (float)distanceBetween : (CGPoint) centerOfPlatform and: (CGPoint)enemy
{
    return sqrt(pow(p2.x-p1.x,2)+pow(p2.y-p1.y,2));
}

【讨论】:

    【解决方案2】:

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

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

    感谢您的回答!

    【讨论】: