64dotsお絵かき【Gainer】

習作のくせにいろいろつまづいてたものが一応カタチになった。
gainer miniとAS3とマトリックスLEDでお絵かき

IMG_4628.jpg
左のマス目でお絵かきして完成したら◎を押すと8*8のマトリックスLEDがトレースして光る。
×を押すと絵が消えてLEDも消える。

というしごく単純なもの。

苦労した点
・マトリックスLEDの配線(単純化を目指したために・・・)
・絵の配列をLEDの配列に変換するやり方
 →要素数64の配列を二つ作って要素の場所で同期(あんまり合理的じゃないけど)

二つ絵を描いて交互に表示させるくらいならすぐできるからやってみようかな。
あとインターネット上で通信するのはどうやるのか。調べてみよう。

汚くて恥ずかしいソースだけど自分のスキルアップのためにソースを貼っていこうかな。
助言があったらお願いします。
いろいろなところの公開していただいてるソースを参考にしていてどこを参考にしたか分からない状態なので、スクリプト内のコメントがまんまだったりするかもしれませんがご容赦ください。

flaファイルのほうにa1〜a64と送信ボタン(◎)、クリアボタン(×)を配置。
a1〜a64は1フレーム目に薄いグレー。2フレーム目に濃いグレーのオブジェクトを配置して、それぞのフレームにstop();を書いてある。

functionをどこで区切ったらいいのかとかぜんぜんわからない。

package {

import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
import gainer.*;

public class paintLED extends Sprite {

var gio:Gainer;
var i:uint;
var buttons:Array = new Array(64);
var pattern:Array;
var onoff:uint;
const ON:uint = 15;
const OFF:uint = 0;


public function paintLED():void {


gio = new Gainer("localhost", 2000, Gainer.MODE7, true);
gio.onReady = start;


}

//I/Oモジュールの準備ができたら以下を実行
public function start():void{

buttons = [a1,a2,a3,a4,a5,a6,a7,a8, //flaファイルに置いてあるa1〜a64を配列にする。
a9,a10,a11,a12,a13,a14,a15,a16,
a17,a18,a19,a20,a21,a22,a23,a24,
a25,a26,a27,a28,a29,a30,a31,a32,
a33,a34,a35,a36,a37,a38,a39,a40,
a41,a42,a43,a44,a45,a46,a47,a48,
a49,a50,a51,a52,a53,a54,a55,a56,
a57,a58,a59,a60,a61,a62,a63,a64
];

for(i=0; i<64; i++){
buttons[i].buttonMode = true; // ボタンをクリックできることを示すためにカーソルを変更
buttons[i].addEventListener(MouseEvent.MOUSE_DOWN, turnSW); // ボタンに対してイベントリスナを設定
buttons[i].onoff = 0;
}
sendButton.buttonMode = true;
sendButton.addEventListener(MouseEvent.MOUSE_DOWN,tracePict); //送信ボタンにイベントリスナを設定

clearButton.buttonMode = true;
clearButton.addEventListener(MouseEvent.MOUSE_DOWN,clearPict); //クリアボタンにイベントリスナを設定

pattern = [OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF, //パターンを初期化
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
];

}

private function turnSW(e:MouseEvent):void{ //ボタンクリックでON/OFFを切り替える機能

e.target.gotoAndPlay(2);

var index:int = buttons.indexOf(e.target); //buttonsの中のターゲットの位置をインデックスする

if(pattern[index] == OFF){ //クリックさっれたbuttonと同じ位置のpatternの要素を切り替える
pattern[index] = ON}
else if(pattern[index] == ON){
pattern[index] = OFF}
/*trace(e.target.name,e.target.onoff);*/
}

private function tracePict(e:MouseEvent):void{ //送信ボタンの機能
gio.scanMatrix(pattern); //マトリクスLEDを光らせる
/*trace(pattern);*/
}

private function clearPict(e:MouseEvent):void{ //クリアボタンの機能
pattern = [OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
OFF,OFF,OFF,OFF,OFF,OFF,OFF,OFF,
];
for(i=0; i<64; i++){
buttons[i].gotoAndStop(1);
}
gio.scanMatrix(pattern);
}

}
}

2009年05月12日 未分類 トラックバック(0) コメント(0)












管理者にだけ公開する