All pastes #367401 Raw Edit

Anonymous

public text v1 · immutable
#367401 ·published 2007-02-22 09:56 UTC
rendered paste body

var Scene = _root.createEmptyMovieClip("Scene", _root.getNextHighestDepth());
var speedVector = _root.createEmptyMovieClip("Vector", _root.getNextHighestDepth());

Scene.mouseIsDown = false;

speedVector.lineStyle(1, 0x000000, 100);

var startpos = new Array();
var endpos = new Array();
var Balls = new Array();
var oldmousex = 0;
var oldmousey = 0;

function spawnBall(spawnx:Number, spawny:Number, velx:Number, vely:Number)
{
	var i = Balls.length;
	
	Balls[i] = _root.createEmptyMovieClip("Ball"+i, _root.getNextHighestDepth());
	Balls[i].attachMovie("Ball", "mc_ball"+i, Balls[i].getNextHighestDepth());
	Balls[i]._width = 20;
	Balls[i]._height = 20;
	Balls[i]._x = spawnx;
	Balls[i]._y = spawny;
	
	Balls[i].velocity = new Array();
	Balls[i].accelleration = new Array();
	
	Balls[i].velocity[0] = velx;
	Balls[i].velocity[1] = vely;
	Balls[i].mass = 10;
	Balls[i].accelleration[0] = velx;
	Balls[i].accelleration[1] = vely;

	Balls[i].onEnterFrame = function()
	{
		this.accelleration[0] = 0 / this.mass;
		this.accelleration[1] = 4 / this.mass;
		
		this.velocity[0] += this.accelleration[0];
		this.velocity[1] += this.accelleration[1];
		
		this._x += this.velocity[0];
		this._y += this.velocity[1];
		
		if(this._x > Stage.width - 10)
		{
			this._x = Stage.width - 10;
			this.velocity[0] *= -0.8;
		}
		
		if(this._x < 10)
		{
			this._x = 11;
			this.velocity[0] *= -0.6;
		}
		
		if(this._y > Stage.height - 10)
		{
			this._y = Stage.height - 10;
			this.velocity[0] *= 0.97;
			this.velocity[1] *= -0.8;
		}
	}
}

Scene.onMouseDown = function()
{
	_root.startpos[0] = _xmouse;
	_root.startpos[1] = _ymouse;

	_root.speedVector.clear();
	_root.speedVector.lineStyle(1, 0x000000, 100);
	_root.speedVector._alpha = 100;
	
	this.mouseIsDown = true;
	_root.speedVector.attachMovie("Start", "Start", 1, {_x: _xmouse, _y: _ymouse});
}

Scene.onMouseUp = function()
{
	_root.endpos[0] = _xmouse;
	_root.endpos[1] = _ymouse;

	var d1 = _root.startpos[0]-_root.endpos[0];
	var d2 = _root.startpos[1]-_root.endpos[1];
	
	var angle = (Math.atan2(d1, d2)) / Math.PI * 180;
	
	var distance = Math.sqrt(d1*d1 + d2*d2);
	
	if(angle < 0)
		angle = -angle;
	
	_root.spawnBall(_root.startpos[0], _root.startpos[1], -d1/10, -d2/10);
	
	this.mouseIsDown = false;
}

Scene.onMouseMove = function()
{
	if(this.mouseIsDown == true)
	{		
		_root.speedVector.clear();
		_root.speedVector.lineStyle(1, 0x000000, 100);

		_root.speedVector.moveTo(startpos[0], startpos[1]);
		_root.speedVector.lineTo(_xmouse, _ymouse);
		/*
		_root.speedVector.createTextField("Speed", 2, _xmouse, _ymouse-20, 200, 20);
		
		var d1 = _root.startpos[0]-_xmouse;
		var d2 = _root.startpos[1]-_ymouse;
		
		var angle = (Math.atan2(d1, d2)) / Math.PI * 180;
		
		var distance = Math.sqrt(d1*d1 + d2*d2);
		
		if(angle < 0)
			angle = -angle;
		
		_root.speedVector.Speed.text = Math.round(angle) + '° ' + Math.round(distance/2) + 'px/s';
		*/
	}
}

