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

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

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

Регистрация: Oct 2007
Сообщений: 45
Flame Класс не может задефайнить переменную в мувиклипе

Ситуация такая:
Создал класс
Создал Мувиклип
Поместил мувиклип на сцену и прописал в Linkage для этого мувиклипа вышесозданный класс.
При старте всей флешке передаю в класс ссылку на этот мувиклип.
У классса есть метод selectedIndex, который в мувиклипе присваивает значения 2 переменным

MC.curItemValue = MC.Values[val];
MC.curItemText = MC.arrVals[val];

после этого переменная curItemValue - хранит нужное значение, а
MC.curItemText - undefined. Оба массива из которых берутся значения заполнены переменными и с ними проблем нету.

Код класса:
Код:
class ListBox extends MovieClip {	
	
	public var MC:MovieClip;
	
	function ListBox() {
	}
	
	public function addItem(iName,iVal):Void {		
		MC.arrVals.push(iName);
		MC.Values.push(iVal);
		if(MC.arrVals.length<2)
		{
			MC.curItemText = iName;
			MC.curItemValue = iVal;
			MC.sel_txt.text = iName;
		}
	}
	
	public function removeAllItems() {	
		MC.arrVals.length = 0;
		MC.Values.length = 0;
	}
	
	public function get list():Array {
		return MC.arrVals;
	}
	
	public function get currentItemText() {
		return MC.curItemText;
	}
	
	public function get value() {
		return MC.curItemValue;
	}
	
	public function set selectedIndex(val):Void {
		MC.curItemValue = MC.Values[val];
		MC.curItemText = MC.arrVals[val];
		MC.sel_txt.text = MC.curItemText;
	}
	
	//tmc - ссылка на мувик
	public function set setmc(tmc):Void{
		MC = tmc;
		MC.arrVals = new Array();
		MC.Values = new Array();
		MC.countItems = 5;
	}
	
	public function setCountItems(val:Number):Void {
		MC.countItems = val;
	}
	
}

Старый 06.03.2008, 11:28
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Код:
public var MC:MovieClip;
А зачем это вообще нужно? Если класс уже наследуется от МувиКлипа не проще ли тот клип к которому линкуется класс и использовать? А то так поди знай когда вы определяете что это за клип (MC), и когда определяете в нем какие-то параметры...

ЗЫ. ща еще умные люди понабегут %) по поводу синтаксиса ругаться будут %)
прописными - статические переменные, с прописной - имена классов.
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 06.03.2008 в 11:31.
Старый 06.03.2008, 11:59
Olegg вне форума Посмотреть профиль Найти все сообщения от Olegg
  № 3  
Ответить с цитированием
Olegg
Banned
[+1 21.02.08]
[+4 21.02.08]
[+5 13.03.08]
[+4 13.03.08]

Регистрация: Feb 2008
Сообщений: 63
покажите код на флэшке.

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

Регистрация: Oct 2007
Сообщений: 45
Цитата:
Сообщение от wvxvw
Код:
public var MC:MovieClip;
А зачем это вообще нужно? Если класс уже наследуется от МувиКлипа не проще ли тот клип к которому линкуется класс и использовать? А то так поди знай когда вы определяете что это за клип (MC), и когда определяете в нем какие-то параметры...

ЗЫ. ща еще умные люди понабегут %) по поводу синтаксиса ругаться будут %)
прописными - статические переменные, с прописной - имена классов.
К сожалению не получается без этой ссылки обращаться к прилинкованному мувику. Т.е. Мувик без проблем использует переменные и методы класса, а вот класс к переменным мувика доступ не может получить - может руки кудрявые.

Проблему на самом деле обошел, но не решил.

А по поводу синтаксиса - а что, если название класса с большой буквы начинается, то он как-то по другому воспринимается флешей?
Стаическая переменная с большой буквы - тоже не понял в чем проблема.
В PHP я знаю, что все, что относится к OOП - пишется с большой буквы - это для компилятора надо. Во флеше так же?

Код мувика (в первом и единственном кадре написан)
Код:
stop();

selec._width = lwidth;
sel_txt._width = lwidth;
sel_txt.text = curItemText;//curItemText;

var sel_pressed = false;
var sy = selec._y;
var sx = selec._x;
var sw = lwidth;//selec._width;
var sh = selec._height;
var d_sel = 0;
var count = countItems;
var over;


