如果我试图在屏幕的两个定义区域(顶部和底部,中间部分,它们无法生成)中的敌人中产卵,我该如何防止它们产生于或者太靠近了。
我的精灵在屏幕上相对较小,我在这里找到的唯一建议是创建一系列可能的位置,每次使用其中一个位置都将其从列表中删除,但首先所有我都不知道怎么会看起来,其次我有很多可能的位置,因为我正在使用5px高精灵,我希望他们能够重生一旦该区域清晰。
我选择顶部或底部的方法只是选择一个随机数1或2,并且取决于我有2个函数可以使它们位于顶部或底部。
我只需要没有2个物体彼此产生球的直径。任何想法如何将其纳入我的产卵?
编辑:
//Create your array and populate it with potential starting points
var posArray = Array<CGPoint>()
posArray.append((CGPoint(x: 1.0, y: 1.0))
posArray.append((CGPoint(x: 1.0, y: 2.0))
posArray.append((CGPoint(x: 1.0, y: 3.0))
//Generate an enemy by rolling the dice and
//remove its start position from our queue
let randPos = Int(arc4random()) % posArray.count
posArray[randPos]
posArray.removeAtIndex(randPos)
...
//Play game and wait for enemy to die
//Then repopulate the array with that enemy's start position
posArray.append(enemyDude.startPosition)
这是我发现的建议,但这会产生错误&#34;预期的分隔符&#34;我真的不知道如何修理。
实际上,我必须在X和Y上覆盖所有区域制作一大堆可能的位置,或者有更好的方法来做到这一点吗?
答案 0 :(得分:2)
使用intersectsNode(_ node: SKNode) -> Bool
。
至于产卵太近,这是另一个故事。唯一可行的方法是将数组中的所有当前节点都枚举,枚举数组并将每个节点的位置检查为生成节点的位置。根据您的参数,您可以生成或不生成。
我不熟悉Swift,所以你必须自己翻译代码。
-(void)testMethod {
// an array with all your current nodes
NSMutableArray *myArray = [NSMutableArray new];
// the potential new spawn node with the proposed spawn position
SKSpriteNode *mySpawnNode = [SKSpriteNode new];
BOOL tooClose = NO;
// enumerate your node array
for(SKSpriteNode *object in myArray) {
// get the absoulte x and y position distance differences of the spawn node
// and the current node in the array
// using absolute so you can check both positive and negative values later
// in the IF statement
float xPos = fabs(object.position.x - mySpawnNode.position.x);
float yPos = fabs(object.position.y - mySpawnNode.position.y);
// check if the spawn position is less than 10 for the x or y in relation
// to the current node in the array
if((xPos < 10) || (yPos < 10))
tooClose = YES;
}
if(tooClose == NO) {
// spawn node
}
}
请注意,该数组应该是一个属性,而不是在我在示例中使用它的范围中声明。