Показать сообщение отдельно
Старый 15.11.2008, 12:02
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 17  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
http://www.demiart.ru/forum/index.php?showtopic=61956
Можно и на AS3
Код:
package {
	import flash.display.*;
	import flash.events.*;
	dynamic public class  TreeDoc extends Sprite{ ;//класс наследник спрайта
	public var branchSize:Number;
	public var branchCounter:int;
	public var i:int;
	public function TreeDoc() {//конструктор
		// Параметры дерева
		branchSize = 100;
		branchCounter = 0;
		new Branch(this, 300,300);
	}
	public function newBranch(_x:int, _y:int) {
		branchSize = branchSize-0.1;
		if (branchSize<10) branchSize =10;
		for (i=0;i<Math.random()*40;i++)
		if (branchCounter<100) new Branch(this, _x, _y);		
	}
}
}
import flash.display.*;
import flash.events.*;
class Branch extends MovieClip {
var doc:TreeDoc;
var endPosAr:Array;
var rad:Number, cosA:Number, sinA:Number;
var timeP:Array;
function Branch(_doc:TreeDoc,_x:int, _y:int) {
	doc = _doc;
	doc.addChild(this);
	x = _x;
	y = _y;
	endPosAr = [0,0];
	timeP = [0,0];
	addEventListener(Event.ENTER_FRAME, enterFr);
}
function enterFr(evt:Event) {
	graphics.lineStyle(doc.branchSize/20, 0x000000);//рисуем линию
	graphics.moveTo(0, 0);// Устанавливаем начальные кординаты
	// Если это не ствол, изменить угол и размер ветви
	endPosAr=[doc.branchSize,0];
	rotateForCentre([0, 0],endPosAr,Math.random()*180);
	graphics.lineTo(endPosAr[0], endPosAr[1]);
	this.removeEventListener(Event.ENTER_FRAME, enterFr);
	doc.newBranch(x+endPosAr[0], y+endPosAr[1]);	
	doc.branchCounter++;
}
function rotateForCentre(_centrePoint:Array, _objectPoint:Array, _grad:int) {
			rad = (_grad* (Math.PI/180));

			cosA = Math.cos(rad);
			sinA = Math.sin(rad);
						//trace(_objectPoint[0])
			timeP[0] = _objectPoint[0] - _centrePoint[0];//x
			timeP[1] =  _objectPoint[1] - _centrePoint[1];//y
			
			_objectPoint[0] =  _centrePoint[0] + 
			(timeP[0]*cosA + timeP[1]*sinA);

			_objectPoint[1] =  _centrePoint[1] + 
			(-timeP[0]*sinA + timeP[1]*cosA);
			
		}


}


Последний раз редактировалось Alex Lexcuk; 15.11.2008 в 13:43.