Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.07.2008, 06:26
tikhop вне форума Посмотреть профиль Отправить личное сообщение для tikhop Найти все сообщения от tikhop
  № 1  
Ответить с цитированием
tikhop

Регистрация: Jul 2006
Сообщений: 170
Question Нумерование кнопок

Делаю первый проект на AS3, столкнулся с такой проблемой, есть массив, который хранит классы.
Код:
array[0]=new A()
array[1]=new B()
array[n]=new Z()
далее я создаю циклом кнопки и хочу сделать так, нажал 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.
Старый 02.07.2008, 12:39
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 2  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Так не интересно когда 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.
Старый 02.07.2008, 16:44
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 3  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
сори не вникал, что нарисовал 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 );
		}
	}
}

Старый 10.07.2008, 13:36
tikhop вне форума Посмотреть профиль Отправить личное сообщение для tikhop Найти все сообщения от tikhop
  № 4  
Ответить с цитированием
tikhop

Регистрация: Jul 2006
Сообщений: 170
Возникла проблемма.
Создаю массив с классами:
Код:
partitionArray=[ChangeBg(bgPicArray), Contacts()];
Далешь делаю также как написал silin и мне при компиляции выскакивает ошибка, что не возможно отконвертировать partitionArray[i] в Class.
Подскажите с чем это может быть связанно?
Если что могу выложить исходник

Старый 10.07.2008, 14:22
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
ты создаешь не массив с классами, а непонятно что
вообще-то ругаться должен еще раньше, там где ты пишешь Contacts(), например..
если Contacts это класс, то Contacts() может использоваться только для приведения типа, выглядеть это должно как Contacts(someObj) и возвращать объект класса Contacts

Старый 22.08.2008, 11:02
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 6  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Вопрос в тему. допустим я создал динамически объекты (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, соответственно динамическим и можно было получит доступ к текстфилдам как
Код:
                            for (var i= 0; i < 10; i++) 
				{
				this["txt"+i"].text ="что-то там.."
				}
Как быть в 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. Причина: нашел ответ сам, но думаю пригодится другим
Старый 22.08.2008, 17:45
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 7  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
Сам спросил, сам отвечу))
думаю пригодится .
плохой способ
гораздо лучше использовать:
Код:
(this.getChildByName("txt1") as TextField)
и убрать dynamic
__________________
я могу стать всем, если только захочу

Старый 22.08.2008, 17:50
ulik вне форума Посмотреть профиль Отправить личное сообщение для ulik Посетить домашнюю страницу ulik Найти все сообщения от ulik
  № 8  
Ответить с цитированием
ulik
 
Аватар для ulik

Регистрация: Apr 2007
Адрес: Moscow city
Сообщений: 286
Отправить сообщение для ulik с помощью ICQ
Цитата:
Сообщение от Felicast Посмотреть сообщение
плохой способ
гораздо лучше использовать:
Код:
(this.getChildByName("txt1") as TextField)
и убрать dynamic
Отнюдь.
Саый лучший способ это отключить автосоздание классов для инстансов на сцене и в классе объявить переменную, как Public. Вот это будет "грамотно"
__________________
Дизайн, как презерватив - каждому жмет по-своему © Я
мое: блог форум

Старый 22.08.2008, 18:34
Felicast вне форума Посмотреть профиль Отправить личное сообщение для Felicast Найти все сообщения от Felicast
  № 9  
Ответить с цитированием
Felicast
 
Аватар для Felicast

Регистрация: Feb 2008
Адрес: Череповец
Сообщений: 623
Отправить сообщение для Felicast с помощью ICQ
Цитата:
Отнюдь.
Саый лучший способ это отключить автосоздание классов для инстансов на сцене и в классе объявить переменную, как Public. Вот это будет "грамотно"
здесь идет речь о динамически созданных объектах:
Цитата:
Код:
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);
}
__________________
я могу стать всем, если только захочу

Старый 24.08.2008, 20:08
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 10  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
Цитата:
Сообщение от Felicast Посмотреть сообщение
плохой способ
гораздо лучше использовать:
Код:
(this.getChildByName("txt1") as TextField)
и убрать dynamic
Спасибо, самое то,у меня не получилось через getChildByName без as.
__________________
Отряд Котовскага

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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