Просмотр полной версии : Как создать транспортир
Доброго времени суток!
В моей Flash-работе понадобился транспортир, вернее его шкала.
Так как проект еще в стадии разработки, то придется создавать его динамически.
По этой причине прошу вашего совета в этом вопросе.
Идея создать символ линии и вертеть его клонов на 180 градусов мне показалось безумной, а ничего другого в голову не приходит.
Я надеюсь, что вы сможете подсказать иное решение этой проблемы...
Заранее благодарен.
А почему придётся создавать его динамически? Почему не нарисовать его просто, и брать из библиотеки? И для чего он нужен будет? Им что-то измерять придётся, какие у него должны быть функции, его нужно двигать, вертеть? Можно уточнить вопрос?
Вы правы, транспортир будет больше статическим (простите. дурная привычка называть динамическим всё, что создается программно).
Транспортир после создания я вертеть, двигать и прочие вещи с ним делать не буду.
Он будет лишь измерителем, причем видимо больше выполняющим фукцию Graphic объекта...
Но его размеры, величина линии и некоторые другие параметры мне мне нужно при необходимости изменить...
Измерять им нужно отклонения стрелки. В конце работы это будет часть прибора по типу амперметра. Функции с ним я не планирую.
Вопрос у меня стоит только в том, как создать шкалу из этих 180 линий(которые отличаются только поворотом на 1 градус) так, чтобы Flash не умер от потери оперативной памяти. Сколько знаю, он много объектов не любит...
rainbowrussia
25.05.2010, 03:26
createEmptyMovieClip, lineStyle, moveTo, lineTo спасет вас от нагромождения клипов с линией.
Если честно, не совсем понимаю, как сделать, чтобы lineTo чертила под нужным мне градусом...
Поворот на нужный угол я нашел только для таких классов как Button, MovieClip и TextField.
Если вас не затруднит, уважаемый rainbowrussia, напишите как вы бы это сделали хотя бы для трех линий, а то я не понимаю вашей гениальной идеи.
На днях я получил рабочий вариант того, что я хотел(затратный, но рабочий).
Line._x=15;
Line._y=338;
for (i:Number=0; i<180;i++)
{
Line.duplicateMovieClip("Line"+i,this.getNextHighestDepth());
Line. _rotation=i;
}
stop();
Можно ли сделать этот код лучше, менее затратным что ли?
rainbowrussia
27.05.2010, 05:20
Можно ли сделать этот код лучше, менее затратным что ли?
Можно (идея не претендует не гениальность, я подсказал функции, котороые позволяют рисовать, не плодя мувиклипы, остальное - чистая математика, напрямую не относящаяся к флешу):
var mc = this.createEmptyMovieClip('transp', this.getNextHighestDepth());
mc._x = 250;
mc._y = 250;
var r1 = 200;
var r2 = 210;
var r3 = 215;
var r4 = 230;
for (var i = 0; i<= 180; i++) {
var ph = - Math.PI * i / 180;
mc.lineStyle(1);
mc.moveTo(Math.cos(ph)*r3, Math.sin(ph)*r3);
mc.lineTo(Math.cos(ph)*r4, Math.sin(ph)*r4);
if (Math.floor(i/5) == i/5) {
mc.lineStyle(2);
mc.moveTo(Math.cos(ph)*r2, Math.sin(ph)*r2);
mc.lineTo(Math.cos(ph)*r4, Math.sin(ph)*r4);
}
if (Math.floor(i/10) == i/10) {
mc.lineStyle(3);
mc.moveTo(Math.cos(ph)*r1, Math.sin(ph)*r1);
mc.lineTo(Math.cos(ph)*r4, Math.sin(ph)*r4);
}
}
stop();
В результате получаем мувиклип "mc" с нарисованым транспортиром.
rainbowrussia
27.05.2010, 05:54
Бонус. Транспортир с цифрами, обозначающими градусы.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.