PDA

Просмотр полной версии : Звёздное небо


Котяра2006
30.10.2007, 19:43
Привет всем!

видел несколько примеров звёздного неба, но никак не могу сделать чтобы звёзды летели из центра экрана (некая область) в разные стороны. Т.е. какбы на зрителя. В аттаче пример который я намудрил но с математикой никак не получается сделать нормальную модель.

Спасибо!

telit
30.10.2007, 19:55
Просто делаешь анимацию движения звезды, в последнем кадре анимации удаляешь мувик, потом размножаешь в цикле, ставишь random rotation, и интервал.

Котяра2006
30.10.2007, 23:56
да, на словах всё просто, может кто на коде покажет...

D12
31.10.2007, 00:11
держи, код просто поставь в кадр
import flash.filters.*;
import flash.display.*;
var i:Number = 0;
var COLOR_BOX:Array = [0x9999CC, 0x00CCFF, 0x66CCFF, 0xFF99CF, 0x0033CC];
onEnterFrame = function () {
createEmptyMovieClip("star"+i, i);
with (this["star"+i]) {
beginFill(COLOR_BOX[int(Math.random()*(COLOR_BOX.length-1))]);
moveTo(-5, -1);
lineTo(-5, -1);
lineTo(5, -1);
lineTo(5, 1);
lineTo(-5, 1);
endFill();
endFill();
_x = 275;
_y = 200;
_alpha = 0;
}
this["star"+i].Go = 5+int(Math.random()*18);
this["star"+i].alf = int(Math.random()*10);
this["star"+i].angle = int(Math.random()*360);
///
var filter:BlurFilter = new BlurFilter(int(this["star"+i].Go/4), 3, 4);
var filterArray:Array = new Array();
filterArray.push(filter);
this["star"+i].filters = filterArray;
///
this["star"+i].onEnterFrame = function() {
this._xscale = this.Go*12;
rad = Math.PI/180;
this._x += Math.cos(this.angle*rad)*this.Go;
this._y += Math.sin(this.angle*rad)*this.Go;
this._rotation = this.angle;
this._visible = 0;
if (this._alpha>=50) {
this._visible = 1;
}
if (this.Go<=10) {
if (this._alpha<=120) {
this._alpha += this.alf;
}
}
if (this.Go>=11) {
if (this._alpha<=70) {
this._alpha += this.alf;
}
}
};
i += 1;
if (i>=120) {
i = 0;
}
};
///

Nirth
31.10.2007, 00:28
Угу а потом люди приходят в раздел AS 3 и спрашивают как по ссылкам обращатся к мувикам...
import flash.filters.*;
import flash.display.*;
var i:Number = 0;
var COLOR_BOX:Array = [0x9999CC, 0x00CCFF, 0x66CCFF, 0xFF99CF, 0x0033CC];

function onEnterFrame():Void {
var star:MovieClip = createEmptyMovieClip("star"+i, i);
star.beginFill(COLOR_BOX[int(Math.random()*(COLOR_BOX.length-1))]);
star.moveTo(-5, -1);
star.lineTo(-5, -1);
star.lineTo(5, -1);
star.lineTo(5, 1);
star.lineTo(-5, 1);
star.endFill();
star._x = 275;
star._y = 200;
star._alpha = 0;
star.go = 5+int(Math.random()*18);
star.alf = int(Math.random()*10);
star.angle = int(Math.random()*360);
///
var filter:BlurFilter = new BlurFilter(int(this["star"+i].Go/4), 3, 4);
var filterArray:Array = new Array();
filterArray.push(filter);
star.filters = filterArray;
///
star.onEnterFrame = mx.utils.Delegate.create(star, onStarEnterFrame);
i += 1;
if (i>=120) i = 0;
};

function onStarEnterFrame():Void
{
this._xscale = this.go*12;
rad = Math.PI/180;
this._x += Math.cos(this.angle*rad)*this.go;
this._y += Math.sin(this.angle*rad)*this.go;
this._rotation = this.angle;
this._visible = false;
if (this._alpha>=50) this._visible = true;
if (this.go<=10 && this._alpha<=120) this._alpha += this.alf;
if (this.go>=11 && this._alpha<=70) this._alpha += this.alf;
}
///

Вот переписанный код D12, весит меньше, строк меньше, работает быстрее.

D12
31.10.2007, 00:34
Спасибо, буду пробовать хоть на ошибках учится ...

ALiEN_
31.10.2007, 01:55
Немножко затюнил предыдущий код =) Теперь он еще чуточку быстрее.


import flash.filters.*;
import flash.display.*;
var i:Number = 0;
var COLOR_BOX:Array = [0x9999CC, 0x00CCFF, 0x66CCFF, 0xFF99CF, 0x0033CC];

function onEnterFrame():Void {
var star:MovieClip = createEmptyMovieClip("star"+i, i);
star.beginFill(COLOR_BOX[int(Math.random()*(COLOR_BOX.length-1))]);
star.moveTo(-5, -1);
star.lineTo(-5, -1);
star.lineTo(5, -1);
star.lineTo(5, 1);
star.lineTo(-5, 1);
star.endFill();
star._x = 275;
star._y = 200;
star._alpha = 0;
star.go = 5+int(Math.random()*18);
star._xscale = star.go*12;
star.alf = int(Math.random()*10);
star._rotation = int(Math.random()*360);

var rad = star._rotation*Math.PI/180;
star.ax = Math.cos(rad)*star.go;
star.ay = Math.sin(rad)*star.go;
///
var filter:BlurFilter = new BlurFilter(int(this["star"+i].Go/4), 3, 4);
var filterArray:Array = new Array();
filterArray.push(filter);
star.filters = filterArray;
///
star.onEnterFrame = mx.utils.Delegate.create(star, onStarEnterFrame);
i += 1;
if (i>=120) i = 0;
};

function onStarEnterFrame():Void
{
this._x += this.ax;
this._y += this.ay;
this._visible = false;
if (this._alpha>=30) this._visible = true;
if (this.go<=10 && this._alpha<=120) this._alpha += this.alf;
if (this.go>=11 && this._alpha<=70) this._alpha += this.alf;
}

Котяра2006
31.10.2007, 03:51
офигеть=))) ну ребят спасибо вам :)