enchant.jsが楽しくてたまらない/ちょっと気になったところ

どうもこんにちは。
怠けているうちにかれこれ二か月以上も放置してしまいました。久しぶりの更新です。

最近、enchant.js(公式サイトへ飛びます)というライブラリをよく触っています。これはJavascriptを用いたゲーム制作をスムーズにできるライブラリです。

JSでゲームとか、ちょっと昔では考えられないことでしたなあ。WebでプレイするライトなゲームといえばFlashで作るのが当たり前でしたからね。

Spriteクラスだとか、addChild()メソッドなどと、AS3にとても影響を受けたであろう言葉がいろんなところに散らばっていて、AS3しか使えないようなモノリンガルな自分にとってはうれしい限りです。

でも使っていると、気になる点がちょこっとだけ・・・
画像を表示することができるクラスSpriteなんですが、これ自身にはaddChildメソッドがありません。ではどこにあるかと言うと、別のクラスGroupにあります。 ですので、画像の上に画像を重ねたい(キャラクターの上に感情を表すグラフィックを重ねるとか)場合は、Groupクラスをコンテナとしてその中にSpriteをaddChildしなければいけないのですね。

対してAS3は、DisplayObjectContainerクラスのサブクラスならaddChildできます。こちらのSpriteはDisplayObjectContainerのサブクラスとして派生していますが、普通にaddChildが使えることに慣れていたので、enchant.jsでは使えなかったことに違和感を覚えていました。

でもよく考えたら、BitmapとかTextFieldだってaddChildは使えないんですよね。それにFlexフレームワーク内だとmxmlで作ったビューにSpriteをaddChildしたい場合はUIComponentを間にかませないとエラーを吐きますから、そう大差ないかもしれません。(Flex4からは表示オブジェクトはまた違った体系になってますが……)

とりあえず、enchant.jsのSpriteはAS3のBitmapに当たると考えておくことにします。グループ化したいときはGroupをかませる!うん、むしろ名前がすっきりしてて多分分かりやすい!(・ω・´)

そんなこんなで楽しくenchant.jsを触らせて頂いております。ゲームはまだ作りかけですが、出来上がったら9leap.netにUPしたいな。したいな……!

FlashDevelopを起動するときに出てくるよく分からないエラー

どうもこんばんわ。にしふなです。

以前から起こっている問題なんですが、FlashDevelopを開くと、よくこんなメッセージが出てきます。(FlashDevelop ver 3.3.4 RTMで確認)

バイナリ ストリーム ‘0’ に、有効な BinaryHeader が含まれていません。シリアル化と逆シリアル化の途中で、無効なストリームまたはオブジェクトのバージョン変更が発生した可能性があります。
場所 System.Runtime.Serialization.Formatters.Binary.__BinaryParser.Run()
場所 System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize(HeaderHandler handler, __BinaryParser serParser, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
場所 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize(Stream serializationStream, HeaderHandler handler, Boolean fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage)
場所 PluginCore.Utilities.ObjectSerializer.InternalDeserialize(String file, Type type)
場所 PluginCore.Utilities.ObjectSerializer.Deserialize(String file, Object obj, Boolean checkValidity)
FD起動時に出てくるエラー画面

エラー画面の終了ボタンは押せないので、このエラーが出たら仕方なく「続ける」ボタンを押していきます。ボタンを押してしばらくするとまた同じエラーが出ます。5回ぐらい続けると、やっと終了ボタンが押せるのですが、押してもFDが起動する様子はさっぱりありません。そしてまた起動させようとするとエラー・・・といった無限ループにはまってしまうのです;;

試しに、ずっと「続ける」ボタンを押したらどうなるかと思ってやってみたら、12回ぐらい押したところで(やっと)起動しました。あれ、起動するんならあのエラーは何だったんだ……

そのあとはFDを正常に終了させれば、次回起動時は特に異状もなく使うことができます。ほんとによく分からんエラーです;;

この解決法が簡単なのでこれでいいと思いますが、もうひとつ解決法があります。

FDの設定データが保存されているフォルダ(C:\Users\(ユーザー名)\AppData\Local\FlashDevelop\Settings)を開いて、そこにあるデータ「LayoutData.fdl」、「SessionData.fdb」、「SettingData.fdb」を別の場所に移動させます。
その後FDを起動して、正常に動いたら終了し、先ほど移動させたファイルを元の場所に戻してまた起動させます。これで改善するはずです。

とりあえずまとめとしては、

  • エラー画面の「続ける」ボタンをFDが起動するまで押しまくる。
  • 設定データを別の場所に移して起動&終了→データを元の場所に戻して起動

まぁしかし、一つ目の方法で解決するんでわざわざ二つ目で解決することはないですかね。

そういえば、このエラーメッセージで検索してみたんですが、FDがらみでの情報が全然出てこなかったんですよね。英語のフォーラムでそれらしい情報が一つあっただけでした。このエラーが出るのってもしかして俺だけ?と不安になってしまうのでした(;ω;`)

以下、2013/02/07追記

FlashDevelop 4.2.4 でも同じようなエラーが出るみたいです。(コメント参照)

メジャーバージョンアップまでしてるのにっ……!!