Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Глюки скейла (http://www.flasher.ru/forum/showthread.php?t=173286)

reQuiem 28.12.2011 13:27

Глюки скейла
 
Вложений: 1
Привет.

Столкнулся со странной проблемой.

Пытаюсь реализовать лазерный луч.

Сам луч у меня 1х1 белый пиксель с глоу, который должен тянуться и вращаться.

Код AS3:

var distance : int;
var angle : int;
function getDistance (): void
{
distance=Math.sqrt((circle_2.x - circle_1.x)*(circle_2.x - circle_1.x) + (circle_2.y - circle_1.y)*(circle_2.y - circle_1.y));
}
function getAng():void
{
angle=Math.atan2(circle_2.y - circle_1.y, circle_2.x - circle_1.x) * 180 / Math.PI;
}
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveFunc)
function mouseMoveFunc(e:MouseEvent):void
{
circle_2.x=mouseX;
circle_2.y=mouseY;
getDistance();
getAng();
laser.rotation=angle;
laser.width=distance;
laser.x=(circle_1.x+circle_2.x)/2;
laser.y=(circle_1.y+circle_2.y)/2;
}

Если не вешать второй кружок на мышку то все ок с любыми координатами.
Если убрать вращение то тоже все ок ( за исключением того что лазер всегда горизонтальный естественно)

Но вот все вместе дает проблему, мой пиксель непропорционально скейлится не только в ширину но и в длинну превращаясь в прямоугольник.

То что выходит - в аттаче.

Помогите, пожалуйста, разобраться.

TanaTiX 28.12.2011 13:33

Была у меня похожая проблема, почитай тему

ЗЫ. аттача нет.

Inet_PC 28.12.2011 13:40

Может просто стоит перерисовывать каждый раз линию, не?

reQuiem 28.12.2011 13:58

TanaTiX

Поправил, swf напрямую не приаттачился.

Тему почтиаю. спасибо.

Inet_PC

А я не рисую линию вообще. я скейлю пиксель вдоль виртуального отрезка, и каждый раз заново.

goodguy 28.12.2011 14:15

Цитата:

А я не рисую линию вообще. я скейлю пиксель вдоль виртуального отрезка, и каждый раз заново.
Лучше как раз рисовать (программно естественно).

reQuiem 28.12.2011 14:19

Цитата:

Сообщение от goodguy (Сообщение 1054076)
Лучше как раз рисовать (программно естественно).

Ок, допустим, но я делаю не линию, а именно так для того, чтобы можно было применить например фильтр глоу, или скажем нарисовать не просто белый пиксель а тайл-срез какой то кастомной полоски и скейлить ее в нормальный красивый луч.

Но пока мне сошло бы и просто глоу. Как можно применять фильтры к линии?

Inet_PC 28.12.2011 14:21

Цитата:

А я не рисую линию вообще.
Я заметил, по этому и предложил.
Цитата:

Как можно применять фильтры к линии?
Код AS3:

var line: Shape = new Shape();
//draw
line.filters = [new GlowFilter()];


reQuiem 28.12.2011 14:37

Цитата:

Сообщение от Inet_PC (Сообщение 1054078)
Я заметил, по этому и предложил.

Код AS3:

var line: Shape = new Shape();
//draw
line.filters = [new GlowFilter()];


Спасибо, попробую, но это все равно ограничивает меня в функционале, например заанимировать луч теперь сложно и тд. Хорошо бы побороть этот глюк.

crazyone 28.12.2011 15:08

Тогда тебе нужно использовать scaleX вместо width.

alatar 28.12.2011 18:19

Цитата:

Тогда тебе нужно использовать scaleX вместо width.
Это не существенно. Просто поворачивать надо после масштабирования, а не до. И перед масштабированием сбрасывать вращение.

Добавлено через 1 минуту
И да, такое поведение не глюки.


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

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