1. Создаем документ размером 500х500. Цвет фона - черный.
2. В первый кадр вставляем код:
Code
var xcoord:Number = 0;// инициализация координат точки
var ycoord:Number = 0;
var zcoord:Number = 0;
var r:Number = stage.stageWidth/2.5;// радиус сферы
var time:Number=0;// параметр вращения
var angle:Number=0;// еще один параметр вращения
var container:MovieClip = new MovieClip();// "ящик", в который поместим сферу
container.x=stage.stageWidth/2;
container.y=stage.stageHeight/2;
addChild(container);
var points:Array = new Array();// создаем точки
for (var theta:uint=0; theta<=180; theta+=5) {//полярный угол сферической системы координат
points[theta] = new Array();
for (var phi:uint=0; phi<360; phi+=5) {//азимутальный угол
points[theta][phi] = new Sprite();// масив точек
points[theta][phi].graphics.lineStyle();
points[theta][phi].graphics.beginFill(0x0000FF);
points[theta][phi].transform.colorTransform = changeColor(255*Math.cos(phi*Math.PI/180),255*Math.cos((180-phi)*Math.PI/180),255*Math.cos(phi*Math.PI/180));
points[theta][phi].graphics.drawCircle(0, 0, 1);
points[theta][phi].graphics.endFill();
container.addChild(points[theta][phi]);
}
}
var starter:Timer=new Timer(20);
starter.addEventListener(TimerEvent.TIMER, moveSphere);
starter.start();
function moveSphere(e:Event):void {// вращаем сферу
for (var theta=0; theta<=180; theta+=5) {
for (var phi=0; phi<360; phi+=5) {
xcoord=r*Math.sin(theta*Math.PI/180)*Math.cos((phi+time)*Math.PI/180);// переход к декартовым координатам
ycoord=r*Math.sin(theta*Math.PI/180)*Math.sin((phi+time)*Math.PI/180);
zcoord=r*Math.cos(theta*Math.PI/180);
angle=5*time*Math.PI/180;
var x1=xcoord*Math.cos(angle*Math.PI/180)+zcoord*Math.sin(angle*Math.PI/180);
var z1=-xcoord*Math.sin(angle*Math.PI/180)+zcoord*Math.cos(angle*Math.PI/180);
var newx=ycoord;
var newy=z1;
points[theta][phi].x=newx*Math.cos(.3*angle*Math.PI/180)+newy*Math.sin(.3*angle*Math.PI/180);
points[theta][phi].y=-newx*Math.sin(.3*angle*Math.PI/180)+newy*Math.cos(.3*angle*Math.PI/180);
//прозрачность делаем зависимой от углов для правдоподобия
points[theta][phi].alpha=(0.6+0.4*Math.cos((180+phi+time)*Math.PI/180))*theta/100;
}
}
//r=150+20*(Math.cos(2*time*Math.PI/180));//это если захочеся ввести пульсацию сферы
time++;
//container.rotation=time/5;//можно добавить еще один поворот
}
function changeColor(redshift, greenshift, blueshift):ColorTransform {
return new ColorTransform(1,1,1,1,redshift,greenshift,blueshift,0);
}
3. Запускаем.
Скачать