2013-10-07 70 views
0

我有以下几点:什么是增加现有精灵的最佳途径孩子精灵的

  1. 称为“_background”
  2. 3×精灵“C4”,D5" 和‘HJ’的
  3. 后台精灵

这三个精灵分别添加到背景上,然后双击它,想让它们同时拖动到屏幕上的另一个位置,同时它们保持相同的顺序,

我已完成了近,上班的唯一方法是使用下面的代码:

- (void)tap2TouchesGesture:(UITapGestureRecognizer *)sender { 
SKNode *removeNode = [_background childNodeWithName:@"C4"]; 
CGPoint aPos = removeNode.position; 
[removeNode removeFromParent]; 


SKSpriteNode *topNode = [SKSpriteNode spriteNodeWithImageNamed:@"C4"]; 
topNode.position = aPos; 
topNode.zPosition = 100; 
topNode.name = @"C4"; 
[_background addChild:topNode]; 

removeNode = [_background childNodeWithName:@"D5"]; 
[removeNode removeFromParent]; 


SKSpriteNode *vv = [SKSpriteNode spriteNodeWithImageNamed:@"D5"]; 
vv.position = CGPointMake(-10, -10); 
vv.zPosition = -10; 
vv.userInteractionEnabled = NO; // just testing 
vv.name = @"D5"; 
[topNode addChild:vv]; 

removeNode = [_background childNodeWithName:@"Hj"]; 
[removeNode removeFromParent]; 
vv = [SKSpriteNode spriteNodeWithImageNamed:@"Hj"]; 
vv.position = CGPointMake(-20, -20); 
vv.zPosition = -50; 
vv.userInteractionEnabled = NO; // just testing 
vv.name = @"Hj"; 
[topNode addChild:vv]; 
} 

处理上面的代码,我可以移动精灵的包,但目前的问题之后是父,C4,做似乎不是最重要的。选择C4的唯一方法是点击任何其他精灵之外的部分,不包括_background。

我想这不是执行此操作的最佳方法,所以我想请教如何正确执行此操作的一些帮助。另外,所以我可以通过点击整个精灵来选择C4。

回答

0

你的意思是你想能够同时拖动所有三个精灵同步,他们相对于彼此的位置总是保持不变?

我总是在这种情况下说。如果你想让多个精灵(或者任何节点)一起做些事情,那么:添加一个SKNode,将所有三个精灵放入它中,拖动节点。巴姆,超级简单!

+0

我知道,但我不想使用Cocos2D,因为我使用并学习SpriteKit,然后将它转换为KoboldKit。 – PeterK

+0

抱歉,我打算说SKNode不是CCNode。无论原理是否相同。 – LearnCocos2D

+0

我知道,你以前给我的答案,但我不能让它正常工作,添加一个SKNode容器。你能以正确的方式让我看看代码吗? – PeterK

0

我现在得到它的工作,我做了一个非常简单的错误,因为我试图移动选定的节点,而不是topNode(容器)。不可思议的是,我应该看到的是,尤其是斯蒂芬斯建议后:-(

感谢斯特芬&本·施塔尔@苹果SpriteKit论坛:-)

然而,这里是我用这个例子来工作的代码:

- (void)tap2TouchesGesture:(UITapGestureRecognizer *)sender { 

_topNode = [SKNode node]; 
[_background addChild:_topNode]; 


SKSpriteNode *vv = [SKSpriteNode spriteNodeWithImageNamed:@"C4"]; 
[_topNode addChild:vv]; 

vv = [SKSpriteNode spriteNodeWithImageNamed:@"D5"]; 
[_topNode addChild:vv]; 

vv = [SKSpriteNode spriteNodeWithImageNamed:@"Hj"]; 
[_topNode addChild:vv]; 

_isThePackSelectedForAction = YES; // sprites are selected 

} 


- (void)handlePan:(UIPanGestureRecognizer *)sender { 

_currentTouchLocationGlobal = [sender locationInView:sender.view]; 
_currentTouchLocationGlobal = [self convertPointFromView:_currentTouchLocationGlobal]; 


if (_isThePackSelectedForAction) { 
    _topNode.position = CGPointMake(_currentTouchLocationGlobal.x, _currentTouchLocationGlobal.y); 
} else { 
    _currentNode.position = CGPointMake(_currentTouchLocationGlobal.x, _currentTouchLocationGlobal.y); 
} 
}