PDA

Просмотр полной версии : Странные последствия добавления компонентов в библиотеку


vgl
09.03.2007, 08:48
Категорически приведствую спецов флеша :)
Возник трабл, объяснения которому я пока найти не могу. Может у кого-то было подобное, прошу подсказать, как его решить.
А дело в следующем. Я написал и сопровождаю GUI приложение. написано оно на AS 2.0 и компилю я его на Flash 7.2 Professional. Приложение содержит множество графических элементов, которые загружаются в память при инициализации приложения и потом в нужный момент достаются и помещаются на экране на нужном слое. Вид GUI можно менять при помощи конфигурационного XML файла.
До этого момента я обходился только средсвами AS ничего не помещая в библиотеку. Кнопки и текстовые поля. А тут мне понадобился ComboBox. Сделал скин для стандартного и проверил его работоспособность в тестовом приложении. Все OK. Добавил его в билиотеку своего основного приложения - основное приложение начало необъяснимо глючить. Кнопки не нажимаются, менюшки отрисовываются криво. Ошибок компилятор ни каких не выдает, трасировка тоже показывает, что все переменные, ответственные за прорисовку, передаются без ошибок. Причем выявил, что подобное поведение появляется при добавлении любого компонента в библиотеку. Спецы, подскажите с чем это может быть связано? Где искать нестыковку?

iNils
09.03.2007, 09:05
А пример где?

vgl
09.03.2007, 09:35
А пример где?
Пример чего именно? Я пока даже локализовать толком не могу часть кода, где искать. А основное приложение выкладывать смысла нет. 10 тыс строк со всеми классами:) Хотябы приблизительно подскажите где можно поискать - я выложу эти части.

vgl
09.03.2007, 09:58
Сейчас сделал отдельную SWF-ку с ComboBox и загрузил её в основное приложение - тот же эффект. Глючит.
Навсякий случай размещу код своего СomboBox , хотя такой глюк происходит, при использовании ЛЮБОГО компонента из стандартной бибилиотеки.

import mx.controls.ComboBox;
mx.controls.ComboBox.prototype.downArrowUpName = "ComboDownArrowOver";
mx.controls.ComboBox.prototype.downArrowDownName = "ComboDownArrowDown";
mx.controls.ComboBox.prototype.downArrowOverName = "ComboDownArrowOver";
mx.controls.ComboBox.prototype.downArrowDisabledName = "ComboDownArrowDisabled";
this.createClassObject(mx.controls.ComboBox, "my_cb", 0, {label:"Check this", _x:400, _y:400, _width:400, _height:50, _xscale:100, _yscale:100});
my_cb.setStyle("color", 0xFFFFFF);
my_cb.setStyle("backgroundColor", 0x123883);
my_cb.setStyle("themeColor", "haloGreen");
my_cb.setStyle("fontSize", 20);
//
var datarray:Array = new Array();
var temparray:Array = new Array();
for (j = 0; j < 1000; j++) {
datarray.push("DEC №" + j);
}
//
for (i = 0; i < datarray.length; i++) {
my_cb.addItem(datarray[i], i);
}
//
my_cb.rowCount = 10;
//var ix = my_cb.selectedIndex;
my_cb.editable = true; // clears the text field
//my_cb.selectedIndex = ix
//my_cb.open()
listenerObject = new Object();
listenerObject.change = function(eventObject) {
var temptext:String
trace(my_cb.text);
temptext = my_cb.textField.text;
my_cb.close();
my_cb.removeAll();
for (i = 0; i < datarray.length; i++) {
trace(datarray[i].substr(0, temptext.length));
if (datarray[i].substr(0, temptext.length) == temptext) {
my_cb.addItem(datarray[i], i);
}
}
trace(my_cb.text);
my_cb.open();
my_cb.textField.text.setFocus();
my_cb.textField.text = temptext;
}
my_cb.addEventListener("change", listenerObject)


Вот так выглядит часть основной программы связанная с импортом. Может тут каккой конфликт.

import mx.transitions.Tween;
import mx.transitions.easing.*;
import mx.controls.*;
import TInterface;
import TMenu;
import TButton;
import TVendor;
import TVendorMask;
import TKey;
import TContentFile;
import TJavaList;
import TModel;
import TTypes;
import TCellular;
import TContent;
import TContentElement;
import TPayment;
import TTransaction;
import TSocketStatus;

Stage.scaleMode="exactFit";
fscommand("fullscreen", "true");
stop();
Mouse.hide();


Где классы начинающиеся с Т мои собственные.

etc
09.03.2007, 12:35
Вся эта информация не поможет решить проблему в таком проекте, потому как вам лучше знать, что там происходит внутри, чем нам.

