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

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

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

Регистрация: Feb 2006
Сообщений: 580
По умолчанию Ошибка с расширением класса.

Код:
var mn:MovieClip = this;
var tree:Number = setInterval(create, 1000);
//
function create():Void {
	var mc:mcExtended = mn.attachMovie('anc', 'anc', mn.getNextHighestDepth());
	clearInterval(tree);
}
Этот код выдает такую ошибку:
Цитата:
**Error** Scene=Scene 1, layer=Layer 1, frame=1:Line 5: Type mismatch in assignment statement: found MovieClip where mcExtended is required.
var mc:mcExtended = mn.attachMovie('anc', 'anc', mn.getNextHighestDepth());

Total ActionScript Errors: 1 Reported Errors: 1
Файл с расширением класса лежит в папке classes. Classes лежит в той же папке что и что и fla с ошибкой. В настройках публикации fla указан путь к классу: classes

Код as файла расширения класса:
Код:
/**
класс mcExtended
*/
class mcExtended extends MovieClip {
	public var mcNumber:Number;
}
Мувиклип в библиотеке создан стандартным способом, класс as2 не подписан.
Но, вот такой код работает нормально. Ошибок не выдает.
Код:
var mc:mcExtended = this.attachMovie('anc', 'anc', this.getNextHighestDepth());
Подскажите, где ошибка?

Старый 21.01.2007, 21:18
pkfun вне форума Посмотреть профиль Отправить личное сообщение для pkfun Посетить домашнюю страницу pkfun Найти все сообщения от pkfun
  № 2  
Ответить с цитированием
pkfun

Регистрация: Feb 2006
Сообщений: 580
Вот такой код тоже работает:
Код:
var mn:MovieClip = this;
var tree:Number = setInterval(this, 'create', 1000);
//
function create():Void {
	var mc:mcExtended = this.attachMovie('anc', 'anc', this.getNextHighestDepth());
}
Чувствую все дело в:
Код:
var mn:MovieClip = this;

Старый 21.01.2007, 21:25
Ventur вне форума Посмотреть профиль Отправить личное сообщение для Ventur Найти все сообщения от Ventur
  № 3  
Ответить с цитированием
Ventur
 
Аватар для Ventur

Регистрация: Jun 2006
Сообщений: 104
Отправить сообщение для Ventur с помощью ICQ
Код:
this.createEmptyMovieClip("mn",this);
var tree:Number = setInterval(this, 'create', 1000);
//
function create():Void {
	var mc:mcExtended = mn.attachMovie('anc', 'anc', this.getNextHighestDepth());
	mc._x+=Math.random()*10;
}

Старый 21.01.2007, 21:38
pkfun вне форума Посмотреть профиль Отправить личное сообщение для pkfun Посетить домашнюю страницу pkfun Найти все сообщения от pkfun
  № 4  
Ответить с цитированием
pkfun

Регистрация: Feb 2006
Сообщений: 580
Ventur
А можите объяснить в чем ошибка моя? Мне хочется понять теоретически. Прочувствовать, так сказать.

Старый 21.01.2007, 21:48
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 5  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Код:
var mc:mcExtended = this.attachMovie('anc', 'anc', this.getNextHighestDepth());
проходит потому что this undefined в этом контексте, присваивай кому хошь..
Код:
var mc:mcExtended = mn.attachMovie('anc', 'anc', mn.getNextHighestDepth());
попытка присвоить MovieClip переменной с типом mcExtended
чтоб не ругался:
Код:
var mc:mcExtended = mcExtended(mn.attachMovie('anc', 'anc', mn.getNextHighestDepth()));
но anc тогда должен быть залинкован в библиотеке на mcExtended.as, иначе это бред выходит..

зы: классы с прописной именовать принято..


Последний раз редактировалось silin; 21.01.2007 в 21:50.
Старый 21.01.2007, 21:51
Ventur вне форума Посмотреть профиль Отправить личное сообщение для Ventur Найти все сообщения от Ventur
  № 6  
Ответить с цитированием
Ventur
 
Аватар для Ventur

Регистрация: Jun 2006
Сообщений: 104
Отправить сообщение для Ventur с помощью ICQ
>но anc тогда должен быть залинкован в библиотеке на mcExtended.as

Совершенно да

Старый 21.01.2007, 22:02
pkfun вне форума Посмотреть профиль Отправить личное сообщение для pkfun Посетить домашнюю страницу pkfun Найти все сообщения от pkfun
  № 7  
Ответить с цитированием
pkfun

Регистрация: Feb 2006
Сообщений: 580
Цитата:
Сообщение от silin
проходит потому что this undefined в этом контексте, присваивай кому хошь..
А это как объяснить тогда?
Код:
 var tree:Number = setInterval(this, 'create', 1000);
//
function create():Void {
	trace(typeof(this)) //movieclip
	var mc:mcExtended = this.attachMovie('anc', 'anc', this.getNextHighestDepth());
}
И это:
Код:
 var mn:MovieClip=this
 var tree:Number = setInterval(this, 'create', 1000);
//
function create():Void {
	trace(typeof(mn)) //movieclip
	var mc:mcExtended = this.attachMovie('anc', 'anc', this.getNextHighestDepth());
}


Последний раз редактировалось pkfun; 21.01.2007 в 22:04.
Старый 21.01.2007, 22:08
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 8  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
setInterval(this, 'create', 1000) и setInterval(create, 1000) разные вещи: у первой create есть this (первый параметр setInterval) у второй нет..
в примере Ventur компилятор не ругается, потому как он не знает тип this, то что выдает trace это уже рантайм, (да и в твоем примере с this наверное тоже, а не потому что undefined)
зы: вся эта типизация в AS2 весьма условная штука - только на уровне отслеживания ошибок компилятором, естестественно только там где он может это сделать..


Последний раз редактировалось silin; 21.01.2007 в 22:21.
Старый 21.01.2007, 22:19
pkfun вне форума Посмотреть профиль Отправить личное сообщение для pkfun Посетить домашнюю страницу pkfun Найти все сообщения от pkfun
  № 9  
Ответить с цитированием
pkfun

Регистрация: Feb 2006
Сообщений: 580
silin
Честно говоря, не понимаю. Вы скажите mn и this в моем примере это одно и тоже или нет. Если нет, то чем отличаются друг от друга. Сейчас я думаю, что mn и this это одно и то же - объект типа MovieClip указывающий на основную временную диаграмму.

Цитата:
в примере Ventur компилятор не ругается, потому как он не знает тип this, то что выдает trace это уже рантайм, (да и в твоем примере с this наверное тоже, а не потому что undefined)
Вы хотите сказать, что в строке:
Код:
 var mn:MovieClip=this
компилятор отслеживает тип this, а в строке:
Код:
var mc:mcExtended = this.attachMovie('anc', 'anc', this.getNextHighestDepth());
просто считает, что у this нет типа(не задан)? Как же быть? Как мне корректно сделать этот код?


Последний раз редактировалось pkfun; 21.01.2007 в 22:33.
Старый 21.01.2007, 22:33
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 10  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
в твоем примере mn типизованная переменная, компилятор знает ее тип, потому и ругается
в функции
Код:
function create():Void {
	this.attachMovie('anc', 'anc', mn.getNextHighestDepth());
}
на что указывает this выяснится в рантайме (эту create можно ведь приложить к любому объекту или к разным..), компилятор не может знать тип this в create поэтому на всякий случай за ошибку не считает..

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

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

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


 


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


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