![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: May 2010
Сообщений: 3
|
Доброго времени суток!
В моей Flash-работе понадобился транспортир, вернее его шкала. Так как проект еще в стадии разработки, то придется создавать его динамически. По этой причине прошу вашего совета в этом вопросе. Идея создать символ линии и вертеть его клонов на 180 градусов мне показалось безумной, а ничего другого в голову не приходит. Я надеюсь, что вы сможете подсказать иное решение этой проблемы... Заранее благодарен. |
|
|||||
|
А почему придётся создавать его динамически? Почему не нарисовать его просто, и брать из библиотеки? И для чего он нужен будет? Им что-то измерять придётся, какие у него должны быть функции, его нужно двигать, вертеть? Можно уточнить вопрос?
|
|
|||||
|
Регистрация: May 2010
Сообщений: 3
|
Вы правы, транспортир будет больше статическим (простите. дурная привычка называть динамическим всё, что создается программно).
Транспортир после создания я вертеть, двигать и прочие вещи с ним делать не буду. Он будет лишь измерителем, причем видимо больше выполняющим фукцию Graphic объекта... Но его размеры, величина линии и некоторые другие параметры мне мне нужно при необходимости изменить... Измерять им нужно отклонения стрелки. В конце работы это будет часть прибора по типу амперметра. Функции с ним я не планирую. Вопрос у меня стоит только в том, как создать шкалу из этих 180 линий(которые отличаются только поворотом на 1 градус) так, чтобы Flash не умер от потери оперативной памяти. Сколько знаю, он много объектов не любит... Последний раз редактировалось Ышву; 25.05.2010 в 02:11. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
createEmptyMovieClip, lineStyle, moveTo, lineTo спасет вас от нагромождения клипов с линией.
|
|
|||||
|
Регистрация: May 2010
Сообщений: 3
|
Если честно, не совсем понимаю, как сделать, чтобы 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(); Можно ли сделать этот код лучше, менее затратным что ли? Последний раз редактировалось Ышву; 27.05.2010 в 01:39. |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
Можно (идея не претендует не гениальность, я подсказал функции, котороые позволяют рисовать, не плодя мувиклипы, остальное - чистая математика, напрямую не относящаяся к флешу):
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(); |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
Бонус. Транспортир с цифрами, обозначающими градусы.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 23:56. |
|
|
« Предыдущая тема | Следующая тема » |
|
|