var main_mc = createEmptyMovieClip("main_mc",1);
var sc_mc = createEmptyMovieClip("sc_mc",2);

unvis_all = function ()
{	
	var i = 0;
	while (i < arrVals.length)
	{
		removeMovieClip(main_mc["sel" + i]);
		i++;
		sel_pressed = false;		
	}
	main_mc._x = 0;
	main_mc._y = 0;
	removeMovieClip(sc_mc["scroll"]);
	removeMovieClip(sc_mc["_scroll_bar"]);
	removeMovieClip(sc_mc["_bg_scroll"]);
	clearInterval(un_id);
}

roll = function (n, k)
{
    n.onRollOver = function ()
    {
        setProperty(n._bg, _alpha, 0);        
    }
    n.onRollOut = function ()
    {
        setProperty(n._bg, _alpha, 100);      
    }
    n.onPress = function ()
    {  
	   selectedIndex = k;
	   sel_txt.text = arrVals[k];
	   unvis_all();
    };
};

selec.onPress = function ()
{		
	if(!sel_pressed) {
		posy = sy + sh;
		posx = sx;
		ListW = lwidth;
		if(arrVals.length > count) {
			sc_mc.attachMovie("scroll", "scroll", 1003, {_x: (sx), _y: (sy + sh)});
			ListW = lwidth - sc_mc["scroll"]._width;
			scx = sx + ListW ;// sc_mc["scroll"]._width;
		}
		var i = 0;
		while (i < arrVals.length)
		{
			var cur_mc:MovieClip = main_mc.attachMovie("sel", "sel" + i, 200 + i, {_x: posx, _y: posy});       
			cur_mc._txt.autoSize = true;
			cur_mc._txt.text = arrVals[i];		
			cur_mc._bg._width = ListW;
			cur_mc._bgAlt._width = ListW;
			cur_mc._bg._height = cur_mc._height;
			cur_mc._bgAlt._height = cur_mc._height;
			posy = posy + cur_mc._txt._height;
			roll(cur_mc, i);
			i++;
		}
		msk_mc._width = main_mc["sel0"]._width+5;
		msk_mc._height = ((main_mc["sel0"]._txt._height) * count);
		msk_mc._x = sx;
		msk_mc._y = sy + sh;
		main_mc.setMask(msk_mc);
		if(arrVals.length > count)
		{
			dy = (main_mc["sel0"]._txt._height) * count - sc_mc["scroll"]._onpr._height;
			sc_mc["scroll"].onPress = function() {				
				startDrag(this,false,scx+0.5,sy + sh,scx+0.5,(sy + sh + dy));
				s = true;
			}
			sc_mc["scroll"]._x = scx;
			sc_mc["scroll"].onRelease = function(){				
				this.stopDrag();
				s = false;
			}
			sc_mc["scroll"].onReleaseOutside = function(){				
				this.stopDrag();
				s = false;
				this._onpr._reds._alpha = 0;
			}
			sc_mc["scroll"].onRollOver = function ()
			{
				this._onpr._reds._alpha = 100;
			}
			sc_mc["scroll"].onRollOut = function ()
			{
				this._onpr._reds._alpha = 0;
			}
			sc0 = Math.floor(sc_mc["scroll"]._y);
			sc100 = Math.floor((sy + sh + dy) - sc_mc["scroll"]._y);			
			mc0 = 0;
			mc100 = main_mc["sel0"]._txt._height * (arrVals.length - count);			
			moveId = setInterval(m=function() 
			{
				per = Math.floor((Math.floor(sc_mc["scroll"]._y) - sc0) * 100 / sc100);				
				main_mc._y = - per * mc100 / 100;
											 
			},10);
			sc_mc.attachMovie("_scroll_bar", "_scroll_bar", 1002, {_x: (scx+5), _y: (sy + sh*5/4), _height:(sy + sh*1/4 + dy)});
			sc_mc.attachMovie("_bg", "_bg_scroll", 1001, {_x:(scx), _y:(msk_mc._y), _width:(10), _height:(msk_mc._height)});
		}
		sel_pressed = true;
	}else{
		unvis_all();
		sel_pressed = false;
	}
}

var mouseListener:Object = new Object();

