PDA

Просмотр полной версии : проблема с функциями и проксёй


dream'r
15.02.2011, 18:14
Делаю всё сейчас на АС2.0
Пишу в классах
Использую com.person13.util.Proxy

проблема в следующем. создаю в цикле кнопки, для каждой назначаю действие при нажатии. должна по идее срабатывать строка :
_root.osnMenu["menuText" + i].onRelease = Proxy.create(this, changeLanguage, what_load);

не могу понять в чём проблема может быть ;(
класс имортирован, функция вызываемая существует, параметр тоже. функция публичная.

если не использую проксю, а пишу просто ...onRelease = function(){ changeLanguage(what_load)}; то тоже ни чего не происходит. не могу понять что случилось, что не так идёт. Ошибок не выводится ни каких ;( тоесть даже функция не вызывается, потому что я там трейс поставил - она бы хоть показала, что работает, а так - пусто ;-( ((((
через прокси пробовал вызвать совершенно другую функцию в которой сменяется цвет кнопки - не работает.

_root.osnMenu["menuText" + i] - создаётся всё, переменная работает адекватно.

пожалуйста, подскажите.

Hauts
15.02.2011, 18:24
Ctrl + Shift + Enter — посмотрите структуру флэшки, переменные, может поможет.

Ну и трэйсов побольше.

Зачем вам обращение через _root, если вы все в классах пишите?

dream'r
15.02.2011, 19:14
дебаг ни чего определённого не дал ;(
трейсы ... сделал ...onRelease(trace(имя_функции)) - выводит undefined .. понятия не имею почему не находит, ведь функция создана.

Добавлено через 1 час 24 минуты
И не понимаю почему при наведении функция срабатывает (не та, которая вызывается через proxy.create а , например, твинлайт)... прошу, пожалуйста подскажите, может я что-то не так делаю?(
в классах пишу второй раз в жизни. до этого работал по большей части с кадрами. в as бывало только писал код, чтобы не наводить путаницу в кадрах.

Hauts
15.02.2011, 21:21
Побольше кода покажите?

dream'r
15.02.2011, 21:27
private function generateOsnMenu(def_lang)
{
_root.createEmptyMovieClip("osnMenu", _root.getNextHighestDepth());
_root.osnMenu._y = 18;
_root.osnMenu._x = _root.rd_logo._x + _root.rd_logo._width + 130;
var menupunkts:Number = _root.menuXML.firstChild.childNodes.length;

for(i = 0; i < menupunkts; i++){
var osnmenu:MovieClip = _root.osnMenu.attachMovie("menuText", "menuText"+i, _root.osnMenu.getNextHighestDepth());
osnmenu.punktText.autoSize = true;
osnmenu.punktText.htmlText = true;

var title = _root.menuXML.firstChild.childNodes[i].attributes["title_ru"];
osnmenu.punktText.htmlText = title;

var what_load = _root.menuXML.firstChild.childNodes[i].attributes["what_load"];

osnmenu._y = 0;
if(i == 0){
osnmenu._x = 0;
}
else{
osnmenu._x = _root.osnMenu["menuText"+(i-1)]._x + _root.osnMenu["menuText"+(i-1)]._width + 40;
}

osnmenu.onRollOver = function()
{
TweenMax.to(this.punktText, 0.5, {tint:"0x000000", ease:Circ.easeOut});
}
osnmenu.onRollOut = _root.osnMenu["menuText"+i].onReleaseOutside = function(){
TweenMax.to(this.punktText, 0.5, {tint:"0x838383", ease:Circ.easeOut});
}
osnmenu.onRelease = Proxy.create(this, gotoRazdel);
}
}

private function gotoRazdel():Void
{
trace("WHAT LOAD ");
}
}

Hauts
15.02.2011, 21:50
А так?

private var menuRollOverState:Object;
private var menuRollOutState:Object;
private function generateOsnMenu(def_lang) {
menuRollOverState = {tint:"0x000000", ease:Circ.easeOut, overwrite : true};
menuRollOutState = {tint:"0x838383", ease:Circ.easeOut, overwrite : true};

_root.createEmptyMovieClip("osnMenu",_root.getNextHighestDepth());
_root.osnMenu._y = 18;
_root.osnMenu._x = _root.rd_logo._x+_root.rd_logo._width+130;
var menupunkts:Number = _root.menuXML.firstChild.childNodes.length;

for (i=0; i<menupunkts; i++) {
var osnmenu:MovieClip = _root.osnMenu.attachMovie("menuText", "menuText"+i, _root.osnMenu.getNextHighestDepth());
osnmenu.punktText.autoSize = true;
osnmenu.punktText.htmlText = true;

var title = _root.menuXML.firstChild.childNodes[i].attributes["title_ru"];
osnmenu.punktText.htmlText = title;

var what_load = _root.menuXML.firstChild.childNodes[i].attributes["what_load"];

osnmenu._y = 0;
if (i == 0) {
osnmenu._x = 0;
} else {
osnmenu._x = _root.osnMenu["menuText"+(i-1)]._x+_root.osnMenu["menuText"+(i-1)]._width+40;
}
osnmenu.onRollOver = function() {
TweenMax.to(this.punktText,0.5,menuRollOverState);
};
osnmenu.onRollOut = _root.osnMenu["menuText"+i].onReleaseOutside=function () {
TweenMax.to(this.punktText,0.5,menuRollOutState);
};
osnmenu.onRelease = Proxy.create(this, menuItemRelease);
// osnmenu.onRelease = function(){trace(this)};
}
}
public function menuItemRelease():Void {
trace("WHAT LOAD ");
}

dream'r
15.02.2011, 22:37
к большому сожалению - не работает ;(
если писать тоже самое, что у меня было в кадрах - оно будет работать. вопрос - почему блин в классе не работает. ;-(

Добавлено через 14 минут
Вобще очень странно зачем вы заменили что-то в твинмаксе? при наведении у меня всё отлично работало. А не работало в onRelease.

Hauts
15.02.2011, 23:05
Просто наугад вынес объекты с нужными свойствами. Удобнее менять будет.)

dream'r
15.02.2011, 23:11
;-( жаль, что ваши правки не привели к правильной работе кода... может можете сказать, что это может быть? просто я говорю - в кадрах этот код заработал бы 100%. в классе - не работает, причину не понимаю.

Hauts
15.02.2011, 23:20
Честно скажу — я не знаю.

dream'r
15.02.2011, 23:35
Может ещё есть у кого мысли?) могу выложить сюда сам класс. ... класс вызывается из кода в кадре.