『 遺伝的アルゴリズムで歩行動作獲得への道 ~2歩目~ 』

2009 年 11 月 11 日

earthwalker02

どうも間が空いてしまってすいません。
前回の何も学習しなかったバージョンに脳みそを加えて、単純なGAを組み込んできました。ageが世代、fitnessがその世代の生物が記録した中で一番良かった成績です。この数値が上がっていけば学習が成功しているといえます。3匹しか見えていませんが、一応裏側で10匹ほど動いています。

» Earthwalker Prototype02

う~ん、学習してるような、してないような。なんとも微妙な感じです。まだまだ改良が必要です。
GAの基本設定としては、エリート(淘汰や突然変異を受けず、次世代にそのまま残される個体)は生成最優秀の一匹、交配は2点交叉が1ペア、パラメータ化と評価方法は前回に示したとおり。かなり勘です。

ちなみに、今回から描画をnutsuさん作のFrocessingでおこなっています。生物の体が曲線描画になっているところなんかそうですね。ありがたやありがたや。

見た目が貧相なので、エンジンをバージョンアップしていくと共に、次回はもうちょっとかっこよくなる予定です。思いっきり趣味に走ります。メーターとかグラフをいっぱいつけます。(*゚∀゚)=3 ムッハー!!。ではまた。

『 遺伝的アルゴリズムで歩行動作獲得への道 ~1歩目~ 』

2009 年 10 月 29 日

Earthwalker

僕の大好きな、「マッチ箱の脳」という本があります。
人工知能についてとってもおもしろく解説してあるこの本を書いたのは、「がんばれ森川君2号」や「アストロノーカ」などの人工知能が組み込まれたゲームを作ったすごい人です。

» マッチ箱の脳(AI)―使える人工知能のお話

僕はアストロノーカしかやったこと無いのですが、人工知能が自然にゲームに組み込まれていてすごいなあと当時思ってました。中ではすっごい難しいことをやっているのに。その影響か、僕も人工知能を組みたいと思ってこれまで何度もチャレンジしては挫折してきましたが、懲りずにまたチャレンジすることにしました。

てなわけで、シャクトリムシに歩き方を学習させようと思います。昔は全部自分で作ろうとして失敗したけど、今は高速なAS3や物理エンジンライブラリもあるし、やってみよーGOGO!というわけで今はこんな感じ。

» Earthwalker Prototype01

ちなみに、まだ人工知能を組み込んでいないので、どれだけ待ってもうまく歩けません。クリックでカメラを切り替えるなどという、見た目な機能ばかり付けています。さいさき不安です。
Continue Reading »

『 縦横比を保ったままリサイズするBoundaryResizerクラス 』

2009 年 10 月 7 日

読み込んだ画像をサムネイル枠内に収まるように縦横比を保ったままリサイズしたり、ステージの背景に敷くために拡大したりすることがあると思います。その都度計算式を書くのは面倒なので、クラス化しました。地味によく使っているので紹介します。
このクラスはRectangleの情報をやりとりするだけなので、Bitmap以外にも何にでも使えます。

サンプル
ご覧いただければ何が目的のライブラリなのか、だいたい分かると思います。

ダウンロード
» 通常版はこちら
» BoundaryResizer.asファイルのみ (拡張子をasに変更してください)

使い方
コードはこんな感じで。

var bmp:Bitmap = ...
var target:Rectangle = bmp.bitmapData.rect;
var boundary:Rectangle = new Rectangle(50, 50, 300, 300);
var scaleMode:String = BoundaryResizer.NO_BORDER;
var align:String = BoundaryResizer.TOP_LEFT;
var resized:Rectangle = BoundaryResizer.resize(target, boundary, scaleMode, align);
bmp.x = resized.x;
bmp.y = resized.y;
bmp.width = resized.width;
bmp.height = resized.height;

Continue Reading »

『 Bitmapのsmoothingプロパティ変更のタイミング 』

2009 年 10 月 7 日

Bitmapインスタンスのsmoothingプロパティは、そのインスタンスのbitmapDataがnullのときに変更しても効かない。ということを今更知ったというお話。

var bmp:Bitmap = new Bitmap();
bmp.smoothing = true;
bmp.bitmapData = bmd;
trace(bmp.smoothing); //false … smoothingが効いてない
var bmp:Bitmap = new Bitmap();
bmp.bitmapData = bmd;
bmp.smoothing = true;
trace(bmp.smoothing); //true … smoothingが効いてる

bitmapDataを入れ替えた後も、smoothingを設定し直さなければならない。

var bmp:Bitmap = new Bitmap();
bmp.bitmapData = bmd1;
bmp.smoothing = true;
bmp.bitmapData = bmd2;
trace(bmp.smoothing); //false … smoothingが効いてない
var bmp:Bitmap = new Bitmap();
bmp.bitmapData = bmd1;
bmp.smoothing = true;
bmp.bitmapData = bmd2;
bmp.smoothing = true;
trace(bmp.smoothing); //true … smoothingが効いてる

『 QuickBox2D 1.0 正式版リリース 』

2009 年 9 月 30 日

