防止精灵重叠

Preventing sprite overlap

我正在尝试创建游戏。在这个游戏中,我希望用户能够通过触摸放置精灵图标。但是,我想这样做,如果用户点击一个已经存在精灵的区域,通过触摸创建的新精灵将不会与预先存在的精灵重叠,而是转到最近的位置。

编辑:所以现在,我正在做的是每次我将一个精灵添加到视图中时,我还将它添加到一个精灵数组中,该数组将跟踪当前使用 [=12 创建的所有精灵=]

[array addObject:newObject];

因此,如果用户创建了一个新对象,我将首先通过遍历数组然后检查 x 和 y 位置来检查位置。

for(SKSpriteNode __strong *object in Objects){
    if(touchedObject.position.x != object.position.x 
      && touchedObject.position.y != object.position.y){
     //add the sprite 
     }
}

我遇到的第一个问题是头寸返回 0.0000

您的代码不足以确定精灵是否存在于触摸位置。你必须实现一些 SKNode 检测方法。请记住,SKSpriteNode 是从 SKNode class 继承的,因此您可以直接使用 SKNode 方法。使用以下方法,

- (CGPoint)convertPoint:(CGPoint)point fromNode:(SKNode *)node
 - (BOOL)containsPoint:(CGPoint)p
 - (BOOL)intersectsNode:(SKNode *)node
 - (SKNode *)nodeAtPoint:(CGPoint)p

会帮你解决问题。 有关更多信息,您需要通过 apple doc.