Hatena::Groupactionscript

ConquestArrow.addEventListener();

2007-06-24

[][]ゲーム開発向けフレームワーク、『Xelf』試用中 02:44 はてなブックマーク - ゲーム開発向けフレームワーク、『Xelf』試用中 - ConquestArrow.addEventListener();

SparkプロジェクトXelfというゲーム開発向けフレームワークを数週間まえからチョクチョク弄ってみている。

最初のうちは使い方がよくわからなかった*1が、最近になってなんとなくではあるが、使い方がわかったきたような気がする。

  • はまったところ
    • 設定XMLのcharacter要素を"charactor"とスペルミスしているのに気づかず悩む
    • Messageを投げる時に、Messenge子孫クラスのコンストラクタ第一引数の文字列に、"onHoge"と書いてしまい、onHoge()が呼ばれず悩む
      • 正しくは、"on"は不要
    • ビュータスクから処理タスクへMessageを使って描画オブジェクトの参照を渡そうとしていたため、
      • タスクの生成タイミングなどが読めず、うまく渡せなかった
      • 全てのインスタンスに同じ参照が渡されてしまった
      • →自動インジェクションで解決した
  • とりあえずXelfを使う時のコツ(私的理解)
    • まず、AOContainerの使い方をしっかり理解する
      • XMLの設定方法
      • DIの仕組み
    • Messageの仕組みを理解する
      • Xelfを使うとクラス数が増えるのでMessageの子クラスを増やしすぎないよう、汎用的なつくりを心がける
    • スペルミスなどのケアレスミスに気をつける(^^;

勉強用に作った簡易ゲームのソースは後で公開予定。

*1:ので、今思えばくだらないミスで何時間も悩んだ。

LaxmanLaxman2012/12/27 23:09That's a sharp way of thiinnkg about it.

iutpuwgsediutpuwgsed2012/12/28 14:037lKw1B <a href="http://oruwvmmmfpwm.com/">oruwvmmmfpwm</a>

tkjhkscvtkjhkscv2012/12/29 22:50zVOQMP , [url=http://vipxpisyvwtr.com/]vipxpisyvwtr[/url], [link=http://rlwtfzezulgr.com/]rlwtfzezulgr[/link], http://gjjyhkylbtys.com/

jwipiklqvjwipiklqv2012/12/31 13:407oWRtp , [url=http://dvfrkclayyhi.com/]dvfrkclayyhi[/url], [link=http://zbhovwcbwqjg.com/]zbhovwcbwqjg[/link], http://uwqvrboqjpuh.com/

トラックバック - http://actionscript.g.hatena.ne.jp/ConquestArrow/20070624

2007-05-21

[]Flex2のcomponentをAS3で使う 03:08 はてなブックマーク - Flex2のcomponentをAS3で使う - ConquestArrow.addEventListener();

ちょっと調べたのでメモ。

  1. 独り言日記(2007/03) - FreeStyleWiki
  2. no title

必要な作業

  • SpriteにはaddChildできないので表示の親はApplicationクラスなどのContainerクラスの子孫クラスである必要がある
  • setStyleコンポーネントのスタイルを必要なだけ定義する
    • やってられないので、mxmlを-keepオプションつきでコンパイル、生成されたasファイルからスタイル処理の分だけを抜き出す*1

実際には、基底クラスをSpriteのままで使いたかったので、Applicationクラスを継承したカスタムクラスを用意し、中にコンポーネントを包むことでなんとか使おうとしたが、ランタイムエラーがでて無理だった。ApplicationクラスやCanvasクラスはどうもSingletonらしく、普通にnewしようとすると

TypeError: Error #1006: getInstance は関数ではありません。

などとエラーがでる。うーむ。

外部swf化してLoaderクラスで読み込めばうまくいくのか…?違和感がある実装だけれど…。

追記:できた。クロススクリプト処理をすれば使えそう。でもListApplicationコンポーネントを含んだだけでswfファイルが180kbにもなった。ちょっと躊躇するファイルサイズだなぁ。

感想

*1:1番目のリンクを参照

JaviiJavii2012/04/10 23:07HHIS I sholud have thought of that!

ncvhptowncvhptow2012/04/13 19:409FuGnd <a href="http://msbmglmshqke.com/">msbmglmshqke</a>

トラックバック - http://actionscript.g.hatena.ne.jp/ConquestArrow/20070521

2007-05-20

[][]AS3のスコープとint/uint型の宣言で基本的なところが解っていなかった件 03:18 はてなブックマーク - AS3のスコープとint/uint型の宣言で基本的なところが解っていなかった件 - ConquestArrow.addEventListener();

基本的な理解がなってなくてバグをだした件について自戒もこめて書いておく。


AS3ではint/uint型が追加された。一番使うのはやはりループ用のイタレータ変数だ。

for(var i:int=0; i<100; i++){
	...
}

AS3では、int/uint型の変数はデフォルトの値は0になる。

int データ型の変数のデフォルト値は 0 です。

データ型の詳細 -- Flex 2.01

uint データ型の変数のデフォルト値は 0 です。

データ型の詳細 -- Flex 2.01

つまりさっきのコードはこうも書ける。

for(var i:int; i<100; i++){
	...
}

この書き方のほうが便利なので、これでいいや、と使っていたところに落とし穴があった。

落とし穴は以下のコードで簡単にわかる。

var len:uint = 10;
var len2:uint = 1;
for(var i:uint; i<len; i++){
	for(var j:uint; j<len2; j++){
		trace("i:",i,"j:",j);
	}
	len2++;
}

これで期待する出力は以下だった。

i: 0 j: 0

i: 1 j: 0

i: 1 j: 1

i: 2 j: 0

i: 2 j: 1

i: 2 j: 2

i: 3 j: 0

i: 3 j: 1

i: 3 j: 2

i: 3 j: 3

(中略)

i: 9 j: 0

i: 9 j: 1

i: 9 j: 2

i: 9 j: 3

i: 9 j: 4

i: 9 j: 5

i: 9 j: 6

i: 9 j: 7

i: 9 j: 8

i: 9 j: 9

が、実際の出力は以下である。

i: 0 j: 0

i: 1 j: 1

i: 2 j: 2

i: 3 j: 3

i: 4 j: 4

i: 5 j: 5

i: 6 j: 6

i: 7 j: 7

i: 8 j: 8

i: 9 j: 9

どういうことかというと、

  1. 個人的にはint/uintで宣言すれば0で初期化される~と思っていたのだが、実際は単にデフォルトで0が入っているだけで初期化されているわけではなかった
  2. AS3のスコープはブロック単位ではない
  3. つまり、jの値は外側のforループの度に0になるのではなく以前の値を引き継ぐ

以下のようにすれば期待通りになる。

var len:uint = 10;
var len2:uint = 1;
for(var i:uint=0; i<len; i++){
	for(var j:uint=0; j<len2; j++){
		trace("i:",i,"j:",j);
	}
	len2++;
}

結論

  • 楽をしようとしてはいけない
トラックバック - http://actionscript.g.hatena.ne.jp/ConquestArrow/20070520