我想用两根手指移动两个不同的物体。问题是我无法使用touchBegan方法,因为我无法识别我当前操作的对象。最好的方法是使用手势识别器,因为我可以识别我正在拖动的视图,我可以移动两个或更多不同的对象,我总是对它们进行参考。但是我不能在SpriteKit中使用手势识别器。我不能向我的对象添加手势,但我可以向主SKView添加手势,但它只能用于一个触摸对象。那么,问题是我如何使用SpriteKit移动两个不同的对象?
答案 0 :(得分:0)
触摸...方法肯定可以用于此。例如,要平移多个精灵,首先迭代触摸。对于每一个,请在场景中询问该点的所有节点。 (这是您可以获得对象引用的节点)
然后在该点迭代所有节点。如果他们通过某种可移动性测试(比如名字),则使用算术根据UITouch对象的当前和先前触摸位置确定他们的新位置。话虽这么说,下面的代码将使用名称" nameOfMovableObject"移动场景中的任何精灵。随着那个位置的触摸。
CG_INLINE CGPoint CGPointFromPreviousCoords(CGPoint affectedPoint, CGPoint currentPoint, CGPoint previousPoint) {
return CGPointMake(affectedPoint.x + currentPoint.x - previousPoint.x, affectedPoint.y + currentPoint.y - previousPoint.y);
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[super touchesMoved:touches withEvent:event];
for (UITouch *touch in touches) {
CGPoint location = [touch locationInNode:self];
CGPoint previousLocation = [touch previousLocationInNode:self];
for (SKNode *node in [self nodesAtPoint:location]) {
if ([node.name isEqualToString:@"nameOfMovableObject"]) {
[node setPosition:CGPointFromPreviousCoords(node.position, location, previousLocation)];
}
}
}
}
答案 1 :(得分:0)
我通过将SKViews
添加到-(void)didMoveToView:
方法来解决此问题,并将标准UIGestureRecognizer添加到此SKViews