ページへ戻る
+ Links
印刷
Starling/RenderTextureの落とし穴
の編集 ::
NJF Wiki
xpwiki
:
Starling
/
RenderTextureの落とし穴
の編集
Starling/RenderTextureの落とし穴 の編集
詳細な入力項目を表示
ページタイトル
( 空白で自動設定 )
:
ページ並び順
( 0-9 小数可 標準:1 )
:
ページ別名
(複数は[
改行
]で区切る)
:
ページ内容:
StarlingのRenderTextureはStarlingの描画オブジェクトを書き込めるテクスチャを作成するクラスです。 mainRenderTexture = new RenderTexture(200, 200); mainRenderTexture.draw(image); //StarlingのImageオブジェクトなどを書き込める。 var mainImage:Image = new Image(mainRenderTexture);//Textureとして使える 例えばゲームで背景をマップチップ画像から作りたいとき、StarlingのImageで製作してしまうとオブジェクトが大量にできてしまい、負荷が大きくなってしまいます。 そんなときにRenderTextureを使うと、一枚の画像扱いになるので負荷が大幅に減らせます。 つまり、AS3のBitmapdataのようなものと考えると良いでしょう。 &font(Red){ただし、このRenderTextureはわかりにくいバグの原因になることがあります。}; RenderTextureのコンストラクタの定義は以下の通りです。 RenderTexture(width:int, height:int, persistent:Boolean = true, scale:Number = -1, format:String = bgra) 第四引数にscaleがあり、これを指定すると内部ではwidthとheightをscale倍したTextureを作成します(外部からアクセスするときにはscaleの違いを意識する必要はありません)。 これが縮尺にもかかわらずデフォルト値が-1となっています。これは-1を指定すると、「Starling.contentScaleFactor」を使うフラグの役目をすることになります。ちなみにこの事実は公式ドキュメントにも見あたらず、ソースを見ないとわかりません。 するとwidthなどに大きな値を入れると、Textureのサイズ制限(通常2048x2048)に引っかかる場合があります。例えばheightを1300とかにしていて、Starling.contentScaleFactorが2なら2x1300=2600となり、2048を超えてしまうのです。すると以下のようなランタイムエラーが発生します。 ArgumentError: Error #3683 Starling.contentScaleFactorは端末によって異なります。 たまたまこれが大きな端末をテスト用に所持していないと、テスト時には気付かないエラーとなり、リリース後に問題が発覚することになります。そして、発覚しても手持ちのデバイスでは再現できないので、どうしようもない、ということになります。 私はこのデバッグのために怪しい場所にtry文を入れて、catchでエラーメッセージをサーバーに送るようにしました。つまりデバッグ用に新たにサーバーを立てることになりました。そしてエラーメッセージが一つ送られ、原因が分かるとそのサーバーは役目を終えました。 対応が非常に面倒なエラーとなるので、RenderTextureを使う時は第四引数のscaleにテクスチャのサイズを意識した値を必ず入れるようにしましょう。 今後Starling.contentScaleFactorが大きな端末が多くなっていくと予想されるので、いままでうまくいっていたアプリが突然落ちることもありえ、注意が必要です。 すでにリリースしたアプリに使っている場合は見直した方が良いでしょう。
編集の要約:
Q & A 認証:
ページ更新時は次の質問にお答えください。(プレビュー時は必要ありません)
Q:
日本の首都は?(漢字で)
A:
お名前:
タイムスタンプを変更しない
テキスト整形のルールを表示する
添付ファイル
: