[ CATEGORY ] FLASH…

http://www.dango-itimi.com/blog/archives/flash/

FLASH tips 子をn個持つ親クラスのコンストラクタには引数は指定しない

ようやっと初めての AS3 の業務に取り掛かっています。今までなんだかんだの制約があり AS3 でまともな業務を行なったことはありませんでした。早速 AS3 で気付いた点を以下に記述します。恐らくとっても何をいまさらなエントリーです。


親クラスのコンストラクタに引数が指定してある場合、子クラスでは明示的に super メソッドを呼び出す必要がでてくるようです。
例えば以下のような Person クラスを親に持つ Boy クラスと Girl クラスを Sample クラスから利用するには以下のようになります。

※package記述は略

public class Person{
	private var name:String;
	public function Person(name:String){
		this.name = name;
	}
}
public class Boy extends Person{
	public function Boy(name:String){
		super(name);
	}
}
public class Girl extends Person{
	public function Girl(name:String){
		super(name);
	}
}
public class Sample{
	public function Sample(){
		var boy:Boy = new Boy("boy");
		var girl:Girl = new Girl("girl");
	}
}

ここで Person クラスを親に持つクラスが Boyクラス、Girl クラス以外に複数増える場合、それら複数のクラス全てに明示的なコンストラクタの実装と super メソッドの呼び出しを行なう記述が必要になってしまいます。また、Person コンストラクタに引数を追加したいという場合、子クラス全てのコンストラクタと super メソッド呼び出しの箇所に修正を入れる必要がでてきてしまいます。

これを避けるためには、Personクラスのコンストラクタに引数を指定するのはやめ、別メソッドで同処理を行なうようにします。

public class Person{
	private var name:String;
	public function create(name:String):void{
		this.name = name;
	}
}
public class Boy extends Person{
}
public class Girl extends Person{
}
public class Sample{
	public function Sample(){
		var boy:Boy = new Boy();
		var girl:Girl = new Girl();
		boy.create("boy");
		girl.create("girl");
	}
}

[ FLASH ] [ tips ] 2008年08月12日 20:33 | コメント (0) | トラックバック

FLASH tips update 透視投影 再々勉強

業務に必要になりそうなので再度透視投影について勉強。最近丁度 Flashによる透視投影方法について詳しく解説してある記事があったので参考にさせてもらいました。

 ■てっく煮ブログ
 AS3.0 で 3D プログラミングを1から勉強する (1)
 AS3.0 で 3D プログラミングを1から勉強する (2) - 行列の導入
 AS3.0 で 3D プログラミングを1から勉強する (3) - 透視投影

なんともシンプルな式と方法で透視投影ができてしまうようで、今まで私が知っていた方法はなんだったのと言わんとぞばかりです。

試しとして以前作成したローグライクマップ自動生成処理と組み合わせてみました。

▽続きを読む

[ FLASH ] [ tips ] [ update ] 2008年07月09日 10:31 | コメント (4) | トラックバック

FLASH tips Action Script 2.0 三項演算子内 getter 使用のコンパイルエラー

Action Script 2.0 三項演算子内で getter を使用する場合、代入対象の値を全て getter にするとコンパイルエラーが発生します。

以下のような Sampleクラスがあるとします。

class Sample{

	private var num1:Number = 1;
	private var num2:Number = 1;
	public function get _num1():Number{ return num1; }
	public function get _num2():Number{ return num2; }
}


ここで、以下の Test クラスのような三項演算子での Sample クラスの getter の利用は問題はありません。

class Test{

	public function Test(flg:Boolean){

		var sample:Sample = new Sample();

		var num1:Number = flg ? 1 : 2;
		var num2:Number = flg ? sample._num1 : 2;
		var num3:Number = flg ? 1 : sample._num2;
	}
}


しかし以下の用な記述を行うと、コンパイルエラーが発生します。

class Test{

	public function Test(flg:Boolean){

		var sample:Sample = new Sample();

		//コンパイルエラー発生
		var num:Number = flg ? sample._num1 : sample._num2;
	}
}
■エラー内容

代入ステートメントが一致しません。Function が見つかりましたが、Numberが必要です。

getter の sample._num1 と sample1._num2 がNumber型ではなく Function型として評価されてしまうようです。

上記エラーを避け、なおかつ三項演算子を使用したい場合は、キャストを用いて型変換を行えばよいようです。

class Test{

	public function Test(flg:Boolean){

		var sample:Sample = new Sample();

		//コンパイルエラーは発生せず
		var num:Number = flg ? Number(sample._num1) : Number(sample._num2);
	}
}

[ FLASH ] [ tips ] 2008年05月14日 20:27 | コメント (0) | トラックバック

ETC FLASH info tips 雑記といくつかメモ

山にこもって二ヶ月ほど経過しましたが、現在取り組んでいる仕事がなかなか終わりません。中途 細かい仕事がいくつか入り、頭がいい具合に煮詰まっております。

以下、業務を通していくつか覚えた事を参考サイトと共にメモ。


【 Subversion 上の html ファイルのブラウザ表示設定 】

Subversion 上の html ファイルにブラウザからアクセスすると、html のソースがブラウザに表示されます。しかし html ファイルに属性設定を行と、html をブラウザで開いたときのそのままの表示にすることができるようになります。この設定をしたおかげで、打ち合わせ時に Subversion 上のファイル一式を PC上にダウンロードしなくても 表示確認を簡単に行えるようになりました。

 日常の備忘録:: HTMLをSubversionで管理しながらWebで参照可能に
 http://www.kaede-software.com/2008/01/htmlsubversionw.html


【 デバイスフォント シェイプマスク適用にフィルタ設定 】

デバイスフォントにマスクをかける際、マスクはどのような形をしていようと、矩形マスクとして適用されてしまう問題があるようです。その問題を解決するために以下のサイトのような ビットマップキャッシュを用いた方法があります。

 fumiononaka.com : デバイスフォントが表示されない
 http://www.fumiononaka.com/TechNotes/Flash/FN0502002.html

上記サイトの他の方法として、デバイスフォントのテキストフィールドにフィルタ設定を行うと、ビットマップキャッシュを用いずとも、マスクは矩形として適用されず、シェイプの形そのままで適用することができるようです。


【 ローカル上で確認する際の 他バージョンへのswfへの変数アクセスの制限 】

FlashPlayer8で書き出した swf(8.swf) から FlashPlayer7 で書き出された swf(7.swf)を読み込む場合、ローカルPC上に配置している 8.swfを表示するhtmlをブラウザで開いて動作確認を行おうとしても、8.swf から 7.swf への変数へはアクセスできませんでした。

Flashのムービープレビューやネットワーク上では問題なく動作するため、おそらく他バージョンへのswfのローカルアクセスは制限されているのかもしれません。表示確認に、やや手間がかかってしまうのが面倒です。

[ ETC ] [ FLASH ] [ info ] [ tips ] 2008年05月14日 20:17 | コメント (0) | トラックバック

FLASH info tips FDT 3.0 Enterprise beta版で Refactor Moveコマンドがサポート

最近情報収集にうとくなっており見逃していました。
FlexBuilder なり FDT なり、早く Refactor Move コマンドがサポートされるようにならないかなあ、と鼻をほじほじしながら待ち望んでいたところ、FDT 3.0 Enterprise beta版 で Move コマンドがサポートされたとのこと。

http://fdt.powerflasher.com/blog/?p=40

早速利用してみましたが、oh ブラボー!としかいいようがありません。プログラミング中に、クラス名、メソッド名、変数名はおろか パッケージ名やパッケージ構造もモリモリ変更したくなる方にはうってつけのツールとなりました。

追記)ベータ版のせいなのか、パッケージ名付でクラスを newを行っている箇所に対しては Moveが実行されない等、まだ動作は完全ではない模様。

---

以下、Action Script での Refactor Rename コマンド実行における注意事項。
配列演算子による変数へのアクセスの記述は注意が必要となります。

▽続きを読む

[ FLASH ] [ info ] [ tips ] 2008年03月13日 21:42 | コメント (0) | トラックバック

FLASH tips Excelで開いているファイルは URLLoaderで読み込めない

今後のネットでの検索用に、20分ほどつまずいた ファイル読み込み時の簡単なエラーのメモ。

URLLoaderでcsvファイルを読み込む処理を作成し ローカルPC上で動作検証してみたところ、次のような csv ファイルが読み込めないという旨のメッセージが表示されました。

[IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2
text="Error #2032: ストリームエラー。 URL: file:///~/viewer.csv"]

原因は、読み込み対象の csv ファイルを Excel で開いていたからでした。Excelで開くことにより読み込み対象のファイルがロックされてしまっていたようです。Microsoft Office系のソフトは皆このようになるのでしょうか。メモ帳等のテキストエディタの場合は、この現象は起きません。csvファイルをExcelで開くようにファイル関連付けをしていると、ローカルPC上でのcsvファイル読み込み検証時、同じようにつまずく事があるかもしれません。

[ FLASH ] [ tips ] 2008年02月18日 16:57 | コメント (1) | トラックバック

FLASH tips update トレジャーボインゴ11

会社の携帯端末 docomo SO905i の Flash Lite 3.0 にてトレジャーボインゴの動作確認を行ってみました。そして見事動作させることができました。

---

■Flash Lite 3.0 搭載 携帯用アドレス

・サンプル5 直アドレス
 http://m.dango-itimi.com/trebo/test/5.swf

・携帯電話用 団子一味のアドレス
 http://m.dango-itimi.com/

・QRコード

携帯端末での操作方法は、「2」「8」「4」「6」キーでキャラクター移動&攻撃となっております。

携帯用のトレジャーボインゴは、フレーム分割処理というものを組み込んでいるため、マップ生成からステージ表示まで20秒くらい時間を必要とします。携帯版ではマップ生成中は「マップ生成中...」といった表示を行う予定です。

---

Flash Lite 3.0 が搭載されている docomo 905i シリーズのワークメモリは以下のページによると 一律 3072KB とのこと。

http://www.nttdocomo.co.jp/service/imode/make/content/spec/flash/index.html

Adobe Device Central CS3 のエミュレータ上では、トレジャーボインゴのワークメモリ使用数は 2400~2600KB 程度となっているので、携帯端末上でも問題なく動作してくれました。

現状わかっている問題点として、フロア切り替え後、階段をすぐさま下り次のフロアへ移動すると メモリ解放が上手く行われない、といったことがあるようです。使用メモリが上がったままになってしまい どんどん 3000KB に近づいいってしまう、という現象が起こってしまいます。

端末の性能がアップしていることからか、Flash Lite 2.0 が搭載されていた au よりも処理速度は早く動作しています。キャラクター等の移動速度は PC に比べると遅いですが、au よりは早く動作するようになりました。

docomo 905i シリーズから画面領域がいままでの倍となったので swf表示サイズを当初の予定通り倍にしています。ドット感が出ていい感じです。


■PC版はこちら

▽続きを読む

[ FLASH ] [ tips ] [ update ] 2008年01月14日 22:21 | コメント (0) | トラックバック

FLASH update トレジャーボインゴ10

年の最後に今までに出来ているものまでをアップ。
ポップアップテキスト表示やステージ切り替え処理組み込みなどなど。

▽続きを読む

[ FLASH ] [ update ] 2007年12月27日 16:59 | コメント (1) | トラックバック

FLASH update トレジャーボインゴ9 「FLERR: メモリ不足エラーです。」

処理フレーム分割」を行った事により、ローグライクマップ自動生成処理を携帯端末で動作させることに成功しました。しかし、生成処理の処理行数が多いためかメモリを結構消費してしまい、ゲーム本体であるトレジャーボインゴのメイン処理を続けて実行すると「FLERR: メモリ不足エラーです。」というエラーが発生。

 モバイルデバイスに適した Flash Lite アプリケーションメモリの管理

上記ヘルプページによると、メモリを解放するには使用していない変数に null を代入すればよいとのことなので、色々 null なり delete なり試してみましたが一向に解放される気配を見せてくれず。

Adobe Device Central CS3のエミュレータからメモリについて調べてみたところ、現状の au の FlashLite のヒープメモリ量では トレジャーボインゴを動作させることは困難かもしれません。後もう少しで動作する…! というところでメモリが足りなくなってしまいます。vodafone は au よりもヒープメモリが高く設定されている(500KB程多い)ようで、動作するみたいです。

ローグライクマップ自動生成処理を AIR か何かで作成し、マップ情報をあらかじめたくさんの静的ファイルに書き出しておき、ゲーム実行時にそのファイルをランダムで読みに行く… といった対策が考えられますが、ローグライクマップ自動生成処理をAS3で作り直す気力は現在なし。

「処理フレーム分割」等、携帯用の対策を行っているだけで時間がかかり 先になかなか進めることができないため、しばらくは携帯で動作させる事はあきらめようと思います。当面は PC と Wii 用向けということで、今後 携帯端末の性能がもう少し上がってくれることを願います。

[ FLASH ] [ update ] 2007年11月18日 18:34 | コメント (0) | トラックバック

FLASH info FDT3.0

AS3対応になった FDT3.0、いつのまにやら発売されていた模様。

FDT3.0
http://fdt.powerflasher.com/

eclipseでAS2の開発を行う場合、もっぱらFDT2.0を用いておりました。
丁度仕事でAS3の開発を行うことになりそうなので、AS3の開発を行う場合、現在まだベータ版である FlexBuilder とどちらが開発がし易いか等、調査してみたいと思います。

追記)
FDT3.0をインストールした後、Flash Explorerを開こうとすると 「メモリが足りないから eclipse.ini 内のメモリ設定箇所を -Xmx512m に書き換えてください」といった旨のダイアログが表示され、起動することができませんでした。

調べてみたところ、以下のページが参考になり無事起動成功。

Hatena::Question
Eclipseが「応答なし」にならない方法を教えて下さい。

追記2) 2007/11/28
メインマシン Windows XP の eclipse 3.3.1 でソースコードを書いている途中 頻繁にeclipseがフリーズしてしまいます。ノートPC Windows Vista の eclipse 3.2.2 では快適に動作しています。フリーズの原因は eclipse が悪いのか FDT が悪いのか PCの性能がよくないのか、わからずの状況。

追記3) 2008/1/14
フリーズの原因が恐らく判明。
追記2では Vistaではフリーズは起こらないと書きましたが、その後Vistaでも頻繁にフリーズが起きてしまっていました。
viplugin を eclipse に導入していて、なおかつ vi のファイル保存コマンド「:w」を実行する、と eclipse がフリーズする可能性が高いようです。なので、Windowsデフォルトの「Ctrl + S」で保存すればフリーズを回避することができます。FDT と viplugin で何か処理がバッティングしてしまっているのですかね。

[ FLASH ] [ info ] 2007年11月16日 02:06 | コメント (0) | トラックバック

FLASH tips 処理フレーム分割

「ローグライクマップ自動生成処理」を 現在作成しているFlashLiteゲーム「トレジャーボインゴ」に組み込んでみた所 携帯端末上ではエラーが発生し動作しなくなった、と以前blogに記述しました。1フレーム内で処理する行数が多すぎたためエラーが発生しているものと思われます。

「ローグライクマップ自動生成処理」のみを携帯端末で動作させてみたところ、同じくエラーが発生。「ローグライクマップ自動生成処理」を行う各クラス内のメソッドを複数のフレームをまたぎつつ呼び出す必要がありそうです。

対処として以下のような方法をとることにしました。


【 メインクラスの変更 】

メインとなる Sampleクラス があるとします。

class Sample{

	private var testA:TestA;
	private var testB:TestB;
	private var testC:TestC;

	public function Sample(root:MovieClip){

		testA = new TestA();
		testB = new TestB();
		testC = new TestC();

		testA.run();
		testB.run();
		testC.run();
	}
}

TestA~Cクラスの runメソッドを実行すると それぞれの処理行数が多すぎてエラーが発生してしまう、という場合、各runメソッドを1フレームにつき一つずつ実行するためには以下の様に変更します。

class Sample{

	private var testA:TestA;
	private var testB:TestB;
	private var testC:TestC;

	private var main:Function = null;

	public function Sample(root:MovieClip){

		testA = new TestA();
		testB = new TestB();
		testC = new TestC();

		main = funcA;
		var sc:Sample = this;
		root.onEnterFrame = function(){ sc.run(); }
	}
	private function run():Void{

		main();
	}
	private function funcA():Void{

		testA.run();
		main = funcB;
	}
	private function funcB():Void{

		testB.run();
		main = funcC;
	}
	private function funcC():Void{

		testC.run();
		main = end;
	}
	private function end():Void{
		~
	}
}

上記変更により、一つのフレームで実行される処理は mainメソッドのみとなります。実際は、mainメソッドの参照先メソッド(funcA~C)が実行されます。参照先メソッド内の処理終了後 次に行いたい処理を再び mainメソッドに代入し、次々とTestA~Cクラスの runメソッドを実行していきます。

【 各クラスの変更 】

ここで TestA クラス の内容が以下のようになっているとします。

class TestA{

	public function TestA(){}

	public function run():Void{

		func1();
		func2();
		func3();
	}
	private function func1():Void{
		~
	}
	private function func2():Void{
		~
	}
	private function func3():Void{
		~
	}
}

TestAクラスの func1~3 メソッドの処理行数が多く、TestA.runメソッドを実行するとエラーが発生してしまう場合、以下の用に変更します。

class TestA{

	private var main:Function = null;

	public function TestA(){}

	public function run():Boolean{

		if(main == null) main = func1;
		main();
		return main == null;
	}
	private function func1():Void{
		~
		main = func2;
	}
	private function func2():Void{
		~
		main = func3;
	}
	private function func3():Void{
		~
		main = null;
	}
}

また、Sampleクラス の funcAメソッド を以下の用に変更します。

	~
	private function funcA():Void{

		if(testA.run()) main = funcB;
	}
	~
}

これにより、TestAクラス内の各メソッドが1つのフレームで一つだけ実行されるようになります。TestA.runメソッドから true が返ると、TestAクラス内のすべての処理が終了したことを意味します。


現在は「ローグライクマップ自動生成処理」に上記のような対処を各クラスに追加/変更中...
しかしなかなか動作してくれず。

[ FLASH ] [ tips ] 2007年11月14日 20:28 | コメント (0) | トラックバック

FLASH info これはひどい無断掲載

「おもしろFLASHゲーム集」というサイトに「OH! DANGO JAM」が無断掲載されているという情報をメールにていただきました、

おもしろFLASHゲーム集
http://flash.ge-mu.net/

おもしろFLASHゲーム集 の 「OH! DANGO JAM」が掲載されているページ
http://flash.ge-mu.net/html/072703.php
びっくりしたことに「自分のサイトに設置」タグまで用意されています。こ、こいつは信じられねえ…

このサイトを運営しているのが「有限会社チビコン」というところらしい。
http://chibicon.net/top.html

なんか見たことあるなこのURL、と、過去のメールをさかのぼって調べてみたところ、団子一味のゲームのURLに片端からリンクを貼り、ゲーム集リンクサイトを作っていたところではないですか。リンクが貼られるたびに、都度「ゲームを紹介しました」というメールがどんどん送られてきました。そのサイトには、各ゲームのURLと共にゲーム感想用掲示板というものが設置してあり、こちらの制作したゲームの感想が好き放題書けるようになっておりました。何が書いてあるかは、そのサイトがまだあるのであれば行って見るとわかります。こちらとしては、その書き込み内容に不快にさせられるだけだったためリンクを外してくれとメールを書きましたがスルーされてしまいました。

上記サイト、どうやら iframe で OH! DANGO JAM の swf を表示している模様。以前海外のサイトにて同じような事があった時、対策したような気がしましたがもう一度見直す必要がありそうです。何故こういう行為を行うサイトのために、こちらの時間を割かなくてはならないのかと、なんとも悩ましいものです。サクッとどこかに通報するだけで、対処してくるような所はないのですかね。.htaccessで制限かけることできるのですかなあ。

追記)
以下のページ 「さくらのレンタルサーバ非公式FAQ」の「画像への直リンクを防ぐ」を参考にさせてもらったところ、アクセス制限が上手くいった模様です。
http://faq.sakuratan.com/wiki/wiki.cgi?.htaccess

ばんじゃーい!

[ FLASH ] [ info ] 2007年11月09日 03:53 | コメント (10) | トラックバック

FLASH info docomo 905i シリーズは Flash Lite 3.0

docomo 905iシリーズに Flash Lite 3.0が搭載されることが公式から発表があった模様で以下のページに記述がありました。

 905iシリーズの主な特長

そのうち以下の一覧に 905i が載ることになりそうです。

 端末スペック一覧

docomoでは Flash Lite 2.x 対応の機種は出ることはなくなったのでしょうか。
Flash Lite 3.0 は FlashPlayer8 相当との事ですが、ActionScript 1.0~2.0 で FlashLite の開発を行いたい、という場合は、 au, vodafone の事を考え FlashPlayer7 相当の Flash Lite2.0 での開発を行ったほうが良さそうです。wiiにも対応できますしね。

後はFlashLite2.0を用いればこれくらいのゲーム/携帯サイトが作れます、といったものを作成し 色々な所にプッシュしていければと思います。時間はえらいかかってしまっていますが、トレジャーボインゴはなんとしても完成させなくては。

[ FLASH ] [ info ] 2007年11月01日 19:33 | コメント (0) | トラックバック

FLASH update トレジャーボインゴ8 ポップアップテキストエフェクト

OH! DANGO JAM」でも使用していた 数値や英字がポップアップして表示される テキスト表示処理をライブラリ化。トレジャーボインゴに用いる予定。
以前も作成したような気がしましたが、過去とコーディングスタイルが徐々に変わっており、現在のコーディングスタイルに合わせたものを作成し直しました。

▽続きを読む

[ FLASH ] [ update ] 2007年10月18日 20:53 | コメント (0) | トラックバック

FLASH tips Flashのバージョンの違いで FlashLite用 swf書き出しに容量の差が出る

Flash8で作成していたFlashLite用ゲームを Flash CS3(Flash9)でパブリッシュしてみると、Flash CS3で書き出される swfの方が容量が大きいことがあります。原因は詳しく調査はしていないのでわかりませんが、100KBの容量ギリギリにswfを作成している場合は とても困る問題です。

Flash CS3では ラスタデータの画像の書き出し処理に何か不備がある、といった記事をどこかで見かけたことがありますが、そこらへんが関係しているのかもしれません。

[ FLASH ] [ tips ] 2007年09月21日 10:40 | コメント (0) | トラックバック

FLASH update トレジャーボインゴ7 マップ自動生成処理組み込み

先日より作成していたマップ自動生成処理をトレジャーボインゴに組み込み。しかし携帯端末で動作確認をしてみるとエラーが発生しswfが停止してしまいまいた。
単一フレーム内での処理行数が多すぎたためエラーが発生したと思われます。まずマップ自動生成処理とゲームメイン処理の合間にフレームを一つまたぐ必要がありそうです。それでも動作しない場合、マップ自動生成処理の各処理毎の合間合間にフレームをまたがせる必要がでてきます。

■PC上での動作確認はこちら

▽続きを読む

[ FLASH ] [ update ] 2007年08月05日 17:45 | コメント (2) | トラックバック

FLASH GRAPHIC update トレジャーボインゴ6

トレジャーボインゴで使用するゲーム画像を作成中

【 タイトル画像とゲーム中の主な画面構成 】
treboo1.pngtreboo2.png

【 イベントシーン 】
ややこった家などを表示。
treboo3.pngtreboo4.png
複数マップチップをまたぐグラフィックの背景パーツを配置するのは何かと難しいので、左図の家はイベント中のみに表示されます。

【 自動生成マップ背景用ブロック配置イメージ 】
クォータービューなので、キャラクターが隠れない程度の高さがよさげです。
treboo5.png

【 アイテム 】
ハート、金塊、剣、盾、階段
treboo6.png

【 操作方法確認画面 】
見難いのでおそらく作り直します。
treboo7.png

[ FLASH ] [ GRAPHIC ] [ update ] 2007年06月18日 20:47 | コメント (6) | トラックバック

FLASH info PICT PUZZLE カスタマイズ設置してもろうた2

うわ~い!、またPICT PUZZLEをカスタマイズ設置したくださった方がきましたよ!
背景画像に加え音楽まで変更してくださっています。

wrv
http://wrv.jugem.jp/?eid=97

設置してくださった方は instantGarden のハラさんでした。
私mixiではロムに徹していてすみません><

instantGarden
http://www.ninefive95.com/ig/

[ FLASH ] [ info ] 2007年06月17日 14:18 | コメント (0) | トラックバック

FLASH tips Flex 3 パブリックベータ Refactorコマンド試用

Flex 3 パブリックベータがダウンロード可能になったようです。新機能の一つとして「コードのリファクタリング機能」がついたとのこと。こいつは待ちに待っていた機能ではありませんか、というわけで早速試してみることに。

Flex Builder 3 Public Beta
http://labs.adobe.com/technologies/flex/flexbuilder3/

ActionScript Project を作成し、メインクラスとなる Sample.asファイルを作成。

次にNavigatorウインドウから右クリックでメニュー表示を見てみると、ありました「Refactor」コマンド。
「Refactor」コマンドの項目内には「Rename」がありました。

ベータなのでまだこれだけなのかな、と思いつつ、Renameの項目からクラス名「Sample」を「Sample2」に変更してみると次のようなエラーダイアログが表示されました。

An unexpected exception occurred while performing the refactoring. See the error log for more details.

See the error log for more details.

なんだか Flex Builder 2 を使用していた時もこのようなエラーメッセージが表示されたことがあったような気がします。エラーの原因は少しわかりませんが、Flex Builderを何度か再起動してみたらエラーがでなくなりました。

「Rename」が成功すると、Sample.as内の「Sample」というクラス名とコンストラクタが「Sample2」にすべて変更されました。

次にtest.Testクラス(Test.as)を作成し、Sample2クラスからTestクラスのインスタンスを生成します。そしてTestクラスをRefactorコマンドでRenameし、クラス名を「Test2」にしてみるとどうなるか試してみます。

Previewボタンを押してみると、Testクラスを使用している全てのファイルの修正点を閲覧することが可能のようです。Sample2クラス内の「Test」の記述が「Test2」に変わることを教えてくれます。こ、こいつを待っていたんだぜ…!

今後できるようになるのかはわかりませんが、パッケージ名をRefactorコマンドで Rename等することはできない模様。属するパッケージを変更したい場合、今までどおり一個一個全てのクラスを修正していかなくてはならないようです。

Javaでeclipseによるリファクタリング機能説明のすごそうなページがありましたが、このようなことができるようになるのですかなあ。

実践!リファクタリング
http://gihyo.jp/magazine/wdpress/information/2007/vol37-refactoring

[ FLASH ] [ tips ] 2007年06月11日 19:12 | コメント (0) | トラックバック

ETC FLASH info PICT PUZZLE カスタマイズ設置してもろうた

ブログパーツ的に設置可能なパズルゲームとして、以前作成しました PICT PUZZLE というものがあります。
http://www.dango-itimi.com/download/pictpuzzle/
(カスタマイズ例の項の[サンプル1]か[サンプル2]を選択すると遊べます。)

ゲーム中の画像や音楽等が自由にカスタマイズ可能… とはしましたが、ファイルをサーバにアップロードする手間等含め、カスタマイズまでして設置していただける人はあまりいないだろうなあ、と思っておりました。

そんな どうやって作ったかも忘れかけていた今日この頃、いつものように団子一味へのアクセス解析を見ていたところ、PICT PUZZLE をカスタマイズして設置してくださった方がいるではありませんか。

405号室
http://blog.masa-sleep.but.jp/

うおお!? これはまさにプロの技。なんともありがたやにございます…!ボーナス画像いただきました。

[ ETC ] [ FLASH ] [ info ] 2007年06月05日 20:18 | コメント (2) | トラックバック

FLASH tips ローグライクマップ自動生成3

■パーツ配置処理実装

自動生成したマップに、プレイヤー、次のフロアへ行くための階段、敵、背景パーツ、アイテム、グループ背景パーツをランダム配置可能にしました。


【 自動生成したマップ 】

□□□□□□□□□☆□□□□□□□□☆□□□□□☆□□□□□
□□□□□□□□□☆□□□□□□□□☆□□□□□☆□●■●□
□□□□□□□□□☆□□□□□□□□☆□●■●□◆◆◆◆◆□
□□□□□□□□□☆□□□□□□□□◆◆◆◆◆◆◆□●■■□
□□□□□□□□□☆□●■■■■●□◆□●◆●□☆□■■■□
□□□□□□□□□☆□■■■■◆◆◆◆□■◆■□☆□■■■□
□□□□□□□□□☆□■■■■◆●□☆□●◆●□☆□●■●□
□□□□□□□□□☆□■■■■◆■□☆□□◆□□☆□□□□□
□□□□□□□□□☆□●■■■◆■□☆☆☆◆◆◆☆☆☆☆☆☆
□□□□□□□□□◆◆◆◆◆■◆■□☆□□□□◆□□□□□□
□□□□□□□□□◆□●■◆■◆●□☆□●■●◆●■■■●□
□●■■■■■●□◆□■■◆■◆◆◆◆◆◆■■◆■■■■■□
□■■■■■■■□◆□■■◆◆◆●□☆□●■■◆■■■■■□
□■■■■■■■□◆□●●◆●■●□☆□●■■◆■■■■●□
□■■■■■■●□◆□□□◆□□□□☆□□□□□□□□□□□
□■■■■■◆◆◆◆☆☆☆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆☆☆
□■■■■■◆●□☆□□□□□□□□□□□□□□□□□◆□□
□■■■■■◆■□☆□□□□□□□□□□□□□□□□□◆□□
□■■■■■◆■□☆□□□□□□□□□□□□□□□□□◆□□
□■■■◆◆◆■□☆□□□□□□□□□□□□□□□□□◆□□
□●■●◆●■●□☆□□□□□□□□□□□□□□□□□◆□□
□□□□◆□□□□☆□□□□□□□□□□□□□□□□□◆□□
☆☆☆☆◆☆☆☆☆☆□□□□□□□□□□□□□□□□□◆□□
□□□□◆□□□□☆□□□□□□□□□□□□□□□□□◆□□
□●■●◆●■●□☆□□□□□□□□□□□□□□□●●◆●□
□■■■◆■■■□☆□□□□□□□□□□□□□□□■■◆■□
□■■■◆■■●□☆□□□□□□□□□□□□□□□●■◆■□
□■■■◆■■◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆■◆■□
□●■■◆■■●□☆□□□□□□□□□□□□□□□●■◆●□
□□□□□□□□□☆□□□□□□□□□□□□□□□□□□□□

