Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 01.10.2006, 05:27
LiQuiDaToR вне форума Посмотреть профиль Отправить личное сообщение для LiQuiDaToR Найти все сообщения от LiQuiDaToR
  № 1  
Ответить с цитированием
LiQuiDaToR

Регистрация: Jan 2006
Сообщений: 27
Cool Освещение

Вот я решил сделать красивое освещение.
Должно получиться примерно так:

[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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:59.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.