![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2006
Сообщений: 27
|
Вот я решил сделать красивое освещение.
Должно получиться примерно так: [IMG]http://img182.**************/img182/2743/21kp4.png[/IMG] Пока всё, что получилось - вот Не могу понять, как выбрать стороны по ктотрым рисовать тень. Вот, собственно, код: import flash.geom.Point;
var lights = new Array();
var objs = new Array();
var rad = Math.PI/180;
lights.push(new Point(Stage.width/2, Stage.height/2));
objs.push({pos:new Point(0, 0), size:50, r:0});
_root.createEmptyMovieClip("render", 0);
function drawRBox(coners) {
render.lineStyle(2, 0x000080, 50);
render.moveTo(corners[0].x, corners[0].y);
render.lineTo(corners[1].x, corners[1].y);
render.lineTo(corners[2].x, corners[2].y);
render.lineTo(corners[3].x, corners[3].y);
render.lineTo(corners[0].x, corners[0].y);
}
function getRBoxCorners(pos, size, rot) {
return new Array(new Point(pos.x+Math.cos(rot-45*rad)*size, pos.y+Math.sin(rot-45*rad)*size), new Point(pos.x+Math.cos(rot+45*rad)*size, pos.y+Math.sin(rot+45*rad)*size), new Point(pos.x+Math.cos(rot+135*rad)*size, pos.y+Math.sin(rot+135*rad)*size), new Point(pos.x+Math.cos(rot+225*rad)*size, pos.y+Math.sin(rot+225*rad)*size));
}
function calcCorners(corners) {
corners2 = new Array();
for (i=0; i<4; i++) {
v = corners[i].subtract(lights[0]);
corners2[i] = {vec:v.add(lights[0]), len:v.length};
}
corners2.sortOn("len", 16); // TODO разобраться с сортировкой
}
function drawShadow() {
render.lineStyle(2, 0x800000, 50);
render.beginFill(0x800000, 25);
v = corners2[0].vec;
render.moveTo(v.x, v.y);
v2 = v.subtract(lights[0]);
v2.normalize(400);
v2 = v2.add(lights[0]);
v2.subtract(v);
render.lineTo(v2.x, v2.y);
v = corners2[1].vec;
render.moveTo(v.x, v.y);
v2 = v.subtract(lights[0]);
v2.normalize(400);
v2 = v2.add(lights[0]);
v2.subtract(v);
render.lineTo(v2.x, v2.y);
v = corners2[2].vec;
render.moveTo(v.x, v.y);
v2 = v.subtract(lights[0]);
v2.normalize(400);
v2 = v2.add(lights[0]);
v2.subtract(v);
render.lineTo(v2.x, v2.y);
v = corners2[3].vec;
render.moveTo(v.x, v.y);
v2 = v.subtract(lights[0]);
v2.normalize(400);
v2 = v2.add(lights[0]);
v2.subtract(v);
render.lineTo(v2.x, v2.y);
render.endFill();
}
Point.prototype.toCursorSmooth = function() {
this.x += (_xmouse-this.x)/20;
this.y += (_ymouse-this.y)/20;
};
function drawCross(pos) {
render.lineStyle(2, 0x008000, 50);
render.moveTo(pos.x-5, pos.y-5);
render.lineTo(pos.x+5, pos.y+5);
render.moveTo(pos.x+5, pos.y-5);
render.lineTo(pos.x-5, pos.y+5);
}
function drawLine(from, to) {
render.moveTo(from.x, from.y);
render.lineTo(to.x, to.y);
}
onEnterFrame = function () {
render.clear();
objs[0].r += Math.PI/180;
objs[0].pos.toCursorSmooth();
corners = getRBoxCorners(objs[0].pos, objs[0].size, objs[0].r);
drawRBox(corners);
calcCorners(corners);
drawShadow();
drawCross(lights[0]);
};
|
![]() |
Часовой пояс GMT +4, время: 12:59. |
|
|
« Предыдущая тема | Следующая тема » |
|
|