こちらから。
http://mono.kmc.gr.jp/~miz/shippo/

コメントや名前の扱いをどうしようか考え中です。

名前は「サインでええんでは」という声もあるし、でもフォームがあったほうが書きやすいよねという話もある。

コメントについては増田のトラックバックみたいな「コメントもエントリ(絵)」の
シンプルな(枝分かれしない)ものがよいかと思っています。


今回描線部のアルゴリズムを作るに当たって、nitoyonさんのコードを参考にさせていただきました。
http://d.hatena.ne.jp/nitoyon/20071121/uniqlo_grid_line

ありがとうございました。

FlexのTimerクラスを使って、ストップウォッチっぽいものをつくっていたけど、このTimerクラスの精度が渋い。

http://www.bit-101.com/blog/?p=910でもガイジンさんが言及しているけど、自分の環境でも1分に3,4秒の狂いが平気で出る。

これは、TimerクラスがTIMERイベントのHandler実行中に、停止してしまう(次のカウントを開始しない)ために起こる。

ので、クラスリファレンスからして

たとえば、SWF ファイルを 10 fps (1 秒あたりのフレーム数)、つまり100 ミリ秒間隔で実行するように設定し、80 ミリ秒でイベントを発生するようにタイマーを設定すると、Flash Player ではおよそ 100 ミリ秒間隔でイベントが実行されます。

と書いてある。

Timerクラスは便利なのですが、実時間と連動するのが必要なタスクには向かないようです。

解決策としては2つが考えられそう。

  • リファレンスに素直に従い、Timer(80)なり、適切なミリ秒を設定する。Timerの動作は、Handlerの動作の間“待ってしまう”ため狂いが大きくなる。そのため、Handlerの動作時間を見越してdelayを与えてやればいい。
  • Timerクラスの使用は諦めて、Event.ENTER_FRAMEを拾う。

上のガイジンさんもお勧めの方法。具体的にはこんな感じ。

addEventListener(Event.ENTER_FRAME, enterFrameHandler);

private function enterFrameHandler(event:Event):void
{
trace("hoge");
}

ただし、Event.ENTER_FRAMEは時間を一切考慮せず、「Flashのフレームの進捗にあわせて」発行されるため、
コンピュータの動作速度等に依存する部分が大きくなる。
また、FlexデフォルトのFPSは24であるため、場合によってはFPSを設定する作業も必要かもしれません。


FPSを変更するためには以下。
stage.frameRate = 60;で、fps=60になるはず。(ただし、表示オブジェクト追加後に呼び出さないとstageからnullが返る。
ので、例えばのcreationCompleteに対応して呼び出すのは不可。applicationCompleteあたりに対応するとうまくいく。リファレンス参照。)


今回くらいだと大して困らないけど、Flexでゲームを本格的に作ろうと思った場合、結構問題になってくると思ってメモ。

Flexをいじっていて、CanvasコンポーネントにSpriteをaddChildしようとしたところ、
以下のような例外が出て怒られてしまいます。

TypeError: Error #1034: 強制型変換に失敗しました。controls::Bezier@8a9c381 を mx.core.IUIComponent に変換できません。

DisplayObjectを継承したSpriteをCanvasにaddChildできそうな気がついしてしまいます。
*1
[http://livedocs.adobe.com/flex/2_jp/langref/mx/core/Container.html#addChild():title=
Canvasクラス(というか、Container以下のクラス)のaddChildメソッド]には以下のようなメモがついています。

メモ :メソッドに対する child 引数は DisplayObject 型として指定されますが、この引数がコンテナの子として追加されるには、IUIComponent インターフェイスを実装する必要があります。すべての Flex コンポーネントがこのインターフェイスを実装します。

IUIComponentには、UIComopnentとしてクラスを扱うためのメソッドやプロパティがまとめられています。
ContainerでaddChildなどのメソッドは一度オーバーライドされており、実質UIComponentクラスを対象としたものになっているというわけです。

Canvasクラスに対してSpriteをaddChildしようとした場合、以下のコードのようにAdapterパターンっぽく
Spriteを一旦UIComponentクラスにaddChildして、その後でこのUIComponentをCanvasにaddChildすればよいようです。

package
{
import flash.display.Sprite;
import mx.core.UIComponent;

public class mySprite extends UIComponent
{
private var sprite:Sprite;

public function mySprite()
{
super();

sprite = new Sprite();
}

override protected function createChildren():void
{
super.createChildren();

this.addChild(sprite);
}
.....
}
}

このエントリを書くに当たって、こちらのサイト(日本語訳エンジンを通して)参考にさせていただきました。
ありがとうございました。감사합니다!
「영원의 헤아림」[FLEX] 왜 Sprite는 Canvas에 addChild 안되는 걸까?
http://warkyman.tistory.com/tag/UIComponent

日本語訳
http://j2k.naver.com/j2k.php/japanese/warkyman.tistory.com/tag/UIComponent

*1:Canvas → Container → UIComponent → FlexSprite → Sprite → DisplayObjectContainer → InteractiveObject → DisplayObject → EventDispatcher → Object

coLinux

coLinux(0.7 .1)。
色々躓いたけど、Windowsと仲良く共存してくれて快適。
Python入れたりして遊んでます。

Debian(etch)のネットインスト用イメージをマウントしたため
ツールを適宜apt-getしています。
しかし、emacsが入らない。
インストールを開始した途端にシステムごとhaltしてしまうようです。
依存関係をリストして一個ずつ入れてみたところ、x11-commonというxの汎用パッケージを落とした段階でhaltしている模様。どないしようか、これ