Ad

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のようなものと考えると良いでしょう。

ただし、この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編集が大きな端末が多くなっていくと予想されるので、いままでうまくいっていたアプリが突然落ちることもありえ、注意が必要です。

すでにリリースしたアプリに使っている場合は見直した方が良いでしょう。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 1683, today: 2, yesterday: 0
初版日時: 2018-06-28 (木) 13:31:25
最終更新: 2018-06-28 (木) 13:54:39 (JST) (2091d) by njf
MenuBar
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失

Portuguese | English | German | Greek | Japanese | Korean | Russian | T-Chinese top
NJF