Ios 检查场景中的位置是否被精灵占用
我正在使用Xcode、SpriteKit和Swift构建我的第一款iPhone游戏。我不熟悉这些技术,但熟悉一般编程概念 以下是我用英语所要做的。我希望圆圈随机出现在屏幕上,然后开始扩大大小。但是,我不希望圆出现在当前存在圆的位置。我很难确定每个圆圈的位置 在GameSecene.swift中,我在didMoveToView中有以下代码:Ios 检查场景中的位置是否被精灵占用,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正在使用Xcode、SpriteKit和Swift构建我的第一款iPhone游戏。我不熟悉这些技术,但熟悉一般编程概念 以下是我用英语所要做的。我希望圆圈随机出现在屏幕上,然后开始扩大大小。但是,我不希望圆出现在当前存在圆的位置。我很难确定每个圆圈的位置 在GameSecene.swift中,我在didMoveToView中有以下代码: runAction(SKAction.repeatActionForever( SKAction.sequence([
runAction(SKAction.repeatActionForever(
SKAction.sequence([
SKAction.runBlock(addCircle), SKAction.waitForDuration(3, withRange: 2)]
)))
上面的代码调用我的“addCircle”方法:
上面的随机函数只选择给定范围内的一个随机数。如何检查随机函数是否正在生成当前被另一个圆占用的位置
我正在考虑使用do..while循环随机生成一组x和y坐标,然后检查圆是否在该位置,但我找不到如何检查该条件。任何帮助都将不胜感激。在这方面,有几种方法可以帮助您:
(BOOL)intersectsNode:(SKNode*)节点
,可与SKNode一起使用,以及CGRectContainsPoint()
以及CGRectContainsRect()
方法var point: CGPoint
var exit:Bool = false
while (!exit) {
let posX = random(min: 50, max: 270)
let posY = random(min: 50, max: 518)
point = CGPoint(x: posX, y: posY)
var pointFound: Bool = true
self.enumerateChildNodesWithName("circle", usingBlock: {
node, stop in
let sprite:SKSpriteNode = node as SKSpriteNode
if (CGRectContainsPoint(sprite.frame, point))
{
pointFound = false
stop.memory = true
}
})
if (pointFound)
{
exit = true
}
}
//point contains CGPoint where no other circle exists
//Declare new circle at point
当
if
条件为true
时,您应该退出enumerateChildNodesWithName
。您可以通过设置stop.memory=true
再次感谢@0x141E来实现这一点。我尝试设置stop=true
,但它说无法分配给'let'值'stop'
。编辑答案。非常感谢您的回复!EnumerateChildsNodeswithName方法正是我所需要的。我有一种感觉,像这样的东西是可用的,但找不到它。这就是为什么我给每个精灵取名为“圆圈”。再次感谢。
var point: CGPoint
var exit:Bool = false
while (!exit) {
let posX = random(min: 50, max: 270)
let posY = random(min: 50, max: 518)
point = CGPoint(x: posX, y: posY)
var pointFound: Bool = true
self.enumerateChildNodesWithName("circle", usingBlock: {
node, stop in
let sprite:SKSpriteNode = node as SKSpriteNode
if (CGRectContainsPoint(sprite.frame, point))
{
pointFound = false
stop.memory = true
}
})
if (pointFound)
{
exit = true
}
}
//point contains CGPoint where no other circle exists
//Declare new circle at point