我已经创建了一个名为的节点,并且当它触摸并拖动节点时,我已经将其从屏幕上拖动。由于某种原因,这个方法(下面的代码)让我在屏幕上显示任何节点。我怎样才能只使用#test; testNode2"。
此外,我会将节点拖动到手指的移动但是如果手指触摸屏幕上的任何位置,这可以工作,而不仅仅是触摸节点本身? (但不要跳到手指的位置,只需移动与手指运动相关)。例如,在任何地方按下屏幕然后向左拖动100个像素,节点将向左移动100个像素。
我的代码在
之下-(void) colourSprite2:(CGSize)size {
self.testNode2 = [SKSpriteNode spriteNodeWithColor:[SKColor greenColor] size:CGSizeMake(30, 30)];
self.testNode2.position = CGPointMake(self.size.width/2, self.size.height/1.1);
self.testNode2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.testNode2.frame.size];
[self addChild:self.testNode2];
}
-(void)touchesBegan:(NSSet*) touches withEvent:(UIEvent*) event
{ self.testNode2 = [self nodeAtPoint:[[touches anyObject] locationInNode:self]]; }
-(void)touchesMoved:(NSSet*) touches withEvent:(UIEvent*) event
{ self.testNode2.position = [[touches anyObject] locationInNode:self]; }
-(void)touchesEnded:(NSSet*) touches withEvent:(UIEvent*) event
{ self.testNode2 = nil; }
答案 0 :(得分:0)
触摸委托返回NSSet
个触摸,其中包含多个UITouch对象,每个UITouch对象对应于与委托方法实现的对象相关的触摸。
在您的情况下,节点将自己移动到委托遇到的任何触摸位置。这包括屏幕上的多个触摸。
您应该阅读UITouch和UIResponder类。
您的问题的解决方案是跟踪用于移动节点的特定触摸。
将UITouch对象维护为实例变量:
@implementation MyScene
{
UITouch *currentTouch;
}
然后按如下方式跟踪特定触摸:
-(void)touchesBegan:(NSSet*) touches withEvent:(UIEvent*) event
{
UITouch *touch = [touches anyObject];
SKNode *node = [self nodeAtPoint:[touch locationInNode:self]];
if (currentTouch == nil && [node isEqual:self.testNode2])
{
currentTouch = touch;
}
}
-(void)touchesMoved:(NSSet*) touches withEvent:(UIEvent*) event
{
UITouch *touch = [touches anyObject];
if ([touch isEqual:currentTouch])
{
self.testNode2.position = [touch locationInNode:self];
}
}
-(void)touchesEnded:(NSSet*) touches withEvent:(UIEvent*) event
{
UITouch *touch = [touches anyObject];
if ([touch isEqual:currentTouch])
{
self.testNode2 = nil;
currentTouch = nil;
}
}