我想在Sprite Kit游戏中从视图外部的随机点移动一个对象。
这样做的逻辑方法是创建一个比视图大的矩形100px(示例),并在其周边选择一个随机点。不幸的是,我不知道一个简单的方法。
如何在矩形的周长上轻松创建一个随机点(比我的视图略大)?
答案 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像素的点?
假设您希望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}