【 各パーツ配置 】
                          ■■■ 
                    ■I2■ ■■■■■ 
                  ■■■■■■■ ■E1■ 
           ■■■■E3■ ■ ■■■   B1■E1 
           B2■■■■■■■ ■■■   ■■■ 
           ■■■■■■   ■■■   ■■■ 
           ■■■■■■    ■        
           ■■■■■■    ■■■      
         ■■■■■■■■      ■      
         ■ ■■■■■■   ■■■■■■■■■ 
 ■■■■■■■ ■ ■■■■■■■■■■■■■■■■■■ 
 ■■■■■■■ ■ ■I1■■■■   B1■■■■■■■■ 
 ■■■■■■■ ■ ■■■■■■   ■■■■■■■■■ 
 ■■■■■■■ ■   ■                
 ■■■■■■■■■   ■■■■■■■■■■■■■■■  
 ■E2■■■■■                   ■  
 ■■■■■■■                   ■  
 ■■■■■PE1                   ■  
 ■■E3■■■■                   ■  
 ■■■■■E2■                   ■  
    ■                      ■  
    ■                      ■  
    ■                      ■  
 ■■■■■■■                 ■■■■ 
 ■■■■■■■                 ■B2■■ 
 ■B5B6■■■■                 ■■■■ 
 ■B7B8■■■■■■■■■■■■■■■■■■■■■■■S■ 
 ■■■■■■■                 ■■■I1

P : プレイヤー
S : 階段
En : 敵
In : アイテム
Bn : 背景パーツ

nはIDを示す
10以上のIDはXと表示される

登場させたい各パーツのID一覧をメインクラスに渡すことでランダム配置されるように処理しています。

プレイヤーと階段は、すべての部屋が繋がるための通路上に配置されます。プレイヤーと階段以外は、すべての部屋が繋がるための通路上には配置されません。(ローグライクマップ自動生成2参照)

グループ背景パーツは、複数チップで構成される大きな背景パーツを配置したい場合に指定します。上記例ではB5~b8の四つの背景パーツが固まっている箇所がグループ背景パーツとなっています。

配置処理順序は以下のようにしています。

 1.指定した各パーツを最低ひとつずつ配置
 2.各パーツをランダム数配置

パーツ配置可能なチップがなくなった時点で配置処理は終わります。
グループ背景パーツに関しては、配置可能なチップをランダムで探索させているため、特定の探索数を上回った場合、配置はとりやめになるように処理しています。よって、グループ背景パーツを配置するように指定したにもかかわらず、フロア上には配置されない事もあります。FlashLiteでは1フレーム内で実行する処理行数はさほど多くはないと思われるので、探索可能上限はあまり大きく設定はできません。

■敵登場位置設定

1フロア内で一定以下の敵の数になったら敵がどこかに登場するようにします。
一歩一歩プレイヤーが歩くたびに敵がどこに登場するかを決定する処理は行わず、あらかじめどの位置に敵が登場するかを設定して処理軽減を行います。

設定したマップは以下のようになります。

                          ■■■ 
                    ■E■ ■■■■■ 
                  ■■■■■■■ ■■■ 
           ■■■■■■ ■ ■■■   ■■■ 
           ■■■■■■■■ ■■E   ■■■ 
           ■■■E■■   ■■■   ■E■ 
           ■■■■■■    ■        
           ■■■■■■    ■■■      
         ■■■■■■■■      ■      
         ■ ■■■E■■   ■■■■■■■■■ 
 ■■■■■■■ ■ ■■■■■■■■■■■■■■■■■■ 
 ■■■■■■■ ■ ■■■■■■   ■■■■■■■■E 
 ■■■■■■■ ■ ■■■■■■   ■E■■■■■■■ 
 ■■■■■■■ ■   ■                
 ■■■■■■■■■   ■■■■■■■■■■■■■■■  
 ■■■■■■■                   ■  
 ■■■■■■■                   ■  
 ■■■■■■■                   ■  
 ■■■■■■■                   ■  
 ■■■■■■■                   ■  
    ■                      ■  
    ■                      ■  
    ■                      ■  
 ■■■■■■■                 ■■■■ 
 ■■■■■■■                 ■■■■ 
 ■■■■■E■                 ■■■■ 
 ■■■■■E■■■■■■■■■■■■■■■■■■■■■■ 
 ■■■■■E■                 ■■■■

指定した数値分、敵登場位置が設定されます。

これにてローグライクマップ自動生成処理はほぼ完成。

[ FLASH ] [ tips ] 2007年05月31日 02:24 | コメント (0) | トラックバック

FLASH tips ローグライクマップ自動生成2

【 ランダム通路作成 】

全ての部屋が繋がるように通路を繋げた後は、各部屋からランダムで通路を延ばします。
その場合の独自に設定した仕様は以下の通りです。

・ランダムで延ばす通路は直進するのみ (処理軽減のため)
・部屋の角には通路は作らない (見た目を整えるため)
・二本以上の通路が隣り合わせることはないようにする (見た目を整えるため)

ランダムで通路を延ばすようにしたマップ自動生成例は次のようになります。

