Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   error 1061 (http://www.flasher.ru/forum/showthread.php?t=138231)

elcard 02.04.2010 12:23

error 1061
 
Пару дней назад начал изучать as3. Постепенно врубаюсь. Начал делать игру по примеру MerlinTwi http://flasher.ru/forum/showthread.php?t=83431 и встрял в начале на 2 странице на прелоадере.
Цитата:

Ошибка 1061: Call to a possibly undefined method play through a reference with static type flash.display:DisplayObjectContainer.
при компиляции. Сижу два часа сравниваю его исходник со своим и вроде все так же, но не могу понять в чем ошибка.
Даже в мане опечатку нашел пока искал
Цитата:

progress - мувик состоящий из 100 кадров
Имеется ввиду progressbar, а не progress, так?

wvxvw 02.04.2010 16:05

Номера ошибок никто не знает наизусть. Если вы хотите получить ответ - не называйте темы так никогда.
И читайте, что говорится в ошибке - вы вызываете методо play() у переменной типизированой как DisplayObjectContainer - возможно у нее есть такой метод, но вы должны компилятору это явно объяснить = кастовать к объекту, у которого такой метод есть.

sub_putnik 03.09.2010 15:59

Вставь в прелоадаре вместо parent.play();

Код AS3:

if (parent is MovieClip) {
( parent as MovieClip ).play();
}


in4core 04.09.2010 00:55

Код AS3:

if (parent is MovieClip) {
( parent as MovieClip ).play();
}

Что за бред ??? Сам понимаешь что написал? Если объект есть мувиклип, то превратить объект в мувиклип и проиграть. зачем делать абсурдное приведение типов?

dimarik 04.09.2010 01:39

Штобы компилятор не ругался, не?

in4core 04.09.2010 02:13

еще один весельчак)) даж я с минимальными знаниями ас3 и то понимаю, что если объект уже мувиклип, то компилятор не будет ругаться на объект.методКлипа().

Добавлено через 41 секунду
хотя если ошибаюсь мне будет оч стыдно за свои слова :)

-De- 04.09.2010 02:23

чувак...
Код AS3:

var tehMovie:DisplayObjectContainer = new MovieClip();//parent есть DisplayObjectContainer
//tehMovie.play();//не покатит, у DisplayObjectContainer нет метода play
(tehMovie as MovieClip).play();//всё ок

ну и проверочка, что там MovieClip а не спрайт какой.

Obi 04.09.2010 02:40

Цитата:

Сообщение от in4core (Сообщение 933412)
Что за бред ??? Сам понимаешь что написал? Если объект есть мувиклип, то превратить объект в мувиклип и проиграть. зачем делать абсурдное приведение типов?

Никто никого превращать не будет. У нас тут не сеансы черной магии, а компилятор – не Воланд. Мы просто явно указываем компилятору, с объектом какого типа имеем дело.

Элементарный пример:

Код AS3:

public static function closeUIWindow(value:Object):UIWindow {
  if(value is String) {
      return closeWindowByName(value as String);
  }else if(value is UIWindow) {
      return closeWindow(value as UIWindow);
  }else {
      trace('unknown type');
      return null;
  }
}

Хотя звездочка тут бы лучше смотрелась.

in4core 04.09.2010 17:38

Ну да если объект диспейконтейнер просто тогда да. Согласен. Но тогда и надо писать так:

Код AS3:

if (parent is DisplayObjectContainer) {
( parent as MovieClip ).play();
}

разницу видим?

i.o. 04.09.2010 18:07

Цитата:

Сообщение от in4core (Сообщение 933517)
Ну да если объект диспейконтейнер просто тогда да. Согласен. Но тогда и надо писать так:

Код AS3:

if (parent is DisplayObjectContainer) {
( parent as MovieClip ).play();
}

разницу видим?

Видим. Это называется небезопасное приведение типов :)
Вот здесь вы проверяете: parent является ли DisplayObjectContainer - так он и так им является, иначе что это за parent. Единственная ситуация, когда это условие не проканает - parent == null.
Ладно проверили, убедились, что parent не null. Далее вы ему, сразу так не церемонясь, заявляете, что он MovieClip. Откуда такая уверенность? А что если он Sprite? Так вот если он будет Sprite, то (parent as MovieClip) в рантайме у вас превратиться в null. А у null вы попытаетесь вызвать метод play();, за что получите рантайм-ошибку.

Так что человек здесь все правильно делал:
Код AS3:

if( parent is MovieClip )
        (parent as MovieClip).play();

Вы какую мысль пытались донести?


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

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