0

cocos2dxを使ってiOSゲームをAndroidに移植しています。このゲームのアイデアは、画像を変形し、リアルタイムで物理形状に変換することです。ゲームのロジックは、最初に CGContextDrawImage を使用してテクスチャから CGContext を作成し、次に次のようにさまざまなブレンド モードを使用してタッチ時にコンテキストを操作することです。

  CGContextSetBlendMode(context, kCGBlendModeMultiply);
  CGContextDrawImage(context, rect, texture);

その後、ダーティ ピクセルがテクスチャで更新されます。

  glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_ALPHA, GL_UNSIGNED_BYTE, dirtyPixels);

これは iOS では問題なく動作しますが、Android ではコア グラフィックスがないため動作しません (doh)。このコード プラットフォームを独立させる方法を探しています。2 つの画像のブレンドは非常に簡単なので、CGContextDrawImage を独自のコードと交換して、メモリ内のピクセルをブレンドすることを考えました。

ピクセルをブレンドするための独自のコードを実装すると、コア グラフィックスを使用するよりもはるかに遅くなるか (可能な限りあらゆる方法でブレンドを最適化したとしても)、方法を見つけて各プラットフォームのブレンドを個別に実装する必要があります (コア グラフィックスを使用) iOS と Android で利用可能なものは何でも)? または、より良い方法がありますか (GPU でブレンドをオフロードしようとしましたが、ピクセルを戻すための同期が遅すぎます)。

4

1 に答える 1

1

「可能な限りあらゆる方法でブレンディングを最適化」すれば、少なくとも Core Graphics と同じくらい高速になります。それは魔法ではありません。それはあなたが書いていない単なるコードです。ただし、これはおそらく非常に最適化されたコードであるため、作業が必要になります。

または、方法を見つけて、各プラットフォームのブレンディングを個別に実装する必要がありますか (iOS のコア グラフィックスと Android で利用可能なものを使用)。

それが私がすることです。難しい作業は Apple と Google にお任せください。

私は Android 開発者ではないので、具体的な提案や推奨を行うことはできませんが、この質問のコードを、Android で行う必要があることの大まかな概要として、または正確に行う必要があることを試すことができます。 2 番目の画像の不透明度を調整する必要がない場合は、これを行います。

于 2013-09-17T17:07:03.730 に答える