mouseListener.onMouseDown = function() {
	if (main_mc._ymouse < (sy-d_sel+Math.abs(main_mc._y)) || main_mc._ymouse > (sy+main_mc["sel0"]._height*count + d_sel + sh + Math.abs(main_mc._y)) || main_mc._xmouse < (sx-d_sel) || main_mc._xmouse > (sx + sw + d_sel+sc_mc["scroll"]._width))
	{		
		unvis_all();
	}
}
Mouse.addListener(mouseListener);

Код флешки. Тут значит Loado.comboBox - это и есть тот самый мувик.
Код:
	Loado._x = 370;
	Loado._y = 275;
	Loado._visible = true;
	Loado.comboBox.setmc = Loado.comboBox;
	for(var lNode:XMLNode = list.firstChild.firstChild; lNode != null;lNode = lNode.nextSibling)
	{
		Loado.comboBox.addItem(lNode.attributes.order_name,lNode.attributes.order_id);
	}
	///Loado.comboBox.selectedIndex = 1;
	//_global.Message(Loado.comboBox.curItemText,'','');
	Loado._ok._f = funct;
	Loado._close.onRelease = function ()
	{
		this._parent._visible = false;
	}
	Loado._ok.onRelease = function ()
	{
		_global.id = Loado.comboBox.value;
		this._f();
		this._parent._visible = false;
	}
	Loado._cancel.onRelease = function ()
	{
		this._parent._visible = false;
	}
	Loado._shapka.onPress = function ()
	{
		Loado.startDrag(false,1,15,744,700-Loado._height);
	}
	Loado._shapka.onRelease = Loado._shapka.onReleaseOutside = function ()
	{
		Loado.stopDrag();
	}
	Loado._shapka.useHandCursor = false;

Старый 06.03.2008, 13:36
Olegg вне форума Посмотреть профиль Найти все сообщения от Olegg
  № 5  
Ответить с цитированием
Olegg
Banned
[+1 21.02.08]
[+4 21.02.08]
[+5 13.03.08]
[+4 13.03.08]

Регистрация: Feb 2008
Сообщений: 63
имя класса прально,с большой буквы.Свойство класса - на ваше усмотрение,я именую с маленькой и начинаю с подчёркивания, _mc.Так видно,что это свойство класса.А вот имена методов надо слитно писать.

итить-колотить! у вас еще и в мувике код?Как-то тут всё запутано....Еще вопрос? зачем вы писали класс,если у вас так много кода на кадре и еще и в мувике? Что этот класс делает?

Старый 06.03.2008, 16:06
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
http://flasher.ru/forum/showthread.php?t=108898

Проверять watch"ем определена ли переменная (переменныэ в клипе инициализируются после выполнения конструктора)
__________________
Hell is the possibility of sanity

Старый 10.03.2008, 12:54
Omar2002 вне форума Посмотреть профиль Отправить личное сообщение для Omar2002 Найти все сообщения от Omar2002
  № 7  
Ответить с цитированием
Omar2002

Регистрация: Oct 2007
Сообщений: 45
эм - в общем это я заменитель комбобокса стандартного писал. Посколько этих комбобоксов на сцене много, то решил сделать их как бы универсальными, т.е. есть класс - в котором методы хранятся (т.е. методы имеют те же имена, что и у стандартного компонента) и есть мувиклип, который я выкладываю прямо на сцену. Т.е. класс нажун был только для того, чтобы на переписывать большие куски кода, которые были со времен стандартного комбобокса.
Проблема была в том, что надо было все данные хранить не в классе, т.к. класс один на все комбобоксы сцены, для этого я и передавал ссылку на каждый мувик (комбобокс на сцене), а по этой ссылку создавал у мувика переменные и массивы.

Старый 10.03.2008, 14:14
Fann вне форума Посмотреть профиль Отправить личное сообщение для Fann Найти все сообщения от Fann
  № 8  
Ответить с цитированием
Fann
 
Аватар для Fann

Регистрация: Jun 2006
Адрес: crimea
Сообщений: 69
Отправить сообщение для Fann с помощью ICQ
Omar2002, чтобы переменные были видны в вашем классе их нужно обьявить.
Код:
public var curItemText:String
, и this в вашем классе ето ваш мувиклип на котором класс

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

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

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


 


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


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