forked from: flash on 2009-12-30
つくっててなんだかわからなくなってきた
方向キーで青い丸が動く 緑を押しのける
/**
* Copyright derburg ( http://wonderfl.net/user/derburg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/ilHL
*/
// forked from derburg's flash on 2009-12-30
//つくっててなんだかわからなくなってきた
//方向キーで青い丸が動く 緑を押しのける
package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.text.TextField;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Loader;
import flash.net.URLRequest;
[SWF(width="500",height="500" ,frameRate="30", backgroundColor="0x9999ff")]
public class testFlash extends Sprite{
public const stageW:uint = stage.stageWidth;
public const stageH:uint = stage.stageHeight;
private var ball:Ball;
private var enem:Ball;
private var enems:Array;
private var up_flag:Boolean;
private var down_flag:Boolean;
private var left_flag:Boolean;
private var right_flag:Boolean;
public function testFlash():void{
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
var bmpDat:BitmapData= new BitmapData( 500, 500, false, 0x000000 );
var bmp:Bitmap= new Bitmap( bmpDat );
addChild( bmp );
up_flag = false;
down_flag = false;
left_flag = false;
right_flag = false;
ball = new Ball(20,0x0044ff);
ball.x=250;
ball.y=340;
addChild(ball);
enems = new Array();
for(var i:int = 0; i < 40; i++){
var e:Ball = new Ball(10,0x55ff99);
e.x=Math.random()*500;e.y=Math.random()*500;
enems.push(e);
addChild(e);
}
stage.addEventListener(Event.ENTER_FRAME,onFrame);
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP,onKeyUP);
}
public function onFrame(e:Event):void{
if(up_flag == true)ball.y-=3;
if(down_flag == true)ball.y+=3;
if(right_flag == true)ball.x+=3;
if(left_flag == true)ball.x-=3;
if(ball.x < ball.width/2)
ball.x=ball.width/2;
if(ball.x > (500 - ball.width/2))
ball.x=500 - ball.width/2;
if(ball.y < ball.height/2)
ball.y=ball.height/2;
if(ball.y > 500 - ball.height/2)
ball.y=500 - ball.height/2;
for(var i:int = 0;i<enems.length;i++)
{
collision_m_e(ball,enems[i]);
}
for(var j:int = 0;j<enems.length;j++)
{
for(var k:int =0;k<enems.length;k++)
{
if(j != k)
{
collision(enems[j],enems[k]);
}
}
}
}
public function collision_m_e(b1:Ball,b2:Ball):void{
var dx:Number = Number(b2.x - b1.x);
var dy:Number = Number(b2.y - b1.y);
var dlen:Number = Math.sqrt(Math.pow(dx,2)+Math.pow(dy,2));
if(dx == 0.0 && dy ==0.0)
{
dx+=Math.random();
}
var rad:Number = Math.atan2(dy,dx);
var minlen:Number = b1.width/2+b2.width/2;
if(dlen < minlen){
b2.y += Math.sin(rad)*(minlen-dlen);
b2.x += Math.cos(rad)*(minlen-dlen);
}
if(b2.x < b2.width/2)
b2.x=b2.width/2;
if(b2.x > (500 - b2.width/2))
b2.x=500 - b2.width/2;
if(b2.y < b2.height/2)
b2.y=b2.height/2;
if(b2.y > 500 - b2.height/2)
b2.y=500 - b2.height/2;
return;
}
public function collision(b1:Ball,b2:Ball):void{
var dx:Number = Number(b2.x - b1.x);
var dy:Number = Number(b2.y - b1.y);
var dlen:Number = Math.sqrt(Math.pow(dx,2)+Math.pow(dy,2));
var rad:Number = Math.atan2(dy,dx);
var minlen:Number = b1.width/2+b2.width/2;
if(dlen < minlen){
b1.y -= Math.sin(rad)*(minlen-dlen);
b1.x -= Math.cos(rad)*(minlen-dlen);
b2.y += Math.sin(rad)*(minlen-dlen);
b2.x += Math.cos(rad)*(minlen-dlen);
}
if(b1.x < b1.width/2)
b1.x=b1.width/2;
if(b1.x > (stage.stageWidth - b1.width/2))
b1.x=stage.stageWidth - b1.width/2;
if(b1.y < b1.height/2)
b1.y=b1.height/2;
if(b1.y > stage.stageHeight - b1.height/2)
b1.y=stage.stageHeight - b1.height/2;
if(b2.x < b2.width/2)
b2.x=b2.width/2;
if(b2.x > (stage.stageWidth - b2.width/2))
b2.x=stage.stageWidth - b2.width/2;
if(b2.y < b2.height/2)
b2.y=b2.height/2;
if(b2.y > stage.stageHeight - b2.height/2)
b2.y=stage.stageHeight - b2.height/2;
return;
}
public function onKeyDown(e:KeyboardEvent):void{
switch(e.keyCode){
case Keyboard.UP:
up_flag = true;
break;
case Keyboard.DOWN:
down_flag = true;
break;
case Keyboard.LEFT:
left_flag = true;
break;
case Keyboard.RIGHT:
right_flag = true;
break;
default:
break;
}
}
public function onKeyUP(e:KeyboardEvent):void{
switch(e.keyCode){
case Keyboard.UP:
up_flag = false;
break;
case Keyboard.DOWN:
down_flag = false;
break;
case Keyboard.LEFT:
left_flag = false;
break;
case Keyboard.RIGHT:
right_flag = false;
break;
default:
break;
}
}
}
}
import flash.display.Sprite;
class Ball extends Sprite{
private var _r:int;
private var _color:uint;
public function Ball(r:int, color:uint){
_r = r;
_color = color;
graphics.beginFill(_color);
graphics.drawCircle(0,0,_r);
graphics.endFill();
}
}
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.display.Loader;
class imgSprite extends Sprite{
private var _image:Loader;
function imgSprite(filename:String){
var imgurl:URLRequest = new URLRequest(filename);
_image = new Loader();
_image.load(imgurl);
addChild(_image);
}
}