在Objective-C(Sprite Kit)中找到矩形周长上的点

时间:2014-02-28 18:22:24

标签: objective-c sprite rectangles

我想在Sprite Kit游戏中从视图外部的随机点移动一个对象。

这样做的逻辑方法是创建一个比视图大的矩形100px(示例),并在其周边选择一个随机点。不幸的是,我不知道一个简单的方法。

如何在矩形的周长上轻松创建一个随机点(比我的视图略大)?

1 个答案:

答案 0 :(得分:1)

<强>更新

这应该做你想要的:

- (CGPoint)randomPointOutsideRect:(CGRect)rect withOffset:(CGFloat)offset {
    NSUInteger random = arc4random_uniform(4);
    UIRectEdge edge = 1 << random; // UIRectEdge enum values are defined with bit shifting

    CGPoint randomPoint = CGPointZero;
    if (edge == UIRectEdgeTop || edge == UIRectEdgeBottom) {
        randomPoint.x = arc4random_uniform(CGRectGetWidth(rect)) + CGRectGetMinX(rect);
        if (edge == UIRectEdgeTop) {
            randomPoint.y = CGRectGetMinY(rect) - offset;
        }
        else {
            randomPoint.y = CGRectGetMaxY(rect) + offset;
        }
    }
    else if (edge == UIRectEdgeLeft || edge == UIRectEdgeRight) {
        randomPoint.y = arc4random_uniform(CGRectGetHeight(rect)) + CGRectGetMinY(rect);
        if (edge == UIRectEdgeLeft) {
            randomPoint.x = CGRectGetMinX(rect) - offset;
        }
        else {
            randomPoint.x = CGRectGetMaxX(rect) + offset;
        }
    }

    return randomPoint;
}

这应该是相当简单的,让我知道是否有不明确的事情。 基本上,我们随机选择一条边,然后“固定”一条轴并在另一条轴上选择一个随机值(在宽度/高度边界内)。

arc4random_uniform只给我们整数,但这很好,因为在屏幕上显示内容时帧中的浮点值很差。

写这个可能有一个更短的方法;每个人都可以自由编辑以改进。


原始回答

  

如何轻松地创建距离视图边缘100像素的点?

使用CGRectOffset()

假设您希望CGPoint 100pt“更高”(即y更低),而不是您的观点,请执行以下操作:

CGRect viewFrame = // lets say for this example that your frame is at {{20, 40}, {300, 600}}
CGRect offsetFrame = CGRectOffset(viewFrame, 0, -100);
CGPoint offsetPoint = offsetFrame.origin
// offsetPoint = {20, -60}