1

私のプロジェクトでは、10 個のスプライトがあり、それぞれに一意の userData 値があります。ccTouch メソッドの実行中に、スプライトを新しいスプライトにコピーしています。

しかし、スプライトのユーザーデータ値を取得できません。

私のコーディングは

 for (int i=1; i<=10; i++)
      {
       CCSprite *zig=[CCSprite spriteWithFile:[NSString stringWithFormat:@"zig%d.png",i]];
        zig.position=ccp(325,60);
        zig.tag=i+1;
        zig.userData=[NSString stringWithFormat:@"%@",[zigpositionarray objectAtIndex:i-1]];
        [self addChild:zig z:2];
       [zigblurarray addObject:zig];
            NSLog(@"Userdata%@",zig.userData);
      }

cctouchBegan メソッドの場合:

  for(CCSprite *s in zigblurarray)
  { 
   if (CGRectContainsPoint(s.boundingBox, Newpt1))
   {
       temp=s;
       temp.userData=s.userData;
       NSLog(@"%d",temp.tag);
        NSLog(@"Userdata%@",temp.userData);
    }

最後に、lldb エラーが発生しています

0x170409b: movl 8(%edx), %edi EXC_BAD_ACCESS

この問題について誰か助けてください。

4

2 に答える 2

1

文字列は自動解放されます。プロパティは void* 型であり、userDataオブジェクトを保持しません。代わりにプロパティを使用するuserObjectか (cocos2d バージョンで使用可能な場合)、文字列を保持します。

于 2013-04-20T09:10:36.110 に答える
0

あるオブジェクトを別の変数に割り当てても、それはコピーされません。オブジェクトは、オブジェクトへのポインターとして表されるだけであることを忘れないでください。

temp=s;

tempも指しsます。 それらは同じオブジェクトでt.userDataあるため、すでに存在します。s.userData

試す

temp = [s copy]; 
于 2013-04-20T09:04:21.660 に答える