2009/11/11 13:33

Web

  

Windows対Mac ~AIR・ウィンドウサイズ処理対決~

対決っていうのは少々大げさですが、ちょっと問題が起きました。

AIRの素晴らしい点の一つに、OSの垣根を無視出来るという点があると思います。
Javaもそうですが、仮想○○やらなんちゃら(適当)、とにかく仮想マシン上で動かすことによって、OSの違いを克服出来るという点です。

ただ、言ってもOSの違いっていうのはやはり大きな違いで、AIRだけでは消化しきれず、必然的にプログラム内で分岐させて処理する個所も必要になります。

…ただ、今回はそういった内容ではありません。

Windowsで作っていたプログラムが、Macにインストールしたら大幅にレイアウトが崩れてしまったのです。
原因は、アプリケーション用のウィンドウの最大化。

常に画面全体を使用するアプリを作成したかったので、まずコンストラクタでウィンドウを新規に作成して、かつ最大化させます。そして、そこにデザインなどをインスタンス化して、デザインは自身がステージにaddChild()されたら、ウィンドウサイズを基に、自らの配置を決めると…
そういうプログラムでした。
必然的に、仮にウィンドウが最大化していなかったら、そもそものAIRに読み込まれているswfのサイズが基になっているので、とても小さい画面に配置されてしまうことになります。

Windowsでは、全ての作業をコンストラクタ内に収めても問題なかったのですが、Macではだめだったみたい。
デザインが、非常に小さい範囲に収まっている…つまり、ウィンドウの最大化されたサイズが反映される前にデザインがaddChild()されてしまった。ということになります。

もちろん、プログラム上は同じコンストラクタ内でもきちんと順番に書かれているので、ウィンドウの最大化が即座に反応していれば問題ないはずなんですが、どうやら、Macはそこに多少時間がかかってしまっているということになります。

試しに、タイマーをコンストラクタに設置して、デザインのインスタンス化と配置を一秒後にしたら、Macでも意図した通りのデザインになりました。
つまり、ウィンドウの最大化が済んでから配置されたと判断出来ます。

…う~む。
まぁどちらの処理が凄いのかというのは、単純には判断できないですよね。
内容だけなら、Windowsの方が意図した通りに動いていると言えますが、ひょっとしたら、最大化が済んでから残りのプログラムを実行しているからかもしれないし、そう考えると、Macの方が並列的に同時進行でプログラムを実行していると考えられるし。

まぁ、とりあえず意図した通りにはWindowsなので、この点ではWindowsの勝利。
もし、Macでウィンドウ絡みでレイアウトの崩れが起きた場合、ちょっとこの点を把握していると問題の解決に繋がるかもしれません。

TrackBack :

Comments






使用可能タグ: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>