|
|
|||||
Регистрация: Jul 2006
Сообщений: 170
|
Нумерование кнопок
Делаю первый проект на AS3, столкнулся с такой проблемой, есть массив, который хранит классы.
далее я создаю циклом кнопки и хочу сделать так, нажал 1ую кнопку, вызвали класс array[0] ну и в таком духе... В AS2 я это реализовывал таким образом: ................... for(var i:Number=0; i<15; i++){ var btn:MovieClip=this.createEmptyMovieClip("btn"+i, this.getNextHighestDepth()); btn.id=i var label:TextField = btn.createTextField("label", 1, 0, 0, 150, 20); label.text = "btn"+i; btn.onRelease=function(){ trace(this.id) //array[this.id] } } ................... Последний раз редактировалось tikhop; 02.07.2008 в 06:34. |
|
|||||
Так не интересно когда 15 кнопок одна на другой. вот пример первого кадра. Библиотека чистая.
//создать текстовое поле var my_txt:TextField = new TextField(); var my_sheet:StyleSheet = new StyleSheet(); my_txt.width=500; my_txt.height=200; my_sheet.parseCSS(".red_text {font-family: Comic Sans MS; font-size: 30; color: #FF00CC;}"+ ".bluetext {color: #0000CC;}"); my_txt.styleSheet = my_sheet; my_txt.multiline=true;//многострочность my_txt.htmlText = "<span class='red_text'>Прикол</span><span class='bluetext'>Да уж прикол так прикол</span>"; //добавить текст на рабочее поле addChild(my_txt); //массив для кнопок мовиков var mc_but_ar:Array = new Array(); //сделать табличку кнопок var i,j,c:int; c=0; for (i=0;i<3;i++) { for (j=0;j<3;j++) { mc_but_ar.push(my_but(c,my_txt));//кнопку в массив и привязать к тексту mc_but_ar[c].x=i*200;//поставить координаты х для мувика в массиве mc_but_ar[c].y=j*50+200;//поставить координаты y для мувика в массиве c++; } } function my_but(num:int,out_txt:TextField):MovieClip { //создать пустой мови var in_mc = new MovieClip(); //добавить мови на рабочее поле addChild(in_mc); //начало текстового поля var in_txt:TextField = new TextField(); in_txt.autoSize = TextFieldAutoSize.CENTER; var sheet:StyleSheet = new StyleSheet(); sheet.parseCSS("my_s {font-family: Times New Roman, Times, _serif; font-size: 30;}"); in_txt.styleSheet = sheet; in_txt.htmlText = "<my_s>Прикол"+num+"</my_s>"; //конец текстового поля //нарисовать квадрат на мувике по размерам тестового поля in_mc.graphics.lineStyle(1, 0x000000, 0.5 ); in_mc.graphics.beginFill( 0x990000, 0.5 ); in_mc.graphics.drawRect(in_txt.x, in_txt.y, in_txt.width, in_txt.height); in_mc.graphics.endFill(); //конец нарисовать квадрат на мувике по размерам тестового поля //добавить текстовое поле на мовиклип in_mc.addChild(in_txt); //убрать кликабельность текстового поля in_txt.mouseEnabled = false; //сделать палец на мови клипе in_mc.buttonMode = true; //создание подсветки var b_filtr:Array = new Array(); var empty_filtr:Array = new Array(); var filter:BitmapFilter = new GlowFilter(0xFF0000,1,10,10,5,BitmapFilterQuality.HIGH,false,true); b_filtr.push(filter); //конец подсветки in_mc.addEventListener(MouseEvent.MOUSE_MOVE,in_mc_m_move_func);//движение function in_mc_m_move_func(MouseEvent) {in_mc.filters = b_filtr;} in_mc.addEventListener(MouseEvent.MOUSE_OUT,in_mc_out_func);//мышка выход за пределы function in_mc_out_func(MouseEvent) {in_mc.filters = empty_filtr;} in_mc.addEventListener(MouseEvent.MOUSE_UP,in_mc_m_up_func);//мышка нажатие function in_mc_m_up_func(MouseEvent) {trace("HELLO"); out_txt.htmlText=out_txt.htmlText+ "<span class='red_text'>Фишка</span><span class='bluetext'>"+num+"</span><br>"; my_txt.scrollV=my_txt.maxScrollV;//промотать на конец внешнее текстовое поле } return in_mc;//Возвратить мови клип } //конец кода первого кадра Последний раз редактировалось Alex Lexcuk; 02.07.2008 в 12:43. |
|
|||||
сори не вникал, что нарисовал Alex Lexcuk
но вопрос только в том, что тебе нужны кнопки у которых есть свойство id и/или ссылка на нужный класс package { import fl.controls.Button; public class MyButton extends Button { public var id:int; public var cl:Class; public function MyButton(id:int, cl:Class) { this.id = id; this.cl = cl; } } } теперь по клику будем все знать, на кого нажали и что делать package { import flash.display.*; import flash.events.MouseEvent; public class Main extends Sprite { private var classArr:Array; public function Main():void { classArr = [A, B, Z]; for (var i:int = 0; i < classArr.length; i++) { var but:MyButton = new MyButton(i, classArr[i]); but.x = 10; but.y = 10 + 30 * i; but.label = "but" + i; but.addEventListener(MouseEvent.CLICK, clickHandler); addChild(but); } } private function clickHandler(e:MouseEvent):void { var but:MyButton = e.target as MyButton; trace( "but.cl : " + but.cl ); //addChild(new but.cl()); trace( "but.id : " + but.id ); } } } |
|
|||||
Регистрация: Jul 2006
Сообщений: 170
|
Возникла проблемма.
Создаю массив с классами: Далешь делаю также как написал silin и мне при компиляции выскакивает ошибка, что не возможно отконвертировать partitionArray[i] в Class. Подскажите с чем это может быть связанно? Если что могу выложить исходник |
|
|||||
ты создаешь не массив с классами, а непонятно что
вообще-то ругаться должен еще раньше, там где ты пишешь Contacts(), например.. если Contacts это класс, то Contacts() может использоваться только для приведения типа, выглядеть это должно как Contacts(someObj) и возвращать объект класса Contacts |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Вопрос в тему. допустим я создал динамически объекты (10 тестфФилдов) в конструкторе в цикле. задал им свойство имя. как достучатся до них выйдя из цикла?
package ru.islandsworld { import flash.display.Sprite; import flash.text.TextField; public class Main extends Sprite { public function Main():void { for (var i:int = 0; i < 10; i++) { var txt:TextField = new TextField(); txt.name = "txt" + i; txt.x = 50; txt.y = i*20; txt.text = String(txt.name); addChild(txt); } } } } в AS2 MovieClip был наследником Object, соответственно динамическим и можно было получит доступ к текстфилдам как Как быть в AS3? Сам спросил, сам отвечу)) думаю пригодится . Помог :топик package ru.islandsworld { import flash.display.Sprite; import flash.text.TextField; dynamic public class Main extends Sprite { public function Main():void { for (var i:int = 0; i < 10; i++) { var txt:TextField = new TextField(); this["txt" + i] = txt; txt.name = "txt" + i; txt.x = 50; txt.y = i*20; txt.text = String(txt.name); addChild(txt); } // Доступ к динамическому полю this.txt3.text = "ddd"; } } }
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 22.08.2008 в 11:41. Причина: нашел ответ сам, но думаю пригодится другим |
|
|||||
Цитата:
гораздо лучше использовать: и убрать dynamic
__________________
я могу стать всем, если только захочу |
|
|||||
Цитата:
Саый лучший способ это отключить автосоздание классов для инстансов на сцене и в классе объявить переменную, как Public. Вот это будет "грамотно" |
|
|||||
Цитата:
__________________
я могу стать всем, если только захочу |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
Спасибо, самое то,у меня не получилось через getChildByName без as.
__________________
Отряд Котовскага |
Часовой пояс GMT +4, время: 17:33. |
|
« Предыдущая тема | Следующая тема » |
|
|