Просмотр полной версии : проблема с функциями и проксёй
Делаю всё сейчас на АС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] - создаётся всё, переменная работает адекватно.
пожалуйста, подскажите.
Ctrl + Shift + Enter — посмотрите структуру флэшки, переменные, может поможет.
Ну и трэйсов побольше.
Зачем вам обращение через _root, если вы все в классах пишите?
дебаг ни чего определённого не дал ;(
трейсы ... сделал ...onRelease(trace(имя_функции)) - выводит undefined .. понятия не имею почему не находит, ведь функция создана.
Добавлено через 1 час 24 минуты
И не понимаю почему при наведении функция срабатывает (не та, которая вызывается через proxy.create а , например, твинлайт)... прошу, пожалуйста подскажите, может я что-то не так делаю?(
в классах пишу второй раз в жизни. до этого работал по большей части с кадрами. в as бывало только писал код, чтобы не наводить путаницу в кадрах.
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 ");
}
}
А так?
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 ");
}
к большому сожалению - не работает ;(
если писать тоже самое, что у меня было в кадрах - оно будет работать. вопрос - почему блин в классе не работает. ;-(
Добавлено через 14 минут
Вобще очень странно зачем вы заменили что-то в твинмаксе? при наведении у меня всё отлично работало. А не работало в onRelease.
Просто наугад вынес объекты с нужными свойствами. Удобнее менять будет.)
;-( жаль, что ваши правки не привели к правильной работе кода... может можете сказать, что это может быть? просто я говорю - в кадрах этот код заработал бы 100%. в классе - не работает, причину не понимаю.
Честно скажу — я не знаю.
Может ещё есть у кого мысли?) могу выложить сюда сам класс. ... класс вызывается из кода в кадре.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.