Лучше соберите отдельный пример, в котором наблюдается баг, если это возможно. Если нет, то значит проблема в ваших классах исключительно.

vgl
12.03.2007, 06:30
... значит проблема в ваших классах исключительно.

Ок. Похоже на то. Поскольку пример выложить врятли получится, то буду ковырять свои классы. :bye:

MyXus
12.03.2007, 14:03
Мне кажется проще написать свой комбобокс -))
это точно намного быстрее чем разбирать такой проект
да и удобнее
я, например, юзаю только свои компоненты. всегда можно дописать если чо.

vic_
12.03.2007, 16:09
>Мне кажется проще написать свой комбобокс
это если один работаешь над проектом, а если работа коллективная, да этот комбобокс написан не тобой и заточен под какие то свои задачи, половины стандартных методов не имеет и аналогов к ним тоже, то что есть работает через ж, а дописать/переписать нельзя, потому что он уже скомпилирован в родительском клипе который не является твоей частью, да и по условиям задачи нельзя, а автор морозится и делает вид что письма не доходят...
Такой я вам скажу геморрой

MyXus
12.03.2007, 20:00
комбобокс не такой код чтобы потеряв контакт с одним флешером его нельзя было бы передать другому. Его писать то час от силы.

etc
12.03.2007, 20:02
Это будет хреновенький комбобокс тогда :D

MyXus
12.03.2007, 20:04
До сих пор работает и без жалоб ;-)

etc
12.03.2007, 20:07
Для себя и под себя? Аналог встроенного за часик не накатаешь.

vic_
12.03.2007, 20:37
да не потерян контакт, работает флэшер. Просто все компоненты делает самостоятельно, эта часть работы на нем. Ясно, парень зашивается со своими проблемами, а тут еще я лезу с исправлениями.
Ну вот скажем нет в его задачах удалить item из комбобокса, соответственно он этот метод не продумал изначально и не реализовал, а назачем, и так полно работы, я понимаю.
Я к тому, что стандартизация - это великая вещь, а второй момент - контролы это не просто набор нескольких клипов и классов, это своя идеология работы, документация, уйма вспомогательных классов. Все это дело писали хорошие специалисты, это обкатано юзерами в течении нескольких лет. И, в конце концов, в систему заложены неплохие возможности для расширения.

etc
12.03.2007, 20:40
Все это дело писали хорошие специалисты
Этой темы бы не существовало, если бы хорошими были. Внутрь компонентов лучше не заглядывать :D

vic_
12.03.2007, 20:54
Левша тоже блоху подковывал, прыгать перестала.
Понятное дело, что косяков полно, но нет гарантии, что доморощенные компоненты будут лучше. Что все будет продумано, будет стыковаться между собой, про документацию вообще молчу.

etc
12.03.2007, 20:58
О том и речь, что сидеть и писать на коленке за час комбобокс не есть хорошо.

MyXus
12.03.2007, 20:59
Ну блин. напишите не за час. Есть время - напишите конфетку. Нет времени - стучите ногами -)

iNils
12.03.2007, 21:28
__etc просто максималист :D

etc
12.03.2007, 21:30
Скорее максимально ленив. Т.е. я могу написать, но мне лень. И потрачу на это не один день, зато максимально функционально и правильно. Но опять же — лень.

iNils
12.03.2007, 21:33
Скорее максимально ленив. Т.е. я могу написать, но мне лень. И потрачу на это не один день, зато максимально функционально и правильно. Но опять же — лень.Тогда ты не флеш-романтик :)

etc
12.03.2007, 21:50
Когда флеш маячит перед глазами 15 часов в сутки на романтику как-то… с высокой колокольни.

wvxvw
14.03.2007, 02:54
Есть несколько возможных причин:
клипы использующиеся в компоненте имеют такой же идентификатор экспорта, как и уже существующие в библиотеке (по-идее при компиляции должна выдаваться ошибка, но не всегда это случается).

В процессе работы классов и\или чужого компонента клипы помещаются на одну и ту же глубину.

Если компонент от Макромедии, второго поколения, то там возможно еще много всякой путаницы, эти компоненты, похоже, писали скорее как пример, а не как уже готовый инструмент. В больших проектах их лучше не использовать. ИМХО.

etc
14.03.2007, 02:55
Если компонент от Макромедии, второго поколения, то там возможно еще много всякой путаницы, эти компоненты, похоже, писали скорее как пример, а не как уже готовый инструмент. В больших проектах их лучше не использовать. ИМХО.
Да нет, это не пример, а именно готовый инструмент. Если бы был пример, то смысла компилировать в готовые swc не было.