flash on 2013-1-16
♥0 |
Line 149 |
Modified 2013-01-17 00:05:27 |
MIT License
archived:2017-03-30 22:54:57
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/szg4
*/
package {
import flash.text.TextField;
import flash.display.Graphics;
import flash.events.Event;
import flash.display.Sprite;
public class FlashTest extends Sprite {
public var gridw:Number = 16;
public var gridh:Number = 16;
public function FlashTest() {
var mwidth:int;
var mheight:int;
var num:int;
var i:int;
var k:int;
var yt:int;
var t:int;
mwidth = 64;
mheight = 64;
num = mwidth * mheight;
var vec:Vector.<int> = new Vector.<int>(num, false);
for (i =0; i < num; i++)
{
vec[i] = Math.random() * 2;
}//nexti
graphics.clear();
//graphics.lineStyle(1,0);
//graphics.drawCircle(0,0,100);
for ( i= 0; i < mheight; i++)
{
yt = i * mwidth;
for (k = 0; k < mwidth; k++)
{
t= vec[k+yt];
if (t > 0)
{
graphics.beginFill(0xFF0000FF,0.5);
graphics.drawRect(k*gridw,i*gridh,gridw,gridh);
graphics.endFill();
}
}
}//nexti
deb = new Sprite();
addChild(deb);
dt = new TextField();
addChild(dt);
dt.width = 400;
dt.height = 200;
stage.addEventListener(Event.ENTER_FRAME, onEnter);
}//ctor
public var deb:Sprite;
public var dt:TextField;
public var ang:Number = 0;
public function onEnter(e:Event):void
{
var minx:Number;
var minz:Number;
var maxx:Number;
var maxz:Number;
var kx:Number;
var kz:Number;
var hx:Number;
var hz:Number;
var g:Graphics;
var dist:Number;
var fov:Number;
var a2:Number;
var nx1:Number;
var ny1:Number;
var nx2:Number;
var ny2:Number;
var nx3:Number;
var ny3:Number;
var k:int;
var i:int;
//dt.text = 0;
dist = 256;
fov = 60;
a2 = (fov/2) * (3.1415/180);
nx1 = Math.sin(ang+a2);
ny1 = -Math.cos(ang+a2);
nx2 = -Math.sin(ang-a2);
ny2 = Math.cos(ang-a2);
nx3 = Math.cos(ang);
ny3 = Math.sin(ang);
dt.text = " nx1 " +nx1 + " ny1 " + ny1 + " \n";
ang += 0.005;
g = deb.graphics;
g.clear();
g.lineStyle(2,0);
minx = maxx = mouseX;
minz = maxz = mouseY;
g.drawCircle(mouseX, mouseY, 4);
kx = mouseX + Math.cos(ang+a2) * dist;
kz = mouseY + Math.sin(ang+a2) * dist;
hx = kx;
hz = kz;
if (minx > kx) { minx = kx;}
if (maxx < kx) { maxx = kx;}
if (minz > kz) { minz = kz;}
if (maxz < kz) { maxz = kz;}
g.moveTo(mouseX, mouseY);
g.lineTo(kx,kz);
kx = mouseX + Math.cos(ang-a2) * dist;
kz = mouseY + Math.sin(ang-a2) * dist;
g.moveTo(mouseX, mouseY);
g.lineTo(kx,kz);
if (minx > kx) { minx = kx;}
if (maxx < kx) { maxx = kx;}
if (minz > kz) { minz = kz;}
if (maxz < kz) { maxz = kz;}
g.moveTo(hx,hz);
g.lineTo(kx,kz);
g.drawRect(minx,minz,maxx-minx,maxz-minz);
var sx:int;
var sz:int;
var wx:int;
var wz:int;
sx = Math.floor(minx/gridw);
sz = Math.floor(minz/gridh);
wx = 1+Math.ceil((maxx - minx)/gridw);
wz = 1+ Math.ceil((maxz - minz)/gridh);
g.lineStyle(2,0xFF0000);
g.drawRect(sx*gridw, sz*gridh, wx*gridw, wz*gridh);
dt.appendText( " Total: " + (wx*wz) );
var ex:int;
var ez:int;
var yt:int;
var cx:Number;
var cz:Number;
ex = sx+wx;
ez = sz+wz;
g.lineStyle(2,0);
var c:int;
c = 0;
for (i = sz; i < ez; i++)
{
//yt = i * mwidth;
for (k = sx; k < ex; k++)
{
cx = (k*gridw + (gridw*0.5)) - mouseX;
cz = (i*gridh + (gridh*0.5)) - mouseY;
if ( (cx*nx1 + cz*ny1) < -16) { continue;}
if ( (cx*nx2 + cz*ny2) < -16) { continue;}
if ( (cx*nx3 + cz*ny3) > dist-16) { continue;}
c += 1;
g.drawCircle(cx+mouseX,cz+mouseY,5);
// g.drawRect(k*gridw,i*gridh,gridw,gridh);
}//nextk
}//nexti
dt.appendText("\n Draw: " + c + " Save " + ((wx*wz)-c));
dt.appendText("\n Approx: " + (c*4*2) + " tris ");
}//onenter
}//classend
}