Вход

Просмотр полной версии : глюки с конструктором


firelord
24.01.2007, 19:21
Flash MX 2004

Сделал несколько собственных классов для манипуляции с данными. Глюки лезут такие, что мама не горюй! Сразу предупрежу, что программиранием занимаюсь професионально лет 15, а с флешом только стал разбираться.

Дерево классов такое:

city.Cell
|- city.Terrain
|- city.Object
|- city.Location
|- city.City


В одной из функций внутри класса city.Location вызывается конструктор city.Terrain: terr=new city.Terrain(...)
Так вот, конструктор этот упрямо возвращает undefined - ни на что при этом не ругаясь. Я перерыл весь код вдоль и поперек - попытался составить пример, достаточный для того, чтобы разместить здесь - в примере все работает :) Причем, попытки расстановки создания объекта в другие куски кода (var terr=..., trace(terr)) везде дают underfined.

Вычистил все классы до трех функций, чтобы локализовать проблему. В какой-то момент глюк ушел - объекты стали создаваться. Начал потихоньку восстанавливать код - и вот снова - конструктор просто не вызывается :)))

До этого уже сталкивался с такой же проблемой (не отрабатывает конструктор), когда пытался создать класс в одном package путем наследования класса из другого package. В прошлый раз просто перенес наследуемый класс в package предка, и все заработало. Здесь все классы - в одном пакете.

Очевидно, что наткнулся на какой-то "недокументированный глюк" флеша ;) Причем, сволочь не ругается даже ни на что, а просто игнорирует вызов конструктора :)

Соотв. ВОПРОС: может быть кто-нибудь сталкивался с подобными глюками с классами и по какому колесу надо постучать, чтобы они пропали? или что хотя бы искать?

Приводить полный код смысла не имеет - слишком большой, чтобы разобраться, да и дело не в коде, походу - код я вылизал, ошибок там вроде нет...

Заранее благодарен за любую подсказку!

etc
24.01.2007, 19:24
Object — стандартный класс флеша. У тебя просто возник конфликт.
Переименуй Object в Building, например.

firelord
24.01.2007, 19:30
ой, сорри! ошибся, когда писал пост - уже переименовал: city.cityObject - не в этом дело ;)

etc
24.01.2007, 19:39
Лучше заюзать директивы import city.Terrain; и создавать new Terrain. Хотя это не особо влияет. Посмотри, чтобы у тебя не было переменных с именем city, т.е. совпадающим с именем пакета.

firelord
24.01.2007, 19:43
в смысле - глобальных переменных? это вариант! есть одна такая... щас попробую кильнуть ;)

etc
24.01.2007, 19:43
А ещё и глобальная есть? :D
Нигде никаких переменных с именем city быть не должно ни в коем случае.

firelord
24.01.2007, 19:45
ЙЙЙЙЙЙЙЙЙЙЕЕЕЕЕЕС! вот уж не подумал бы никогда! спасибо огромное! сколько времени я убил на эту фигню - просто жуть... вот к чему приводят полуколеночные реализации языков программирования - такой вот коллапс namespace :)
еще раз спасибо за помощь!