代码之家  ›  专栏  ›  技术社区  ›  AzureWorld

防止子画面重叠

  •  0
  • AzureWorld  · 技术社区  · 10 年前

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

    编辑:所以现在,我所做的是每次我向视图中添加精灵时,我都会将其添加到精灵数组中,该数组将跟踪当前使用创建的所有精灵

    [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 回复  |  直到 10 年前
        1
  •  1
  •   Tirth    10 年前

    你编写的代码不足以发现精灵是否存在。您必须实现一些用于检测的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.