今までアルファ版だったのに、いつの間にかQuickBox2D 1.0がリリースされていました。QuickBox2DっていうのはActionSnippetのZevan氏が作ってる、Box2DFlashAS3を簡単に扱えるようにするライブラリです。このブログでも何度か紹介させていただいてます。超オススメ。

なので久々にQuickBox2Dネタを書こうとActionSnippetを見てみると、僕の知らないサンプルが30個以上。凄い、どれを紹介しようか迷う。というか機能が増えすぎてよくわからん、やばい!というわけで何日かに分けてこのエントリに、サンプルがどんなことをやっているのか、どこの部分がキモなのかだけ勉強がてら書いてみます。間違っていればどうぞ突っ込みお願いします。
Continue Reading »

『 ESECLOCKその後・・・ そしてKIBEQLOCKへ・・・ 』

2009 年 8 月 26 日

kibeqlock

かなーり前に、Eseclock (UNIQLOCKぽい時計を簡単に作れるという、yossy氏作のライブラリ) を、さらにUNIQLOCKっぽく改造したという連載をしたことがありました。

» 『Eseclockを改造しました
» 『続・Eseclockを改造しました
» 『終・Eseclockを改造しました

そもそも、なんでそんな事をしたのかというと、あるFlashを作るためでした。それがこれです。

» KIBEQLOCK

Continue Reading »

『 WordPress2.8へのアップデートでShadowboxが効かなくなる件 』

2009 年 8 月 4 日

現在WordPress2.8へアップデートの影響によりShadowbox JSプラグインが効かなくなっており、ブログ内Flashの閲覧に不具合が出ています。現在対策中なので、少々お待ちください。対策が完了次第まとめます。

追記 09.08.04
Shadowboxが復活しました。
同じような目にあった人がサッと復帰できるようにまとめておきます。

Continue Reading »

『 Shift-JISやEUC-JPのXMLを読み込むSimpleXMLLoaderクラス 』

2009 年 7 月 30 日

先日のエントリ『AS3の標準XMLパーサ ちょっとしたまとめ』で、余計な説明を省くために作ったSimpleXMLLoaderクラスでしたが、使ってみたら予想以上に便利だったのでバージョンアップしてみました。まあ大したことはやっていなくて、今までutf-8専用だったところを、好きな文字コードで書かれたxmlを読み込めるようにしただけです。

» SimpleXMLLoader.as (拡張子をasに変更してください)

例をどうぞ。使い方としては、loadメソッドにオプションとして文字コードを指定できようになっただけで、他は変わっていません。なお、エラー処理付きのサンプルは先日のエントリに載せています。

//Shift-JISで書かれたxmlを読み込む
var loader:SimpleXMLLoader = new SimpleXMLLoader();
loader.onLoadComplete = onLoadComplete;
loader.load("shift-jis.xml", SimpleXMLLoader.SHIFT_JIS);

function onLoadComplete(xml:XML):void {
  trace(xml + "を読み込みました。ね?簡単でしょ?");
}

Continue Reading »

『 一定時間後に関数を一度だけ実行するDelayExecutorクラス 』

2009 年 7 月 26 日

DelayExecutorクラス
Timerは手続きが多くて面倒、setTimeoutは何故かしっくりこない人のための、一定時間後に指定した関数を一度だけ実行するクラスです。いわゆる遅延処理。

» DelayExecutor.as (拡張子をasに変更してください)

以下の例は、全て3秒後にtrace(“完了!”)を実行します。
 
(1) new DelayExecutor()でインスタンスを生成して実行する

var exe:DelayExecutor = new DelayExecutor(func, 3000);
exe.start();

function func(executor:DelayExecutor):void {
  trace("完了!");
}

 
(2) インスタンスを生成後に、コールバック関数と遅延時間を設定して実行する

var exe:DelayExecutor = new DelayExecutor();
exe.onComplete = func;
exe.delay = 3000;
exe.start();

function func(executor:DelayExecutor):void {
  trace("完了!");
}

 
(3) インスタンス生成から実行までを、static関数を使って1行で繋げる

DelayExecutor.register(func, 3000).start();

function func(executor:DelayExecutor):void {
  trace("完了!");
}

 
(4) 無名関数を使った、さらなる省略形

DelayExecutor.register(function(executor:DelayExecutor):void {
  trace("完了!");
}, 3000).start();

Continue Reading »

『 TimerEvent.TIMERのdispatcherが分からない(追記あり) 』

2009 年 7 月 22 日

Timerクラスを継承したMyTimerクラスを作ってみる。
MyTimerはdispatchEventをオーバーライドしているので、
Timerが発行するイベント(TimerEvent.TIMERとTimerEvent.TIMER_COMPLETE)を検出できるはず・・・だった。

package {
  import flash.events.Event;
  import flash.utils.Timer;

  public class MyTimer extends Timer {

    public function MyTimer(delay:Number, repeatCount:int = 0):void {
      super(delay, repeatCount);
    }

    /**
     * dispatchEventをオーバーライドする
     */
    override public function dispatchEvent(event:Event):Boolean {
      trace(event.type);
      return super.dispatchEvent(event);
    }
  }
}

Continue Reading »

« Previous - Next »