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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.01.2013, 15:56
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 11  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
а в каком именно месте код ужасен?
Он ужасен полностью. Этот код совершенно не читаем. Не понятно что там и где происходит. Надо писать правильно, и многие ошибки отпадут сами собой.
п.с. Принято писать названия переменных с маленькой буквы. А капсы использовать только для имен констант.

Старый 21.01.2013, 15:56
XMON вне форума Посмотреть профиль Отправить личное сообщение для XMON Найти все сообщения от XMON
  № 12  
Ответить с цитированием
XMON
[+1 13.12.12]
[++1 13.12.12]

Регистрация: Aug 2012
Сообщений: 145
трейсы стоят, я просто их все стер.

Старый 21.01.2013, 16:02
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 13  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Ну и что говорят трейсы? На каком месте вываливается программа? Чему равняется int(Math.random() * BOXES.length)? Что в BOXES_ITEM?
__________________
мой пустой блог

Старый 21.01.2013, 16:05
XMON вне форума Посмотреть профиль Отправить личное сообщение для XMON Найти все сообщения от XMON
  № 14  
Ответить с цитированием
XMON
[+1 13.12.12]
[++1 13.12.12]

Регистрация: Aug 2012
Сообщений: 145
на
Код AS3:
var BOXES_ITEM:MovieClip = new (BOXES[int(Math.random() * BOXES.length)] as Class)() as MovieClip;
ошибка

Старый 21.01.2013, 16:13
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 15  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Почему ты до сих пор не разделил эту строчку скажем так:
Код AS3:
var r:int = int(Math.random() * BOXES.length);
trace(r);
var c:Class = BOXES[r];
trace (c);
var BOXES_ITEM:MovieClip = new c() as MovieClip;
Я так понимаю, ты вообще не пытался понять, что там в этих строчках, для тебя там "магия".

В общем, я предполагаю, что один из "айтемов" в BOXES, не является именем класса.
__________________
мой пустой блог

Старый 21.01.2013, 16:26
XMON вне форума Посмотреть профиль Отправить личное сообщение для XMON Найти все сообщения от XMON
  № 16  
Ответить с цитированием
XMON
[+1 13.12.12]
[++1 13.12.12]

Регистрация: Aug 2012
Сообщений: 145
на r он выводит рандомное число (как я понял от 0 до 4)
а дальше ошибка
Код AS3:
TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать box4@31afe6d1 в Class.
	at ClearSniper_fla::Timeline_1/CLUB_TIMER()
	at flash.events::EventDispatcher/dispatchEventFunction()
	at flash.events::EventDispatcher/dispatchEvent()
	at flash.utils::Timer/tick()
Цитата:
Я так понимаю, ты вообще не пытался понять, что там в этих строчках, для тебя там "магия"
я не совсем понимю что делает это:
Код AS3:
 as Class)() as MovieClip;

Старый 21.01.2013, 16:40
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 17  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Код AS3:
var boxes:Array/*of Class*/ = [box1, box2, box3, box4];
...
 
var r:int = int(Math.random() * BOXES.length); //получаем случайное число от 0 до  BOXES.length-1
trace(r);
var c:Class = BOXES[r]; //в BOXES хранятся ссылки на классы. Не экземпляры, а классы
trace (c);
var BOXES_ITEM:MovieClip = new c() as MovieClip; //создаем новый экземпляр класса, ссылка на который хранится в переменной c
Что выдает trace(r), trace(c), перед ошибкой. Предположительно по этому адресу BOXES[r] у тебя неправильно написано имя класса, т.е. либо не класс, либо класс, но не MovieClip. Почему нет ошибки раньше, у тебя strict mode выключен?
__________________
мой пустой блог

Старый 21.01.2013, 16:44
XMON вне форума Посмотреть профиль Отправить личное сообщение для XMON Найти все сообщения от XMON
  № 18  
Ответить с цитированием
XMON
[+1 13.12.12]
[++1 13.12.12]

Регистрация: Aug 2012
Сообщений: 145
даже не знаю что это

Старый 21.01.2013, 16:51
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 19  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Ну это Flash->ActionScript Settings->галочка "Strict mode". Но это по сути не важно. Свое предположение об ошибке я уже высказал: "по этому адресу BOXES[r] у тебя неправильно написано имя класса, т.е. либо не класс, либо класс, но не MovieClip".

Добавлено через 5 минут
При чем здесь flash professional. Да этот код исполнится даже в cs1. У тебя логическая ошибка в коде, вот и все.
__________________
мой пустой блог

Старый 21.01.2013, 17:45
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 20  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Цитата:
Сообщение от XMON Посмотреть сообщение
вот кусочек кода:
Код AS3:
var BOXES_ITEM:MovieClip = new (BOXES[int(Math.random() * BOXES.length)] as Class)() as MovieClip;
Не нужно так делать, совсем не нужно.
Если вам нужно достать элемент массива, класс или экземпляр, лучше выделите отдельную переменную. Будет намного понятнее о чем вообще идет речь.

Код AS3:
var index:int = int(Math.random() * BOXES.length);
var item:MovieClip = BOXES[index] as MovieClip;
А ошибка у вас была потому что вы пытались вытянуть элемент массива (он уже экземпляр), потом принять его как класс, и создать из него еще один экземпляр.
И не видно этого потому, что всё написано в строчку.

Добавлено через 59 секунд
а, он у вас уже не экземпляр, а просто класс. короче ппц, разберитесь с кодом

Если в массиве классы, тогда так:

Код AS3:
var index:int = int(Math.random() * BOXES.length);
var CurrentType:Class = BOXES[index];
var item:MovieClip =  new CurrentType() as MovieClip; // возможно Sprite
__________________
adobe AS3 manual

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

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

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


 


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


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