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

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

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

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
По умолчанию не работает наследование

Доброго времени суток!
уже часа 3 воюю с flash-компилятором, mtasc все правильно делает, родной флешевский компилятор не хочет.
Есть 3 класса:
Код:
...
import view.Contourable;
...
class view.Platform extends MovieClip implements Contourable {
	...
	function Platform() {
		trace("CONSTRUCTOR_PLATFORM");
		platforms.push(this);
		_name="#platform"+(index=platforms.length-1);
		getContour().draw(0xff0000);//?
	}
	...
}
Код:
...
import view.Platform;
...
class view.Bonus extends Platform {
	...
	function Bonus() {
		trace("CONSTRUCTOR_BONUS");
	}
	...
}
Код:
import view.Bonus;
class view.Detail extends Bonus {
	static var curDetail:Detail=null;
	function Detail() {
		curDetail=this;
		trace("CONSTRUCTOR");
	}
	function setDetail(level:Number) {
		gotoAndStop(level);
	}
}
В Linkage мувиклипа прописываю Detail, выкладываю на линейку:
конструктор Detail запускается, а конструкторы Bonus и Platform - нет.

Причем если унаследовать Detail от Platform - все работает.

Что это за особенность такая flash-компилятора и как с ней бороться?


Последний раз редактировалось expl; 28.10.2007 в 12:14.
Старый 28.10.2007, 12:46
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Попробуйте принудительно его вызвать. Хотя, вроде и так все должно работать.
Код:
function Detail() {
	super();
	curDetail = this;
	trace("CONSTRUCTOR");
}
ps: Выложите пример, чтобы протестировать можно было.


Последний раз редактировалось udaaff; 28.10.2007 в 12:49.
Старый 28.10.2007, 13:10
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 3  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Пробовал, не помогает,
исходник:
blackster281206.zip

Старый 28.10.2007, 15:23
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 4  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
Я вам советую всегда строить мини примеры, оставлять только нужное и проверять если возникают сомнения в функциональности.

http://www.screamge.com/files/extend.rar
__________________
Free-lance | Twitter | Me

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Просто в паблиш сеттингс укажи путь к папке view, у меня все откомпилировалось
__________________
Hell is the possibility of sanity

Старый 28.10.2007, 16:11
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 6  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
2 screamge:
отдельно мувик протестировал - работает!
- вся цепочка конструкторов запусается

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


wvxvw: попробовал - ни какой реакции

зато стоит добавить мувики из промежуточной цепочки наследования (дополнить промежуточный класс библиотечным символом)
- начинают пропускаться вызовы конструкторов
- пропуск вызовов конструкторов начинает зависеть от глубины расположения мувиков на экране и просто от наличия символа в библиотеке


Последний раз редактировалось screamge; 28.10.2007 в 16:37.
Старый 28.10.2007, 16:39
screamge вне форума Посмотреть профиль Отправить личное сообщение для screamge Посетить домашнюю страницу screamge Найти все сообщения от screamge
  № 7  
Ответить с цитированием
screamge
Ветеран форума
 
Аватар для screamge

Регистрация: Jul 2006
Адрес: Грузия, Тбилиси
Сообщений: 2,675
пожалуйста объединяйте друг за другом следующие сообщения. Для этого есть кнопка «изменить».
__________________
Free-lance | Twitter | Me

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Компилил в ЦС3 - там все норм, вечером прийду домой, попробую в восьмерке.
======================================================== upd ==
Вот, пришел домой. И вправду не компилится...
Зато придумал, как конструктор вызвать %)
new Bonus(); Вопрос ток зачем =)
Просто, очевидно, конструктор будет вызываться либо при наличии мувика на сцене, либо при создании програмно нового инстанса, а в остальных случаях - проигнорируется.

Да, вот еще давно хотел спросить. Видел такую же штуку в чужем коде - не понял к чему. Зачем объявлять конструктор как приватную функцию? Она ведь все равно такой не будет?

================================= upd2 ======================
Построил простенький примерчик с таким же наследованием, все вроде работает, но появилась другая мысль...
Возможно, в связи с тем, что код частично не в юникодах где-то имеет место быть несоответствие имен? (у меня коменты на русском выглядят как иероглифы %)
=========================== upd3 =========================
Вобщем, умаялся... должно работать, а не работает... хз почему =/
Да, еще вот такая странная штука, на попытку trace(super) из класса Detail получился вот такой неожиданный результат:
_level0.instance1.#level.instance3
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 29.10.2007 в 00:36.
Старый 29.10.2007, 20:34
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 9  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Зачем объявлять конструктор как приватную функцию?
ну чтобы не отвлекаться на нее, когда делаешь остальной код - все равно на прямую вызывать его нет смысла, хотя код грязный, там private практически случайно ставился
Цитата:
Зато придумал, как конструктор вызвать %)
new Bonus(); Вопрос ток зачем =)
пробывал писать такое:
Код:
prototype=new Bonus()
конструктор то вызывается, а мувиклип им не обрабатывается - результата нет
пробывал так:
Код:
 __proto__=Platform.prototype;//?
var f:Function=Platform;//?
f.apply(this);//?
- вобще не работает
Цитата:
Вот, пришел домой. И вправду не компилится...
у меня и на CS3 то же самое: компилиться конечно копмилится, но наследоваться не наследуется
Цитата:
Возможно, в связи с тем, что код частично не в юникодах где-то имеет место быть несоответствие имен?
все в UTF-8 конвертнул - без изменений
Короче нужно учить заказчика mtascом пользоваться, или как-то решать проблему окольными путями, а пока не пришла светлая мысля устранять кучу других багов.
Но вот эта философия работы наследования с мувиклипами просто убивает

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Смотри, если по честному, я бы попробовал переписал так, чтобы не наследовать Платформ от МувиКлипа (хз, но по идее должно помочь...) А еще лучше - не создавать инстасы классов аттачем/выкладыванием на сцену... никогда не любил этот способ, вот нашел лишнее тому подтверждение.
__________________
Hell is the possibility of sanity

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

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

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


 


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


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