防止精灵重叠
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.
我正在尝试创建游戏。在这个游戏中,我希望用户能够通过触摸放置精灵图标。但是,我想这样做,如果用户点击一个已经存在精灵的区域,通过触摸创建的新精灵将不会与预先存在的精灵重叠,而是转到最近的位置。
编辑:所以现在,我正在做的是每次我将一个精灵添加到视图中时,我还将它添加到一个精灵数组中,该数组将跟踪当前使用 [=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.