2

私は、画面の何倍も大きいキャンバスを使用したさらに別の描画アプリに取り組んでいます。その方法についてアドバイス/指示が必要です。

基本的に私が欲しいのは、この大きなキャンバスをスクロールして、表示されている領域にのみ描画することです。私は2つのアプローチを考えていました:

  1. 64x64(またはその他)の「タイル」を描画してから、スクロールして新しいタイルをロードします。
  2. すべてのユーザーストローク(ポイント)を記録し、スクロール時に指定された領域にあるものを計算し、画面サイズのキャンバスのみを使用してそれらを描画します。

これが重要な場合は、プロトタイプにcocos2dを使用しています。

4

4 に答える 4

5

2000x200の制限を忘れて、18000 x18000NASA画像を描画するオープンソースプロジェクトがあります。

このタスクを2つの部分に分割することをお勧めします。まず、スクロールします。CodaFiによって提案されたように、スクロールするとCATiledLayersが提供されます。それらのそれぞれは、あなたが作成するCGImageRefになります-あなたの本当に巨大なキャンバスのサブ画像です。その後、ズームインとズームアウトを簡単にサポートできます。

2番目の部分は、ユーザーと対話して、キャンバスを描画またはその他の方法で影響を与えることです。ユーザーがスクロールを停止したら、不透明なUIViewサブクラスを作成します。これをサブビューとしてメインビューに追加し、CATiledLayersをホストしているビューをオーバーレイします。このビューを表示する必要があるときに、適切な情報を入力して、大きなキャンバスのその部分を適切に描画できるようにします(たとえば、この時点での円やそのような色など)。

このオーバーレイビューのdrawRect:メソッドを使用して描画を行います。したがって、ユーザーがビューを変更するアクションを実行すると、必要に応じて「setDisplayInRect:」を実行して、iOSにdrawRect:を呼び出させます。

ユーザーがスクロールすることを決定したら、ユーザーが行った変更で大きなキャンバスモデルを更新してから、不透明なオーバーレイを削除し、CATiledLayersに大きな画像の適切な部分を描画させる必要があります。この移行は、視覚的な不具合を回避するためのプロセスの中でおそらく最も難しい部分です。

キャンバスに使用されるオブジェクト定義の配列が多数あるとします。タイルのCGImageRefを作成する必要がある場合は、タイルをスキャンしてオブジェクトのフレームとタイルのフレームの重なりを探し、そのタイルに必要なアイテムを描画します。

于 2012-07-15T15:20:46.417 に答える
2

多くのモバイルデバイスは、2048x2048を超えるテクスチャをサポートしていません。だから私はお勧めします:

  • 大きな2048x2048のタイルで大きな表面を作ります
  • 現在表示されているタイルの表示部分のみを画面に描画します
  • ユーザーが4つのタイルの隅までスクロールした場合は、フレームごとに最大4つのタイルを描画する必要がありますが、表示されるタイルが1つしかない場合は、余分なものを描画しないようにしてください。

これはおそらく最も効率的な方法です。64x64タイルは実際には小さすぎ、「タイルの描画」呼び出しに大きな繰り返しオーバーヘッドが発生するため、非効率になります。

于 2012-07-12T11:31:24.260 に答える
1

Apples ScrollViewSuiteにはタイリングの例がありますが、描画部分とは何の関係もありませんが、タイル部分を管理する方法についていくつかのアイデアが得られる可能性があります。

于 2012-07-09T19:06:10.993 に答える
1

CATiledLayerを使用できます。WWDC2010セッション104を参照してください

しかし、cocos2dの場合は機能しない可能性があります。

于 2012-07-13T06:00:01.593 に答える