□□□□□□□☆□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□☆□□□□●■■■■■■■■■■■■■■■●□
□□□□□□□◆◆◆◆◆◆■■■■■■■■■■■■■■■■□
□□□□□□□◆□□□□●■■■■■■■■■■■■■■■■□
□□□□□□□◆□□□□■■■■■■■■■■■■■■■■■□
□□□□□□□◆□□□□■■■■■■■■■■■■■■■■■□
□□□□□□□◆□□□□●■■■■■■■■●◆●■■●◆●□
□□□□□□□◆□□□□□□□□□□□□□□◆□□□□◆□□
□□□□□□□◆☆☆☆☆☆☆☆☆☆☆☆☆☆◆◆☆☆☆☆◆☆☆
□□□□□□□◆□□□□□□□□□□□□□◆□□☆□□◆□□
□□□□□□□◆□□□□□□□□□□□□□◆□□☆□□◆□□
□□●■■●□◆□●■■■■■■■■■■●◆●□☆□●◆●□
□□■■■●□◆□■■■■■■■■■■■■■■□☆□■■■□
□□■■■◆◆◆□■■■■■■■■■■■■■■□☆□●■■□
□□■■■●□☆□■■■■■■■■■■■■■●□◆◆◆■■□
□□■■■■□☆□■■■■■■■■■■■■■◆◆◆□●■■□
□□■■■■□☆□●■■●◆●■■■■■■■●□☆□●◆●□
□□■■■■□☆□□□□□◆□□□□□□□□□□☆□□◆□□
□□■■■■□☆☆☆☆☆☆◆◆◆◆◆◆◆◆☆☆☆☆☆☆◆☆☆
□□■■■■□☆□□□□□□□□□□□□◆□□□☆□□◆□□
□□■■■■□☆□□□□□□□□□□□□◆□□□☆□●◆●□
□□■■■■□☆□□□□□□□□□□□□◆□□□☆□■■■□
□□■■■■□☆□□□□□□□□●■■●◆●●□☆□■■■□
□□■■■■□☆□□□□□□□□■■■■■■■□☆□■■■□
□□■■■■□☆□□□□□□□□■■■■■■●□☆□●■■□
□□■■■■□☆□□□□□□□□■■■■■■◆◆◆◆◆■■□
□□■■■■□☆□□□□□□□□■■■■■■●□☆□●■■□
□□■■■■□☆□□□□□□□□■■■■■■■□☆□■■■□
□□●■■●□☆□□□□□□□□●■■■■■●□☆□●■●□
□□□□□□□☆□□□□□□□□□□□□□□□□☆□□□□□

●は上下左右のチップに通路を作成できないチップです。部屋作成時に部屋の四隅に設定しています。また通路を作成する際、通路が開通した位置のチップの両側にあるチップに設定しています。こうすることで、部屋の角には通路は繋がらなくなり、また、通路が二本以上隣り合うことはならないように処理させています。

◆には移動しない背景オブジェクト(木や岩等)を配置できない箇所です。ランダムで背景オブジェクトを設置させたい場合、通路がふさがれて全ての部屋に移動できなくなってしまうことがないように設定しています。


【 部屋内部にも通路作成 】

ランダムで移動しない背景オブジェクトを配置する際、『プレイヤーオブジェクト』や次のフロアへ移動するための『階段』が、背景オブジェクトにふさがれてしまう可能性があることに気付きました。どちかでもふさがれてしまうと、次のフロアへ進むことができなくなってしまいます。

プレイヤーオブジェクトや階段が 背景オブジェクトにふさがれないようにするためには、一本の全ての部屋が繋がる通路を部屋内部にも作成します。通路がある箇所には背景オブジェクトは配置できないようにしているので、その通路上にプレイヤーオブジェクトや階段を配置すれば次のフロアへ進むことができないという事は起こらなくなります。

部屋内部にも通路を作成したマップ自動生成例は次のようになります。
この例ではランダム通路は作成していません。

□□□□□□□□□□□□□□□□☆□□□□□□□□□□□□□
□□□□□□□□□●■■■■●□☆□●■■■■■■■■■●□
□□□□□□□□□■■■■◆◆◆◆□■■■■■■■■■■■□
□□□□□□□□□■■■■◆●□◆□■■■■■■■■■■■□
□□□□□□□□□■■■■◆■□◆□■■■■■■■■■■■□
□□□□□□□□□■■■◆◆■□◆□■■■■■■■■■■■□
□□□□□□□□□●■●◆●●□◆□■■■■■■■■■■■□
□□□□□□□□□□□□◆□□□◆□■■■■■■■■■■■□
☆☆◆◆◆◆◆◆◆◆◆◆◆☆☆☆◆□■■■■■■■■■■■□
□□◆□□□☆□□□□□□□□□◆□■■■■■■■■■■■□
□●◆●●□☆□□□□□□□□□◆□■■■■■■■■■■■□
□■◆◆■□☆□□□□□□□□□◆□■■■■■■■■■■■□
□■■◆■□☆□□□□□□□□□◆□■■■■■■■■■■■□
□■■◆●□☆□□□□□□□□□◆□■■■■■■■■■■■□
□■◆◆◆◆◆□□□□□□□□□◆□■■■■■■■■■■■□
□●◆●●□◆□□□□□□□□□◆□■■■■■■■■■■■□
□□◆□□□◆□●■■■■■●□◆□■■■■■■■■■■■□
☆☆◆☆☆☆◆□■■■■■■■□◆□■■■■■■■■■■■□
□□◆□□□◆□■■■■■■■□◆□■■■■■■■■■■■□
□●◆●●□◆□■■■■■■■□◆□■■■■■■■■■■■□
□■◆■■□◆□■■■■■■■□◆□■■■■■■■■■■■□
□■◆■■□◆□■■■■■■■□◆□●■■■■■■■■■■□
□■◆■■□◆□●■■■■■■□◆◆◆◆◆◆◆◆◆◆◆◆◆□
□■◆■■□◆◆◆◆◆◆◆◆◆□☆□●■■■■■■■■■■□
□■◆■■□☆□●■■■■■■□☆□■■■■■■■■■■■□
□■◆■■□☆□■■■■■■■□☆□■■■■■■■■■■■□
□■◆■■□☆□■■■■■■■□☆□■■■■■■■■■■■□
□■◆■■□☆□■■■■■■■□☆□■■■■■■■■■■■□
□●◆■●□☆□●■■■■■●□☆□●■■■■■■■■■●□
□□□□□□☆□□□□□□□□□☆□□□□□□□□□□□□□

部屋内部に通路が二つ以上ある場合は、それら通路を接続し、通路が一つしかない部屋には、単純に通路がある壁と反対方向の壁まで必須通路を延ばしてします。

部屋内部にも通路開通後、ランダム通路を作成したマップ自動生成例は次のようになります。

□□□□□☆□□□□□□□□□□□□□□□□☆□□□□□□□
□□□□□☆□□□□□□□□□□□□□□□□☆□□□□□□□
□□□□□☆□□□□□□□□□□□□□□□□☆□□□□□□□
□□□□□☆□□□□□□□□□□□□□□□□☆□□□□□□□
□□□□□☆□□□□□□□□□□□□□□□□☆□□□□□□□
□●■●□☆□□□□□□□□□□□□□□□□☆□●■■■●□
□■◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆■■■■□
□■◆●□◆□□□□□□□□□□□□□□□□☆□●■■■■□
□■◆■□◆□□□□□□□□□□□□□□□□☆□●■■■■□
□■◆■□◆□□□□□□□□□□□□□□□□◆◆◆◆◆◆■□
□■◆■□◆□□□□□□□□□□□□□□□□◆□●■■◆■□
□■◆■□◆□□□□□□□□□□□□□□□□◆□■■■◆■□
□■◆■□◆□●■■■■■■■■■■■■●□◆□■■■◆■□
□■◆■□◆□●■■■■■■■■■■■■●□◆□■■■◆■□
□■◆■□◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆□●■●◆●□
□■◆■□☆□●■■■■■■■■■■■■●□☆□□□□◆□□
□●◆●□☆□●■●◆●■■■■■■■■●□☆☆☆☆◆◆☆☆
□□◆□□☆□□□□◆□□□□□□□□□□□☆□□□◆□□□
☆☆◆◆☆☆☆☆☆☆◆☆☆☆☆☆☆☆☆☆☆☆☆□□□◆□□□
□□□◆□□□☆□□◆□□□□□□□□□□□☆□□□◆□□□
□●●◆●●□☆□□◆□□□□□□□□□□□☆□□□◆□□□
□■■◆◆●□☆□□◆□□□□□□□□□□□☆□□●◆●●□
□■■■◆◆◆◆□□◆□□□□●■■■■●□☆□□■◆■■□
□■■■■●□◆◆◆◆◆◆◆◆◆◆◆◆◆◆□☆□□■◆■■□
□■■■■■□☆□□□□□□□●■■■■■□☆□□■◆■■□
□■■■■■□☆□□□□□□□■■■■■■□☆□□■◆■■□
□■■■■●□☆□□□□□□□●■■■■■□☆□□■◆■■□
□■■■■◆◆◆◆◆◆◆◆◆◆◆■■■■■□☆□□■◆■■□
□●■■■●□☆□□□□□□□●■■■■●□☆□□●◆■●□
□□□□□□□☆□□□□□□□□□□□□□□☆□□□□□□□