Scene.onEnterFrame = function()
{
	if(this.mouseIsDown)
	{
		if(_root.speedVector._alpha < 100)
		_root.speedVector._alpha+=2;
	}
	else
		_root.speedVector._alpha-=5;
		
	if(_root.Balls.length > 1)
	{		
		for(i=0; i < _root.Balls.length; i++)
		{
			for(j=i+1; j < _root.Balls.length; j++)
			{		
				var dijx = _root.Balls[i]._x - _root.Balls[j]._x;
				var dijy = _root.Balls[i]._y - _root.Balls[j]._y;
				
				var djix = _root.Balls[j]._x - _root.Balls[i]._x;
				var djiy = _root.Balls[j]._y - _root.Balls[i]._y;
				
				if((dijx*dijx + dijy*dijy) < ((10+10) * (10+10))) // Hit
				{
					trace('hit' + i);
					var hitangle = (Math.atan2(dijx, dijy)) / Math.PI * 180;
					
					var s1 = Math.sqrt(_root.Balls[i].velocity[0] * _root.Balls[i].velocity[0] + _root.Balls[i].velocity[1] * _root.Balls[i].velocity[1]);
					var s2 = Math.sqrt(_root.Balls[j].velocity[0] * _root.Balls[j].velocity[0] + _root.Balls[j].velocity[1] * _root.Balls[j].velocity[1]);
					
					if(s1 > 0)
					{
						_root.Balls[i].velocity[0] = _root.Balls[i].velocity[0] / s1;
						_root.Balls[i].velocity[1] = _root.Balls[i].velocity[1] / s1;
					}
						
					if(s2 > 0)
					{
						_root.Balls[j].velocity[0] = _root.Balls[j].velocity[0] / s2;
						_root.Balls[j].velocity[1] = _root.Balls[j].velocity[1] / s2;
					}
						
					var dijl = Math.sqrt(dijx*dijx + dijy*dijy);
					var djil = Math.sqrt(djix*djix + djiy*djiy);
					
					if (dijl > 0)
					{
						dijx = dijx / dijl;
						dijy = dijy / dijl;
					}
					
					if(djil > 0)
					{
						djiy = djiy / djil;
						djiy = djiy / djil;
					}
					
					/*if(s1 > 0)
					{
						var scale = ((_root.Balls[i].velocity[0] * dijx) + (_root.Balls[i].velocity[1] * dijy)) * -2.0;
						_root.Balls[i].velocity[0] = _root.Balls[i].velocity[0] + (dijx * scale);
						_root.Balls[i].velocity[1] = _root.Balls[i].velocity[1] + (dijy * scale);
					}
					else*/
					{
						_root.Balls[i].velocity[0] = dijx;
						_root.Balls[i].velocity[1] = dijy;
					}
					
					/*if(s2 > 0)
					{
						var scale = ((_root.Balls[j].velocity[0] * djix) + (_root.Balls[j].velocity[1] * djiy)) * -2.0;
						_root.Balls[j].velocity[0] = _root.Balls[j].velocity[0] + (djix * scale);
						_root.Balls[j].velocity[1] = _root.Balls[j].velocity[1] + (djiy * scale);
					}
					else*/
					{
						_root.Balls[j].velocity[0] = djix;
						_root.Balls[j].velocity[1] = djiy;
					}
					
					var s3 = (s1 + s2) * 0.5;
					
					_root.Balls[i].velocity[0] *= s3;
					_root.Balls[i].velocity[1] *= s3;
					_root.Balls[j].velocity[0] *= s3;
					_root.Balls[j].velocity[1] *= s3;
				}
			}
		}
	}
	
}