![]() |
|
||||||||||
|
|||||
|
Регистрация: 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, время: 18:23. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|