flash on 2015-1-22
♥0 |
Line 74 |
Modified 2015-01-22 21:53:28 |
MIT License
archived:2017-03-30 11:49:40
ActionScript3 source code
/**
* Copyright mutantleg ( http://wonderfl.net/user/mutantleg )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/lZWc
*/
package {
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.display.BitmapData;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public function FlashTest() {
pic = new BitmapData(465, 465, false, 0xFFffFF);
var i:int; var r:Rectangle;
r = new Rectangle();
for (i = 0; i < 16; i++)
{
r.x = Math.random() * 465; r.y = Math.random()*465;
r.width = 8+Math.random()*64;
r.height = 8+Math.random()*64;
pic.fillRect(r, 0);
}
r.x = 128; r.y = 128;
r.width = 64; r.height =64;
pic.fillRect(r, 0);
cx = 128+32;
cy = 128;
stage.addEventListener(MouseEvent.CLICK, onClick);
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var pic:BitmapData;
public function onClick(e:MouseEvent):void { cx = stage.mouseX; cy = stage.mouseY; }
public function isWall(ax:Number, ay:Number):Boolean
{
if (ax < 0) { return true; } if (ay < 0) { return true; }
if (ax >= 465) { return true; } if (ay >= 465) { return true; }
if (pic.getPixel(ax,ay) < 128) { return true; }
return false;
}//iswall
public var cx:Number = 230; public var cy:Number = 230;
public var dx:Number = 1; public var dy:Number = 0;
public var rad:Number = 8;
public var gt:int = 0;
public var state:int = 0;
public function onEnter(e:Event):void
{
graphics.clear();
graphics.lineStyle(2, 0);
graphics.beginBitmapFill(pic, null,false,false);
graphics.drawRect(0,0,465,465);
graphics.endFill();
graphics.drawCircle(cx,cy, rad);
graphics.drawCircle(cx+dx*rad,cy+dy*rad, 4);
var tmp:Number;
var ax:Number; var ay:Number;
ax = cx + -dy*rad; ay = cy+dx*rad;
graphics.lineStyle(2, 0xFF0000);
graphics.drawCircle(ax,ay,4);
//check if no ground below
if (state == 1)
{ if (isWall(ax,ay)) { state = 0; } }
else if (state == 0) {
if (isWall(ax,ay) == false)
{ state = 1; tmp = dx; dx = -dy; dy = tmp;
cx += dx * rad; cy += dy * rad; } }
//clamp to ground
var i:int;
if (state == 0)
if (isWall(ax,ay))
{ for (i = 0; i < 8; i++)
{ if (isWall(ax+dy,ay-dx)) { cx += dy; cy +=-dx; ax+=dy; ay+=-dx; } } }
//check if hit wall
if (isWall(cx,cy) == false)
if (isWall(cx+dx*rad,cy+dy*rad))
{ tmp = dx; dx = dy; dy = -tmp; }
if (gt % 2 == 0)
{ cx += dx * rad; cy += dy * rad; }
gt += 1;
}//onenter
}//classend
}