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

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

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

Регистрация: Jan 2009
Адрес: Северный островок дефолт-сити
Сообщений: 144
По умолчанию embed картинки + getDefinitionByName, не определяется класс

Необходимо встроить во флешку кучу картинок, затем рандомно выбирать из них несколько и добавлять на сцену. В самом начале столкнулся со следующей ошибкой:
[Fault] exception, information=ReferenceError: Error #1065: Variable Pict is not defined.

Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
    import flash.display.Bitmap;
    import flash.utils.getDefinitionByName;
 
	public class Main extends Sprite 
	{
 
        [Embed(source='../pic/001.png')]
        public var Pict:Class;
 
		public function Main():void 
		{
            var ClassReference:Class = getDefinitionByName("Pict") as Class;
            var pic:Bitmap = new ClassReference() as Bitmap;
            this.addChild(pic);
        }
 
	}
 
}
При этом если писать var pic:Bitmap = new Pict();, то всё нормально выполняется.
Что это может быть и как с этим бороться, подскажите пожалуйста?

Старый 02.09.2009, 21:22
veisss вне форума Посмотреть профиль Отправить личное сообщение для veisss Найти все сообщения от veisss
  № 2  
Ответить с цитированием
veisss
[+1 16.08.10]

Регистрация: Jun 2009
Сообщений: 93
незнаю ет наверное getDefinitionByName глючит сам сталкивался с таким
попробуй перед
Код AS3:
 var ClassReference:Class = getDefinitionByName("Pict") as Class;
добавь
Код AS3:
var pic:Pict;
тогда увидет.

Старый 02.09.2009, 21:22
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 3  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
это потому, что ваш класс Pict на самом деле имеет совсем другое имя. сделайте getQualifedClassName( Pict ) и посмотрите, что выйдет. и ещё советую сделать Pict статическим.

Добавлено через 50 секунд
veisss, ваш код выдаст ошибку компиляции. так как класса Pict не существуете в природе.

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

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

Старый 02.09.2009, 21:30
veisss вне форума Посмотреть профиль Отправить личное сообщение для veisss Найти все сообщения от veisss
  № 5  
Ответить с цитированием
veisss
[+1 16.08.10]

Регистрация: Jun 2009
Сообщений: 93
у меня были мувики с именами Enemy1MC,Enemy2MC ....прилинкованны к
classes.enemies.Enemy1,classes.enemies.Enemy2...

Код AS3:
var ClassReference:Class = getDefinitionByName("classes.enemies.Enemy1") as Class;
выдавала туже ошибку

а так
Код AS3:
var e:Enemy1;
var ClassReference:Class = getDefinitionByName("classes.enemies.Enemy1") as Class;
работало

и я о томже если побеспокоить имя класса тогда все в порядке(у меня с импортом не покатил)

Старый 02.09.2009, 21:56
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 6  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
veisss, wvxvw, это не то. Вы код видели, вообще, написанный? Вы там в упор не видите
Код AS3:
        [Embed(source='../pic/001.png')]
        public var Pict:Class;

Старый 02.09.2009, 22:05
cauchy вне форума Посмотреть профиль Отправить личное сообщение для cauchy Найти все сообщения от cauchy
  № 7  
Ответить с цитированием
cauchy
 
Аватар для cauchy

Регистрация: Jan 2009
Адрес: Северный островок дефолт-сити
Сообщений: 144
Ошибка при попытке import Pict;
Error: Не удалось найти определение Pict.

Упоминание класса не помогает, та же ошибка что и была.

trace(getQualifiedClassName(Pict)); выдаёт Main_Pict.
Но от этого не намного легче. Впринципе вроде получается что trace(getQualifiedClassName(Pict2)) выдаст Main_Pict2. Если такая закономерность сохраниться для 20-30 заэмбеденных картинок - то можно считать что проблема решена. Попробую так

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
veisss, wvxvw, это не то. Вы код видели, вообще, написанный? Вы там в упор не видите
Код AS3:
        [Embed(source='../pic/001.png')]
        public var Pict:Class;
О точно %)

Цитата:
Сообщение от cauchy Посмотреть сообщение
Ошибка при попытке import Pict;
Error: Не удалось найти определение Pict.

Упоминание класса не помогает, та же ошибка что и была.

trace(getQualifiedClassName(Pict)); выдаёт Main_Pict.
Но от этого не намного легче. Впринципе вроде получается что trace(getQualifiedClassName(Pict2)) выдаст Main_Pict2. Если такая закономерность сохраниться для 20-30 заэмбеденных картинок - то можно считать что проблема решена. Попробую так
Да, ну так у этого класса и не будет постоянного имени так вот работает флексовый компилятор - он туда пишет еще и дату зачем-то... Вобщем, правило для таких классов - подчерк, полное имя класса, который объявил эмбед, имя файла картинки, дата (милисекунды в десятеричном представлении), не буквоцифры (кроме подчерка) заменяются подчерками. Разделители между частями имени - тоже подчерки.
Но это все по-памяти, мог где-то соврать.
А вообще - легко проверить так, как BloodHound вам раньше посоветовал.

EDIT:
А, прошу прощения, это я про имя символа, а не про имя класса, имя класса - да, так как вы и описали, т.е. без даты и имени файла.
__________________
Hell is the possibility of sanity


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

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
couchy, если ссылка на класс лежит уже в Pict, зачем ее еще получать через getDefinitionByName()?

Старый 02.09.2009, 22:58
cauchy вне форума Посмотреть профиль Отправить личное сообщение для cauchy Найти все сообщения от cauchy
  № 10  
Ответить с цитированием
cauchy
 
Аватар для cauchy

Регистрация: Jan 2009
Адрес: Северный островок дефолт-сити
Сообщений: 144
Цитата:
Сообщение от udaaff Посмотреть сообщение
couchy, если ссылка на класс лежит уже в Pict, зачем ее еще получать через getDefinitionByName()?
Да, неудачный пример вышел. Просто решил сократить код, чтобы понятнее было. Вернёмся к исходному заданию:
Есть 10 заэмбеденных картинок:

Код AS1/AS2:
        [Embed(source='../pic/001.png')]
        public var pic001:Class;
 
        [Embed(source='../pic/002.png')]
        public var pic002:Class;
 
...
Затем мне необходимо сделать следующее:

Код AS1/AS2:
            for (var i:int = 0; i < 100; i++)
            {
                var c:Class = getDefinitionByName( "pic00"+Math.round(Math.random()*10)) as Class;
                var s:Sprite = new c() as Sprite;
                this.addChildAt( s );
 
}
То есть добавить 100 картинок, выбранных рандомным образом из 10 заэмбеденных.
Как это можно сделать? Причём если ещё подробнее, то необходимо их поместить в массив, чтобы потом ими можно было управлять.

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

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

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


 


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


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