[ FLASH ] [ tips ] 2007年04月15日 18:28 | コメント (2) | トラックバック

FLASH tips ローグライクマップ自動生成

ネットのどこかにすでにあるかもしれませんが、↓こちらのサイトのアルゴリズムを参考にローグライク(不思議のダンジョン)系マップ自動生成プログラムをAS2で作成しました。
http://racanhack.sourceforge.jp/rhdoc/intromaze.html (Racanhack コード解説)

コードファイル一覧はこちらです。
・サンプルファイル game.zip

■使用方法

import game.automap.*;

var am:AutoMap = AutoMap._instance; //インスタンス取得
am.init(); //初期化&マップ生成
am.traceMap(); //マップ状態をtrace出力

■実行時のtrace出力内容例

□□□□□□□□□□□□□□□□□□☆□□□□□□□□□□□
□□□□□□□□□□□□□□□□□□☆□□□□□□□□□□□
□□□□□□■■■■■■■■■■■□☆□□□□□□□□□□□
□□□□□□■■■■■■■■■■■□☆□□□□□□□□□□□
□□□□□□■■■■■■■■■■■■■□□□□□□□□□□□
□□□□□□■■■■■■■■■■■□■□□□□□□□□□□□
□□□□□□■■■■■■■■■■■□■□□□□□□□□□□□
□□□□□□■■■■■■■■■■■□■□□□□□□□□□□□
□□□□□□■■■■■■■■■■■□■□□□□□□□□□□□
□□□□□□■■■■■■■■■■■□■□□□□□□□□□□□
□□□□□□■■■■■■■■■■■□■□□□□□□□□□□□
□□□□□□■■■■■■■■■■■□■□□□□□□□□□□□
□□□□□□■■■■■■■■■■■□■□□□□□□□□□□□
□□□□□□□□□□□□■□□□□□■□□□□□□□□□□□
☆☆☆☆☆☆■■■■■■■☆☆☆☆☆■□□□□□□□□□□□
□□□□□□■□□□☆□□□□□□□■□□□□□□□□□□□
□■■■■■■■■□☆□□□□□□□■□□□■■■■■■■□
□■■■■■■■■□☆□□□□□□□■■■■■■■■■■■□
□■■■■■■■■□☆□■■■■■□☆□□□■■■■■■■□
□■■■■■■■■□■■■■■■■□☆□□□■■■■■■■□
□■■■■■■■■□■□■■■■■□☆□□□□■□□□□□□
□■■■■■■■■□■□■■■■■□☆☆☆☆☆■■■■■☆☆
□■■■■■■■■□■□■■■■■□☆□□□□□□□□■□□
□■■■■■■■■■■□□■□□□□☆□□□□□□□□■□□
□■■■■■■■■□☆☆☆■■☆☆☆☆□□□□□□□□■□□
□■■■■■■■■□☆□□□■□□□☆□□□□□□■■■■□
□■■■■■■■■□☆□■■■■■□☆□□□□□□■■■■□
□■■■■■■■■□☆□■■■■■□☆□□□□□□■■■■□
□■■■■■■■■□☆□■■■■■□☆□□□□□□■■■■□
□□□□□□□□□□☆□□□□□□□☆□□□□□□□□□□□

黒い四角(■)は キャラクターが通れる場所、白い四角(□)が通れない場所、☆は暫定的に表示させているもので 上記サイトにある処理時に必要となる区切り線です(白い四角と同じ通れない場所です)。

デフォルトでマップサイズが30x30、部屋の最小サイズが3x3となっています。変更したい場合は、AutoMap.initメソッドに引数を設定します。

処理の流れとしては、AutoMap.initメソッドを実行すると、TipListクラスのlistプロパティにTipクラスのインスタンスが二次元配列(30x30)で格納されます。横から5番目、縦から10番目のTipクラスを取得したい場合、AutoMap.initメソッド呼出し後、以下のように記述します。

var tip:Tip = TipList._instance.getTip(5, 10);

Tipクラス内には、自身が通行可能な場所なのか、通行不可能な場所なのかの情報が格納されています。

今回のサンプルは、全ての部屋が必ずどこかの部屋に接続されるだけのものとなっています。ここからマップ構造に面白みを出していくためにランダムで通路をどこかに繋げたり、敵やアイテムをランダム配置するような処理を組み込んでいくことになります。

ソースコード内のSingletonの使い方は間違っているかもしれませんが、その時はごめんなさい。

[ FLASH ] [ tips ] 2007年03月21日 14:08 | コメント (0) | トラックバック

FLASH update トレジャーボインゴ5

敵AI処理はほぼ完成。斜め移動のないローグライク(不思議のダンジョン系)ゲームの敵の動きにしてみました。画面外の敵の移動処理は重たくなる&大変そうなので行っておりません。

敵は白玉軍団が襲ってきます。敵の方向へキーを押すとそちらへ攻撃を行います。携帯端末用でテンポの良さを重視したいので、プレイヤーの周囲全部の敵がいっせいに攻撃をおこなってきます。

携帯端末での操作方法は、2846キーでキャラクター移動&攻撃です。

■FlashLite2.0搭載 携帯用アドレス

・サンプル4 直アドレス
 http://m.dango-itimi.com/trebo/test/4.swf

・携帯電話用 団子一味のアドレス
 http://m.dango-itimi.com/

・QRコード

PC版はこちら

▽続きを読む

[ FLASH ] [ update ] 2007年03月04日 22:43 | コメント (0) | トラックバック

FLASH update トレジャーボインゴ4

キャラクター移動処理追加。敵キャラクターが画面内に登場すると、プレイヤー方向へ移動してきます。携帯端末でのfpsは12出ているか出ていないか程度。おおむね負荷のかかる処理は実装したので、これ以上速度が遅くなることはないと思われます。

携帯端末での操作方法は、2846キーでキャラクター移動です。敵キャラクターはまだグラフィックを作っていないのでプレイヤーと色違いのキャラクターを配置しています。ひとまず三体ほど登場するようにしています。

■FlashLite2.0搭載 携帯用アドレス

・サンプル3 直アドレス
 http://m.dango-itimi.com/trebo/test/3.swf

・携帯電話用 団子一味のアドレス
 http://m.dango-itimi.com/

・QRコード

▽続きを読む

[ FLASH ] [ update ] 2007年02月04日 19:04 | コメント (0) | トラックバック

FLASH tips Singletonパターンでのインスタンス受け渡し省略化

デザインパターンのうちの一つである Singletonパターンは「指定したクラスのインスタンスが一つしか存在しないことを保証したい」場合に用いる、と文献に書いてあります。Singletonを適用したクラスのインスタンスをnewで生成しようとするとコンパイラがエラーを出して知らせてくれる、というものです。この用途では、結構大規模なプロジェクトではないと Singletonパターンを利用することは無いかなあ、と当初は考えスルーしてしまっておりました。

