706SCなどサムスン製端末でのバグ

706SCなどのサムスン製端末で頻繁にGraphics.setFontを呼び出すと、Exceptionをはかずにフリーズする事がある。ちなみに毎フレーム(15fps)に2回呼び出した場合にフリーズした。
ただ、頻繁に呼び出したからといって必ずフリーズする訳ではないみたい。

swfmillでFlashLite1.1動的生成

swfmillは、swfをxmlに変換したり、
変換したxmlからswfを生成したりするツール。
これを用いて、あらかじめswfをxmlに変換しておけば、
変数をいじったり、リソースを差し換えたりして、
swfを動的に生成する事ができる。


変数をいじるぐらいだったら自前のプログラムでも簡単だが、
リソース差し替えはちょっと面倒なのでありがたい。
ただしgifは使用できないので注意。


swfmillは、FlashLite1.1の文字コードcp932には対応していないけど、
http://dsas.blog.klab.org/archives/51174693.html
にパッチが公開されている。

S!アプリで画像の部分描画

JSCLで定義されている

GraphicsUtil#drawRegion(Graphics g, Image src, int x_src, int y_src, int width, int height, int transform, int x_dest, int y_dest, int anchor)

で画像の一部分を描画することができる。
ただし、vodafoneになってから以降に発売された機種の中には、
GraphicsUtilをサポートしてないものがある。


その場合、MIDP2.0で定義されている

Graphics#drawRegion(Image src, int x_src, int y_src, int width, int height, int transform, int x_dest, int y_dest, int anchor)

で代用可能。


ただしMIDP2.0のdrawRegionの場合、
vodafone時代に発売された一部の端末などでやたらと描画が遅いものがある。
なので機種によって、両方のdrawRegionを使い分ける必要がある。


GraphicsUtilのサポート状況は、
http://developers.softbankmobile.co.jp/dp/tool_dl/java/tech.php
の「端末情報 MIDP 2.0対応端末編」に書いてある。

S!アプリで半透明描画

iアプリでは901以上なら、

Graphics#getColorOfRGB(int r, int g, int b, int a)

で、アルファ値を設定して簡単に半透明描画できるけど、
S!アプリでは簡単には半透明描画できないので、
移植する際にはやっかい。


MIDP2.0には一応、Graphics#drawRGBというメソッドがあり、
アルファ値を設定して描画できるのだが、非対応の機種がほとんど。


3Dで半透明描画できるっぽいけど、
ヒープをかなり喰うらしい。(未確認)

S!アプリで同時に音を鳴らす

S!アプリで使用するサウンドのフォーマットは、SMAF形式(.mmf)。
SMAFには

  • midiを変換したもの
  • WAVEを変換したもの

の2種類がある。


ただSMAFは同時に2つの音を鳴らすことができない。
そこで使用するのがSMAF/Phrase形式(.spf)。

spfは同時発音数4音とかなり少ないので、
複数のファイルに分割して同時に再生することによって
音色数の多い曲を表現するのが一般的。
4トラックまで使用することができる。


MA5以上の音源なら、一つのファイルに複数の音色を設定して
自由に切り替えらる事ができるが、
MA3音源では、一つのファイルに4つまでしか音色を設定できない。
現在もMA3音源対応機種が普通に発売されているので、
MA3音源対応で作る方がよさそう。


spfmmf(WAVEベース)は同時に音を鳴らすことができるが、
spfmmf(MIDIベース)は鳴らすことができないので注意。