2013-04-22 112 views
-1

我正在创建一个Cocos2D应用程序,该应用程序将具有4-12个用户可以与其交互/移动的精灵(图片中的精灵1 - 4)。将有相同数量的目标精灵,用户将能够拖动其他精灵(图中的目标1 - 4)。我正在考虑为所有的精灵添加标签来区分它们。我遇到的困难是确定跟踪可移动的精灵的正确方法,以及他们每个人所处的目标精灵的位置。保持跟踪精灵

我应该如何跟踪这些关系?

  • 精灵1 - 目标3
  • 雪碧2 - 目标1
  • 精灵3 - 目标2
  • 雪碧4 - 目标4

Sprites and Targets

+0

是那些关系静态的(即sprite1总是引用target3)还是动态的? – LearnCocos2D 2013-04-22 21:24:45

+0

动态。用户将希望能够将精灵移动到“正确”的目标,但他们可能会把他们放在“错误”的目标。 – 2013-04-22 21:30:41

回答

0

创建两个不同isntance可变数组来保存你的对象和一个数组来保存你的正确答案,例如

//In your .h 
NSMutableArray *_targets; 
NSMutableArray *_moveableSprites; 
NSArray *_answers; 

//In your .m 
_targets = [[NSMutableArray alloc] init]; 
_moveableSprites = [[NSMutableArray alloc] init]; 
_answers = [[NSArray alloc] initWithObjects:@"101", @"103", @"102", @"104", nil]; 

当你创建你的精灵分配标签值给他们即

CCSprite *target1 = [CCSprite spriteWithFile:@"file.png"]; 
//Make sure target tags start from 0 and increment up 
target1.tag = 0; 

你每个精灵添加到您的层,然后才将其添加到相应的阵列,即

[_targets addObject:target1]; 

你可以然后写一个方法来检查精灵位置(类似于此):

- (void)checkSprites { 
    for(CCSprite *sprite in _moveableSprites) { 
     for(CCSprite *target in _targets) { 
      if(CGRectIntersectsRect(sprite.boundingBox, target.boundingBox)) { 
       if(sprite.tag == [_answers objectAtIndex:target.tag]) { 
        // Correct sprite in target.....do stuff 
       } else { 
        // Not correct sprite.....do stuff 
       } 
      } 
     } 
    } 
} 
+0

感谢您的答案布兰登。我需要弄清楚的唯一棘手的事情是,_answers与_targets无关。我的意思是,只要可移动的精灵处于“正确”的顺序,他们所处的目标是什么并不重要。所以我需要一种方法来比较可移动精灵的顺序与“正确”的顺序。 – 2013-04-22 22:35:23

+0

我有点困惑,你的意思是他们的顺序是什么? – 2013-04-22 22:37:56

+0

假设4个精灵有标签“A”,“B”,“C”,“D”。如果用户将精灵(按照该精确顺序)拖拽到4个目标中,则它们“获胜”。他们可以将“A”拖入目标3(并继续顺时针)将“B”拖入目标4,将“C”拖入目标1,将“D”拖入目标2中。因此,只要将_moveableSprites放置在右侧顺序(顺时针),他们会赢。这对你有意义吗? – 2013-04-22 22:51:03