0

私はiPhoneアプリで作業していますが、私のアプリには画面の上から下に移動するオブジェクトがあります。これを行うには、CADisplayリンクを使用します。オブジェクトが画面を離れると、ルートを再開することになっています。私が直面している問題は、オブジェクトがルートを再開するたびに速度が上がることです。これは、オブジェクトが非常に速くなり、ほとんど見えなくなるまで続きます。なぜこれが起こっているのか、そしてそれを止める方法はありますか?助けていただければ幸いです。よろしくお願いします。

-(void)spawnButton{

int x = (arc4random() % (240) + 40;
int y = -100;

button1.center = CGPointMake(x,y);

displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(moveObject)];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];

}



-(void) moveObject {

int z = 1;


button1.center = CGPointMake(button1.center.x , button1.center.y +z);



if (button1.center.y >= 480) {

    [self spawnButton];

}
}
4

2 に答える 2

1

への呼び出しごとに新しい表示リンクを作成していますspawnButton。実行ループから古い表示リンクを削除するために何もしていない場合、古い表示リンクは引き続きmoveObject:メッセージを送信します。したがって、2 回呼び出した後はビデオ フレームごとspawnButtonに 2 つのメッセージを受け取りmoveObject:、3 回呼び出した後はmoveObject:ビデオ フレームごとに 3 つのメッセージを受け取ります。

于 2013-03-14T20:29:29.583 に答える
0

オブジェクトルートを再起動するたびに表示リンクを無効にすることで、問題を解決したようです。

if (button1.center.y >= 480) {

[self spawnButton];


[displaylink invalidate];

}
}
于 2013-03-14T20:24:50.280 に答える