Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package example
- {
- import flash.display.DisplayObjectContainer;
- import flash.display.Sprite;
- import flash.filters.GlowFilter;
- import nape.geom.Ray;
- import nape.geom.RayResult;
- import nape.geom.Vec2;
- import nape.phys.Body;
- import nape.phys.BodyType;
- import nape.shape.Circle;
- /**
- * ...
- * @author liu wong
- *
- */
- public class laserExample extends baseExample
- {
- private var laserBody:Body;
- private var laserSprite:Sprite;
- private var points:Array;
- public function laserExample(prnt:DisplayObjectContainer):void
- {
- super(prnt);
- }
- override protected function init():void
- {
- super.init();
- space.gravity.setxy(0, 0);
- space.worldAngularDrag = Math.PI;
- space.worldLinearDrag = 0.9;
- laserSprite = new Sprite();
- laserSprite.filters = [new GlowFilter(0x770000, 1, 4, 4, 4, 3)];
- addChild(laserSprite);
- addWalls();
- addHand();
- laserBody = addCircle(320, 240, 32, (Math.PI / 180) * -0);
- points = new Array();
- var k:int = 10;
- var i:int;
- for (i = 0; i < k; i++)
- {
- addCircle(random(40, 600), random(40, 440), random(16, 32));
- addRectangle(random(40, 600), random(40, 440), random(32, 64), random(32, 64), Math.random() * Math.PI * 2, false);
- }
- }
- override public function free():void
- {
- laserBody.space = null;
- laserBody = null;
- points.length = 0;
- points = null;
- super.free();
- }
- private function doLaser(src:Vec2, dir:Vec2, normal:Vec2, dst:Vec2):Boolean
- {
- var r:Ray = new Ray(src, dir);
- var rr:RayResult = space.rayCast(r);
- if (rr == null)
- return false;
- normal.set(rr.normal.reflect(dir));
- dst.set(r.at(rr.distance * 0.999));
- return true;
- }
- private function doAllLasers():void
- {
- var k:int = 10;
- var i:int;
- var v1:Vec2 = laserBody.position.copy();
- var v2:Vec2 = Vec2.fromPolar(1, laserBody.rotation);
- var v3:Vec2 = new Vec2(0, 0);
- var v4:Vec2 = new Vec2(0, 0);
- points.length = 0;
- points.push(v1.copy());
- for (i = 0; i < k; i++)
- {
- var b:Boolean = doLaser(v1, v2, v3, v4);
- if (b == false)
- return;
- points.push(v4.copy());
- v1.set(v4);
- v2.set(v3);
- }
- }
- private function updateLaser():void
- {
- doAllLasers();
- laserSprite.graphics.clear();
- laserSprite.graphics.lineStyle(2, 0xff0000);
- var k:int = points.length;
- if (k > 1)
- {
- laserSprite.graphics.moveTo(points[0].x, points[0].y);
- var i:int;
- for (i = 1; i < k; i++)
- {
- laserSprite.graphics.lineTo(points[i].x, points[i].y);
- }
- }
- }
- override public function update():void
- {
- super.update();
- updateLaser();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement