Difference between revisions of "3D Space Example.as"
m |
m |
||
Line 13: | Line 13: | ||
for ( var i = 0; i < 5; i++ ) { | for ( var i = 0; i < 5; i++ ) { | ||
attachMovie( 'ball', 'ball'+i, i ); | attachMovie( 'ball', 'ball'+i, i ); | ||
− | o = this['ball'+i] | + | o = this['ball'+i]; |
− | + | balls[i] = i; | |
− | balls[i] = | ||
j = i + 1; | j = i + 1; | ||
r = (j & 1) ? 0xff : 0; | r = (j & 1) ? 0xff : 0; | ||
Line 41: | Line 40: | ||
c = 2*Math.PI/5; | c = 2*Math.PI/5; | ||
for ( var i = 0; i < balls.length; i++ ) { | for ( var i = 0; i < balls.length; i++ ) { | ||
− | obj = balls[i]; | + | obj = _root['ball'+balls[i]]; |
b = a + c * i; | b = a + c * i; | ||
obj._x = width/2+Math.sin(b)*width/3; | obj._x = width/2+Math.sin(b)*width/3; | ||
Line 56: | Line 55: | ||
// Sort buffer by Z and synchronise rendering levels | // Sort buffer by Z and synchronise rendering levels | ||
for ( var i = 0; i < balls.length-1; i++ ) { | for ( var i = 0; i < balls.length-1; i++ ) { | ||
− | obj = balls[i]; | + | obj = _root['ball'+balls[i]]; |
var maxz = obj.az, maxp = i; | var maxz = obj.az, maxp = i; | ||
− | for ( var j = 0; j < balls.length; j++ ) | + | for ( var j = 0; j < balls.length; j++ ) { |
− | + | o = _root['ball'+balls[j]]; | |
− | + | if ( o.az > maxz ) { | |
+ | maxz = o.az; | ||
+ | maxp = j; | ||
+ | } | ||
} | } | ||
if ( maxp != i ) { | if ( maxp != i ) { | ||
− | obj.swapDepths( maxp ); | + | obj.swapDepths( _root['ball'+balls[maxp]] ); |
− | balls[i] = balls[maxp]; | + | _root['ball'+balls[i]] = _root['ball'+balls[maxp]]; |
− | balls[maxp] = obj; | + | _root['ball'+balls[maxp]] = obj; |
} | } | ||
} | } |
Revision as of 07:29, 20 March 2006
- include "Space.as"
// Instantiate a new 3D-space //createEmptyMovieClip( 'test', 1 ); //initialiseSpace( test ); //test._x = width/2; //test._y = height/2;
// testing z-ordering algorithm var balls = []; for ( var i = 0; i < 5; i++ ) { attachMovie( 'ball', 'ball'+i, i ); o = this['ball'+i]; balls[i] = i; j = i + 1; r = (j & 1) ? 0xff : 0; g = (j & 2) ? 0xff : 0; b = (j & 4) ? 0xff : 0; c = new Color(o); c.setTransform( { ra:r, ga:g, ba:b } ); }
function byDepth( a, b ) { return a.getDepth() < b.getDepth(); }
// Per frame function reduce() { now = new Date(); time = now.getTime(); //if (_root.ctr++ < 2) // for ( var i = 0; i < allSpaces.length; i++ ) // if ( allSpaces[i].active ) allSpaces[i].frame();
balls.sort( byDepth );
// testing z-ordering algorithm a += 0.01; c = 2*Math.PI/5; for ( var i = 0; i < balls.length; i++ ) { obj = _root['ball'+balls[i]]; b = a + c * i; obj._x = width/2+Math.sin(b)*width/3; obj.az = obj._xscale = obj._yscale = 50+Math.cos(b)*25; obj._y = height/2; }
// Debugging output
msg = "";
for ( var i = 0; i < balls.length; i++ )
msg = msg + i + ': '+balls[i].getDepth()+' : '+balls[i]._name+'
';
debug.htmlText = msg + '';
// Sort buffer by Z and synchronise rendering levels for ( var i = 0; i < balls.length-1; i++ ) { obj = _root['ball'+balls[i]]; var maxz = obj.az, maxp = i; for ( var j = 0; j < balls.length; j++ ) { o = _root['ball'+balls[j]]; if ( o.az > maxz ) { maxz = o.az; maxp = j; } } if ( maxp != i ) { obj.swapDepths( _root['ball'+balls[maxp]] ); _root['ball'+balls[i]] = _root['ball'+balls[maxp]]; _root['ball'+balls[maxp]] = obj; } } //}
if (0) { // oldest z-buff sort for ( var i = 0; i < balls.length-1; i++ ) { maxz = balls[i].az; maxp = i; for ( var j = i + 1; j < balls.length; j++ ) { z = balls[j].az; if ( z > maxz ) { maxz = z; maxp = j; } } if ( maxp != i ) { balls[i].swapDepths( balls[maxp] ); iname = balls[i]._name; balls[i] = balls[maxp]; balls[maxp] = iname; } } } }
createTextField( 'debug', 100, 0, 0, width, height ); with ( debug ) { selectable = true; border = false; multiline = true; wordWrap = true; html = true; }
// Test object //test.create( [ 0, 0, , 'torus', 5, 200, 5000 ] );