Ios 拖动1个与手指移动相关的精灵节点?
我已经创建了一个名为的节点,并且当它触摸并拖动该节点时,我已经命令它从屏幕上拖动。出于某种原因,这个方法(下面的代码)允许我拖动屏幕上的任何节点。如何仅使“testNode2”生效 我也希望节点拖动到手指的移动,但是如果手指在屏幕上的任何地方被触摸,而不仅仅是当节点本身被触摸时,这可以工作吗?(但不要跳到手指的位置,只需移动与手指移动相关的部分)。例如,如果屏幕被按到任何位置,然后向左拖动100像素,则节点将向左移动100像素 我的代码在下面Ios 拖动1个与手指移动相关的精灵节点?,ios,xcode,xcode5,sprite-kit,Ios,Xcode,Xcode5,Sprite Kit,我已经创建了一个名为的节点,并且当它触摸并拖动该节点时,我已经命令它从屏幕上拖动。出于某种原因,这个方法(下面的代码)允许我拖动屏幕上的任何节点。如何仅使“testNode2”生效 我也希望节点拖动到手指的移动,但是如果手指在屏幕上的任何地方被触摸,而不仅仅是当节点本身被触摸时,这可以工作吗?(但不要跳到手指的位置,只需移动与手指移动相关的部分)。例如,如果屏幕被按到任何位置,然后向左拖动100像素,则节点将向左移动100像素 我的代码在下面 -(void) colourSprite2:(CGS
-(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; }
touch delegate返回一个包含多个UITouch对象的触摸
NSSet
,每个UITouch对象对应于与实现委托方法的对象相关的触摸
在您的情况下,节点将自身移动到代理遇到的任何触摸的位置。这包括在屏幕上进行多次触摸
你应该阅读有关课程的内容
问题的解决方案是跟踪用于移动节点的特定触摸
将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;
}
}
谢谢你的回复…我已经试过了,它仍然在做同样的事情…所有的节点在被触摸时都在移动?你说的是“所有的节点”吗?从您发布的代码来看,似乎您只想移动一个节点。我只想移动一个节点,但它会移动我选择的任何节点?这对我的任何问题都不起作用,我错过了什么吗?