0

ARCで動作するように、マスターブランチにいます。

ユーザーがスプライトに触れると、スプライトが 1.1 倍にスケーリングされるメソッドを実装しました。複数のタッチは、互いの上に構築された複数のスケーリング アクションをキューに入れます。ときどき、スプライトの小さいバージョンがスケーリングされたバージョンの上に表示される奇妙なアーティファクトが表示されます。

スクリーンショットは次のとおりです。ここに画像の説明を入力

背景の詳細​​: テクスチャ アトラスを使用しているので、以下を使用します。

    sprite = [super spriteWithSpriteFrameName:anObject.filename];

スプライトを初期化します。これは openGL/cocos2d のバグですか? このアーティファクトを停止する方法について何かアドバイスはありますか?

編集: CCSprite をサブクラス化していますが、スプライトのインスタンスが 1 つしかないことがわかります (super の呼び出しはクラス メソッドで行われました)。基本的に、ユーザーはスプライトが実行するアクションのリストを定義します。アクション リストは、以下を使用して中断することもできます。

[self stopAllActions]

CCMoveBy と CCRotateBy のサブクラスを使用して問題なくアクションを実行しました。このアーティファクトを引き起こしているのは、CCScaleBy の最新のサブクラスだけです。これらのアクションのサブクラスでは、アクション内で何も変更せず、中断後にアクションを適切に再開できるように特定の変数を追跡するだけです。

4

1 に答える 1

1

おそらく CCSprite をサブクラス化していますか? サブクラスに CCSprite インスタンス変数も追加しましたか?

その場合、2 つのスプライトが表示されます。スーパークラスのスプライトとインスタンス変数のスプライト。他のスプライトが時々しか表示されない場合、これはスプライトを子として追加する順序、または zOrder プロパティに依存する可能性があります。

于 2012-08-24T12:02:17.963 に答える