12 月 21 2008
PV3Dでレースゲーム制作 23 - UI作成
» ゲームをプレイする (要:Flash Player 9.0.124.0以降)
ナビゲーションを追加してみました。レースゲームらしくなってきたでしょうか?
Flash CS3でUIを作成
実は結構どうしようか迷ってたのがUIの作り方。
生産性を上げるために、3Dとか画像のファイルはすべて外部化、Flash CS3 は使わず FlashDevelop と Flex で開発…ってしてきたんだけど、ナビゲーション系はどう考えても Flash で作った方がやりやすい。。
調べてもどうしたらいいのかピンとこなかったので適当にやってみました。
それで結局、「UI専用のSWFをメインSWFに読み込んで、そのインスタンスからムービークリップを取り出して配置」という流れに。
外部SWFのライブラリにあるムービークリップへ、アクセス
UI用Flashファイルのドキュメントクラスで、ライブラリにあるムービークリップを一度インスタンス化して、それをゲッターで返すようにしておきます。その状態でSWFファイルにパブリッシュ!
一方メイン側では、UI用SWFを Object 型インスタンスとして読み込むと、「(インスタンス名).(ゲッター名)」でライブラリにあるムービークリップにアクセスできるわけです。分かりにくッ!
***
ええと、具体的には。
たとえばFlash CS3上にこんな感じの「map」っていうクラス名のムービークリップがあったとします。

ドキュメントクラスでは「インスタンス化 → ゲッター」で外部からこのムービークリップを参照できるようにしておきます。
package
{
import flash.display.*;
public class UI extends Sprite
{
private var _mapMC:MovieClip
public function UI()
{
_mapMC = new map();
}
public function get mapMC():MovieClip
{
return _mapMC;
}
}
}
そして今まで作ってたメインの方からは、_loader にSWFを読み込んだとして
var _ui:Object = Object(_loader.content); var _mapMC:MovieClip = _ui.mapMC; addChild(_mapMC);
という風にアクセスできました。
Loader.content で子SWFのルートにアクセスできるけど、ここではステージに配置せずにゲッターを使っているわけです。
さらに、先ほどのムービークリップに配置されていたマルポチが実は「myPoint」という名前のインスタンスだったとすると、
_mapMC.myPoint.x = 100;
のように階層化されたムービークリップも操作できます。
こうしておけば、UIを増やしたりデザインを修正するときはFlashのライブラリをいじってパブリッシュし直すだけ、制御系は今までどおりFlashDevelopからFlexコンパイルするだけ、とまあ、作業が別々になってわたし的には扱いやすくなってくれました、と。
(もっといい方法もあるのかなぁ。)

プロジェクトこっそり応援してますよ~
Flashだからなのでしょうか・・・自分のロースペPCでは画質落とさないと重かったです;
すっげえー!
久々に感動したww
あとはドリフトなんかのゲーム的なやり込み要素があれば
いうことないですね~
[...] 脳の中の風船 | PV3Dでレースゲーム制作 23 - UI作成 もう十分形になってる… (tags: programming actionscript flex papervision3d) [...]
挙動をリアルにすれば操作次第で自然にドリフトするはず。
リアル志向で作っているとすれば挙動面ではまだまだ完成度は低いですね。
視覚面ではFDのリアウイング、ドアミラーがモデリングされていないのがちょっと気になりました・・・。
みなさんコメントありがとうございます!
作り込むべき要素が分かりやすくなってきたのは良いことなんですが、
要素を追加するたびにジワリジワリと負荷が増えてきてるのが
今の悩みですね~。
またブレイクスルーが必要そうだ。。
ちなみに次はサウンドを実装する予定です。