【问题标题】:Preventing sprite overlap防止精灵重叠
【发布时间】:2015-02-03 15:37:28
【问题描述】:

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

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

[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

【问题讨论】:

  • 用代码编辑你的问题。你的问题发生其实有很多确定性。

标签: objective-c sprite


【解决方案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.

【讨论】:

  • 谢谢我知道我做错了什么。我得到了相对于框架的节点位置,这就是为什么它为 0。我必须将其转换为 CGPoint position = [self convertPoint:object.position fromNode:self]; 现在我试图弄清楚如何找到节点的尺寸,以便精灵不会重叠/堆叠相互叠加
  • 感谢我使用 intersectsNode 来纠正重叠问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
相关资源
最近更新 更多