|
var p:point; //動き回る点 var ana:Array; //障害物 var hankei:Number; //障害物の半径
[setup, 400, 400]{ hankei = 20; //障害物の半径を決める p = new point(200, 200); //点を初期化する p.push(300, random()*Math.PI*2); //あらかじめ点をちょっとだけ動かしておく. ana = new Array(); //障害物を配列として初期化して, for(var i=0; i < 5; ++i){ for(var j=0; j < 5; ++j){ ana[i*10+j] = new point(40+i*80, 40+j*80); //縦横に規則的に並べる } } setBackColor(63, 63, 63); //あらかじめ背景をグレーとしておく }
[paint]{ clearAll(); //画面を初期化して //障害物を描画する setColor(0, 0, 0); for(var i = 0; i < ana.length; ++i){ fillOval(ana[i], hankei*2, hankei*2); } //点を描画する setColor(255, 255, 255); fillOval(p, 20, 20); }
[always]{ //現在の点の動いている方向を測って var kakudo = Math.atan2(p.y - p.preY, p.x - p.preX); p.push(5, kakudo); //その方向に点を押す
for(var i=0; i < ana.length; ++i){ //全ての障害物に対して var dist = p.distanceTo(ana[i]); //点との距離を測って if(dist < hankei){ //もし点と障害物の距離が半径以内(つまり障害物に点がぶつかっていたら) p.push(20, Math.atan2(p.y-ana[i].y, p.x-ana[i].x)); //点を障害物から離れる方向に押す } }
//以下は,もし,点が壁にぶつかったら跳ね返らせている if(p.x < 0){ p.bound(Math.PI/2, 1); p.x = 0; }
if(p.x > monitorWidth){ p.bound(Math.PI/2, 1); p.x = monitorWidth; }
if(p.y < 0){ p.bound(Math.PI, 1); p.y = 0; }
if(p.y > monitorWidth){ p.bound(Math.PI, 1); p.y = monitorWidth; }
}
|