1: 2018-06-28 (木) 13:31:25 njf[5] [6] [7] | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | StarlingのRenderTextureはStarlingの描画オブジェクトを書き込めるテクスチャを作成するクラスです。 | ||
+ | mainRenderTexture = new RenderTexture(200, 200); | ||
+ | |||
+ | mainRenderTexture.draw(image); //StarlingのImageオブジェクトなどを書き込める。 | ||
+ | |||
+ | var mainImage:Image = new Image(mainRenderTexture);//Textureとして使える | ||
+ | |||
+ | 例えばゲームで背景をマップチップ画像から作りたいとき、StarlingのImageで製作してしまうと、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を作成します。 | ||
+ | これが縮尺にもかかわらずデフォルト値が-1となっています。これは-1を指定すると、「Starling.contentScaleFactor」を使うことになります。ちなみにこの事実は公式ドキュメントにも見あたらず、ソースを見ないとわかりません。また、Textureにも同じscale変数がありますが、デフォルトは1になっています。 | ||
+ | |||
+ | するとwidthなどに大きな値を入れると、Textureのサイズ制限(通常2048x2048)に引っかかって以下のようなランタイムエラーが発生します。 | ||
+ | |||
+ | ArgumentError: Error #3683 | ||
+ | |||
+ | Starling.contentScaleFactorは端末によって異なります。 | ||
+ | |||
+ | たまたまこれが大きな端末をテスト用に所持していないと、テスト時には気付かないエラーとなり、リリース後に問題が発覚することになります。 | ||
+ | |||
+ | 対応が非常に面倒なエラーとなるので、RenderTextureを使う時は第四引数のscaleに必ず値を入れるようにしましょう。 |
(This host) = https://njf.jp