しかし Singletonパターンを用いると「どのクラスからも直に Singletonパターンを用いたクラスのインスタンスを 取得する事が可能になる」という用途もあることに気づきました。


一つしかインスタンスを生成しないAというクラスがあり、クラスAの機能を利用したいBというクラスがあるとします。

クラスAに Singletonパターンを適用しない場合、クラスBは、どこかのクラスで一度生成されたクラスAのインスタンスを、引数経由で取得します。ここで、クラスBのインスタンスが Cというクラス内で生成され、クラスCはクラスAの機能をまったく利用しない場合、クラスCには クラスAのインスタンスをクラスBへ受け渡すための通路を用意する必要があり、クラスCには不必要なクラスAに関する記述を用意する必要がでてきてしまいます。

クラスAに Singletonパターンを適用する場合、クラスBは引数経由でクラスAのインスタンスを取得する必要がなくなります。ここで、クラスBのインスタンスが Cというクラス内で生成される場合、クラスC内にはクラスAに関する記述はまったく必要がなくなります。


Singletonパターンを用いた簡単な例は以下の通りです。AS3では Singletonパターンの記述がやや困難なものになるようなので AS2で記述しています。上記例で言うと、ControlクラスがA、PersonクラスががB、UserクラスがC、となります。Mainクラスが Controlクラス(A)とUserクラス(C)を生成するメインとなるクラスです。
PersonクラスがControlクラス内に設定された文字列を利用したい場合のプログラムです。


//メインクラス
class Main {

	//初めに呼び出される
	public function Main(){
		
		var ctrl:Control = Control.getInstance();
		ctrl.init( "test" );
		
		var user:User = new User();
	}
}

//A : Singleton適用
class Control {
	
	private static var instance:Control = new Control();

	private var str:String;
	public function get _str():String{ return this.str; }
	
	private function Control(){}
	
	public static function getInstance():Control{
		return instance;
	}
	
	public function init( str:String ):Void{
		this.str = str;
	}
}

//C : Bを生成するクラス
class User {
	
	public function User(){
		new Person();
	}
}

//B : クラスAの機能を利用するクラス
class Person {
	
	public function Person(){
		var ctrl:Control = Control.getInstance();
		trace(ctrl._str); //testと出力される
	}	
}

Singletonパターンを用いない場合、Controlクラスのインスタンスを Userクラスのコンストラクタに引数で受け渡し、UserクラスからPersonクラスのコンストラクタの引数へ Controlクラスのインスタンスを受け渡す、という記述になります。Userクラスでは Controlクラスの機能は利用しないのに Controlクラスに関する記述が必要になってしまいます。

■AS3でのSingletonパターン記述法
akihiro kamijo : コンストラクタ (と Singleton)

[ FLASH ] [ tips ] 2007年01月28日 16:11 | コメント (2) | トラックバック

FLASH tips AS3 パッケージ記述簡略化

testパッケージ内にFirstというクラスが存在する場合、Class(Object)クラスを用いると以下のような記述が可能です。

var cls:Class = test.First;
new cls();

また、flash.utils.getDefinitionByName を用いると 文字列からクラスを取得できるようです。

var str:String = "test.First";
var cls:Class  = getDefinitionByName(str) as Class;
new cls();


異なるパッケージに同名のクラスが存在し、そのパッケージのネストがとても深く、ソースコードが横長になってしまうのを避けたい場合等に利用できそうです。

例)

var a1:Class = tkus.player.attack.sword.normal.action.First;
var a2:Class = tkus.player.attack.sword.normal.action.Second;

var e1:Class = tkus.player.attack.sword.normal.effect.First;
var e2:Class = tkus.player.attack.sword.normal.effect.Second;

//○○○が どのactionパッケージ内のクラスかを判別し、
//○○○に対応するeffectパッケージのクラスを配列に設定する
var list:Array = new Array();
     if( ○○○ is a1 ) list.push( new e1() );
else if( ○○○ is a2 ) list.push( new e2() );


[注意点1]
上記例の tkus.player.attack.sword.normal.action.First クラスのコンストラクタに引数が必要な場合でも swf書き出しが通ってしまいます。実行時に初めて引数の数が異なる旨のエラーが検出されます。

[注意点2]
flash.utils.getDefinitionByName は存在しないクラスの文字列を引数に渡しても FlexBuilderのエディターや、swf書き出し時 コンパイラはエラーを検出してくれません。swf実行時に初めてエラーが検出されます。
仮に flash.utils.getDefinitionByNameの 引数で渡したクラスのパッケージ構造が後に変更されることを考える場合、swf実行時のエラー(ReferenceError)をキャッチし、その内容をログに書き出す作りを想定する必要があるかもしれません。

[結論]
厳密な仕様にする場合、使用は禁物


[ Adobe LiveDocs ]
Class
getDefinitionByName()

[ FLASH ] [ tips ] 2007年01月23日 12:49 | コメント (0) | トラックバック

FLASH update トレジャーボインゴ3

任意の位置に背景パーツで作成できるように設計。
今後は不思議のダンジョン系の自動マップ生成に挑戦する予定。

サンプルでは14x14のマップチップを並べ、周囲に木を生やし一つの部屋を作っています。2846キーで上下左右にマップ全体が移動します。キャラクターは背景パーツの一つとなっており現在は移動しません。

携帯端末で動作確認してみると、処理(描画?)速度は以前のサンプルより遅くなってしまっています。16~18fpsくらいで移動し、1マス移動する毎にマップチップ+背景パーツ表示切替が行われ、そこでガクッと一瞬止まります。
現在の速度は及第点といったところでしょうか。これ以上早くするのは難しいです。今後、キャラクター移動処理など組み込むので更に遅くなるかもしれません。


■FlashLite2.0搭載 携帯用アドレス

・サンプル2 直アドレス
 http://m.dango-itimi.com/trebo/test/2.swf

・携帯電話用 団子一味のアドレス
 http://m.dango-itimi.com/

・QRコード

▽続きを読む

[ FLASH ] [ update ] 2007年01月13日 01:25 | コメント (0) | トラックバック

FLASH update トレジャーボインゴ2

上下左右でマップチップが移動するだけのサンプルを作成。
FlashLite2.0を搭載してある携帯端末からも閲覧が可能です。
http://m.dango-itimi.com/trebo/test/1.swf
上下左右矢印キー または 2846番号キー のどれかで移動します。

fpsは24に設定していますが、携帯端末上では体感 fps18~20程度です。これから更に色々な処理が加わるので、処理速度はもっと遅くなると思われます。現在のところ処理速度は合格点です。

マップチップが消えたり登場するところで、綺麗に消えるようにエフェクトをかけるものも作成してみましたが、見た目がいまいちなのでひとまずボツに。

携帯電話用 団子一味のアドレスはこちら
http://m.dango-itimi.com/

QRコード

[ FLASH ] [ update ] 2007年01月08日 16:35 | コメント (0) | トラックバック

FLASH GRAPHIC update トレジャーボインゴ1

raf.png

FlashLite2.0で何かクォータービューで動作する簡単なサンプルゲームでも一本作成してみようかなとイメージ画面を作成。タイトルは「トレジャーボインゴ」。
WiiのFlashPlayerは7相当ということで、そちらも視野に入れたいところです。

今まで作成してきたクォータービューものとは異なる点は、主人公キャラクターを常に画面中心に位置させ、移動時は主人公ではなく背景マップを移動さ