【cocos2dx】CCArray(配列)のオブジェクトを取り出す方法

【cocos2dx】CCArray(配列)のオブジェクトを取り出す方法
   

cocos2dxで、配列を利用する際にはCCArrayクラスを利用します。
今回は、この配列(CCArray)から、オブジェクトを取り出す方法を紹介します。

for文

オブジェクトを配列から取り出す際には、for文を利用します。
コードは以下のようになります。


   CCArray *array = CCArray::create();

   for(int i = 0; i < array->count(); i++){

      CCObject *obj  = array->objectAtIndex(i);
      
      CCSprite *sprite = (CCSprite*)obj;
        
      


   }


CCArrayは、CCObjectクラスとして、オブジェクトを取り出すことができません。
その後に、必要とするクラスに変えて利用する必要があります。

便利なマクロ関数

cocos2dxでは、このfor文を利用する時に、便利なマクロ関数が定義されています。
CCARRAY_FOREACH()です。

コードは以下のようになります。


  CCObject *obj = NULL;
  CCARRAY_FOREACH(array,obj){
  
      CCSprite *sprite = (CCSprite*)obj;




  }



オブジェクトを、配列に格納された順番とは逆に取り出す

CCArrayクラスは配列です。
先ほどの記述したfor文は、配列に格納された順番のオブジェクトを取り出しています。
この順番を逆から取り出せることができます。

cocos2dxでは、この場合にも便利なマクロ関数があります。
CCARRAY_FOREACH_REVERSE()です。


  CCObject *obj = NULL;
  CCARRAY_FOREACH_REVERSE(array,obj){
  
      CCSprite *sprite = (CCSprite*)obj;




  }


逆から取り出す必要のある場面

これは、前回のエントリーにも通じているのですが、配列のfor文の中で、オブジェクトを削除する処理を行う際には、CCARRAY_FOREACH_REVERSE()を利用する必要があります。
通常のように、CCARRAY_FOREACH()を利用すると、オブジェクトが削除された瞬間に、配列の順番が変わってしまうので、正しくオブジェクトを取り出すことができないからです。

0801


このような不具合を防ぐためにも、配列を逆から取り出すという手段が必要となるのです。
個人的にもかなりハマったしまったことなので、配列のオブジェクトを削除する際には気をつけてください。


Related Posts Plugin for WordPress, Blogger...