0

コードをARCに変換する必要がありました。パスを描画するために使用するCCArrayがあります。別のクラスのCCArray値のオブジェクトを入力します。

問題はARCに変換した後、CCArrayは常にnull

自分が間違っていることがわかりません。

てんとう虫.h

@interface Ladybug : CCSprite <CCTargetedTouchDelegate>{

    CCArray *linePathPosition;
}
@property (nonatomic, strong) CCArray *linePathPosition;

@end

Ladybug.m

@synthesize linePathPosition;

-(id) init
{
    if( (self=[super init] )) {
        self.linePathPosition = [[CCArray alloc] init];

    }
    return self;
}
-(void) updatePosition:(CGPoint) position
{
    [self.linePathPosition addObject:[NSValue valueWithCGPoint:position]];
    NSLog(@"line path %@",linePathPosition);
}
-(void) breakMoveLadyBug
{
    [self.linePathPosition removeAllObjects];
}

メインで.m

- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
    Ladybug *ladybug1 = (Ladybug *)[self getChildByTag:99];
    CCMotionStreak* streak = (CCMotionStreak *)[self getChildByTag:999];
    CGPoint touchLocation = [touch locationInView: [touch view]];
    CGPoint curPosition = [[CCDirector sharedDirector] convertToGL:touchLocation];

    if (ladybug1.isSelected) {

        streak.position = curPosition;
        [ladybug1 updatePosition:curPosition];
                NSLog(@"Cur position %@",NSStringFromCGPoint(curPosition));

        if (!ladybug1.isMoving) {

            [ladybug1 startMoveLadyBug];
        }
    }
}

ログ:

 Cur position {331, 110}
 line path (null)

私は何が間違っているのですか?ARCでCCArrayを定義して初期化する適切な方法は何ですか?

4

1 に答える 1

0

これは、ARCまたはCCArrayの問題ではありません。問題は、Objective-cの理解にあります。

あなたの問題を解決するために、あなたがこの行をしているところはどこでも[self addChild:ladybug1 z:999 tag:99]。代わりにこれを行ってください:

Ladybug *ladybug1 = [[Ladybug alloc] init];
[self addChild:ladybug1 z:0 tag:99];

注:これはccTouchMoved、てんとう虫オブジェクトをシーン/レイヤーに追加する一部の関数で、関数の外部で実行されます。

次に、ccTouchMoved関数には、操作するてんとう虫オブジェクトが割り当てられます。

問題は、てんとう虫オブジェクトでinit関数を呼び出さないと、CCArrayが割り当てられないため、すべてがnullになることです。次に、null配列にポイントを追加しようとしますが、それでは何も起こりません。あなたはあなたが望むすべてのこのタグのことをすることができます(私はあなたがそれをしている理由を個人的に知りません)が、てんとう虫オブジェクトのタグを指定する必要があります。したがって、それをCCLayer / CCScene(使用しているw / e)に追加し、そのタグを設定します。その後、関数を使用できますgetChildByTag

于 2012-11-21T21:54:50.693 に答える