防止精灵重叠

时间:2015-02-03 06:50:32

标签: objective-c sprite

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

编辑:所以现在,我正在做的是每次我在视图中添加一个精灵,我也将它添加到一个精灵数组中,该精灵数组将跟踪当前使用

创建的所有精灵。

[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

1 个答案:

答案 0 :(得分:1)

你编码的东西不足以在触摸位置找到精灵存在与否。您必须实现一些SKNode方法进行检测。请记住,SKSpriteNode继承自SKNode类,因此您可以直接使用SKNode方法。使用以下方法,

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

有助于您解决问题。 有关详细信息,您需要浏览apple doc.