Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Помогите найти в чем проблема
Flash Zone Forum > Macromedia Flash > Общие вопросы
MrAnderson
 есть такой код...
Код
cube = {};
cube.vertexList = [];
cube.vertexList.push({x:-50, y:-50, z:50});
cube.vertexList.push({x:50, y:-50, z:50});
cube.vertexList.push({x:-50, y:-50, z:-50});
//Вообщем добавляю обхекты в массив
var b = cube.vertexList.Leght;
trace(b);



и все время пишет "undefined". Как я понимаю, что-то не создается или не инициализируется. Пример взят из книги.

Помогите понять, как такое может быть smile.gif
MustLive
MrAnderson

1) Приведите полностью сообщение флеша об ошибке (ошибках). Дабы видеть, на что именно он ругается, на какую строку.

2) При этом приведите все строки на которые он ругается (и все смежные строки, чтобы точнее видеть картину).

3) Есть подозрение, что проблема в "cube".

4) Я так понял нужно писать не

Код
var b = cube.vertexList.Leght;

а

Код
var b = cube.vertexList.Lenght;

у вас одна буква пропущена (англ. длина - lenght)

5) Может метод push не был объявлен? Тут нужен полный код "cube".

6) Код в принципе корректен, только у вас совмещены две методики создания объектов:

Инициализация объекта и Функция конструктора.

Если инициализация:

cube = {};

то тогда корректней было сразу же и инициализировать свойства объекта:

cube = { vertexList: [] };

Если же использовать конструктор, например:

cube = new Cube();

то тогда и задавать через поля их значения:

cube.vertexList = [];

Хотя флешу ничего не мешает совмещать эти методики "инициализации объектов". Т.к. результат тот же в любом случае. Просто это два разных метода, а у вас получилась их комбинация (другими словами "венигрет"). По идее флеш такое игнорирует и вполне всё понимает, что от него хотят, и всё хорошо работает smile.gif.

7) Что за книжки такие нехорошие вы читаете, что ничего не работает. Не читайте таких книжек, не заслуживают они доверия, раз авторы сами не удосужились проверить на работоспособность предлагаемый код (может с инета взяли, копи-пейстнули в книгу и на печать, мол раз на сайте привели такой код, то всё будет работать).

8) Пишите свой код. Собственный, не из книг. Тогда всё будет работать точно - при этом всё будет завить только от вас. Все допускаемые ошибки будут понятны, т.к. флеш удивить уже ничем не сможет - всё будет упираться в синтаксические ошибки (если логику изначально задавать правильно - т.е. минимум логических ошибок), а также в особенности самого флеша.

P.S.

Нео, бросайте баловаться пилюлями, Матрица следит за вами wink.gif.
MrAnderson
Код
this.createEmptyMovieClip("center", 0);
center._x = Stage.width/2;
center._y = Stage.height/2;
focalLength = 400;
cube = {vertexList :[]};
cube.vertexList.push({x:-50, y:-50, z:50});
cube.vertexList.push({x:50, y:-50, z:50});
cube.vertexList.push({x:-50, y:-50, z:-50});
cube.vertexList.push({x:-50, y:-50, z:-50});
cube.vertexList.push({x:50, y:50, z:50});
cube.vertexList.push({x:-50, y:-50, z:50});
cube.vertexList.push({x:-0, y:50, z:-50});
cube.vertexList.push({x:-50, y:50, z:-50});
trace(cube.vertexList.Lenght);
vertices = [];
for (var i = 0; i<cube.vertexList.Lenght; i++) {
    center.attachMovie("vertex", "v"+i.toString(), i);
    vertices.push(center["v"+i]);
}
render = function (model) {
    for (var i = 0; i<model.vertexList.Lenght; i++) {
 var scale = focalLegth/(focalLegth-model.vertexList[i].z);
 vertices[i]._x = model.vertexList[i].x*scale;
 vertices[i]._y = model.vertexList[i].y*scale;
    }
};
render(cube);


вот полный, измененный код.

Я только начал изучать флеш в свободное от работы время.
На уровне знаю C#. Флеш меня очень заинтересовал. Я решил учиться сразу на примерах.

код взят из рус. книжки А. Болдуина "Studio Flash MX: Справочник профессионала". К сожалению, пока нашел только электронный вариант.
Там в разделе 3D графика есть пример создания куба.

P.S. Какие книжки можете посоветовать начинающему, чтобы не было подобных трабл?
MrAnderson
Ошибки как таковой нет  -  код просто не работает и все. Во всяком случаю, на мой неопытный взгляд.

"vertex" - имя символа movie-clipa с графикой.
MustLive
Цитата(MrAnderson @ 7.06.2005 - 14:51)
Ошибки как таковой нет - код просто не работает и все. Во всяком случаю, на мой неопытный взгляд.

"vertex" - имя символа movie-clipa с графикой.

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

А так скорее всего некорректный и/или неполный код. Который флеш попросту игнорирует, и потому вы и не видете никаких результатов.

Код визуально корректный, подвоха сходу так и не увидешь.

Можно например трейсы (trace) убрать, чтобы не выводило отладочную информацию, нам она не нужна для корректной работы - лишь для тестирования программы. Но это после того как всё заработает.

С vertex всё понятно smile.gif. Там ещё есть и другие муви-клипы: "center", а также динамически создаваемые "v"+i.toString() (длинной vertexList.Lenght, которая = 8).

И автор книги Дэнис Болдуин, а не А. Болдуин. Алек Болдуин - это киноактёр wink.gif. Он явно флешем не занимается (хотя мог бы быть и просто однофамилец и тёзка, но в данном случае вы просто спутали с Алеком).

Я гляну на данный код более детально как найду время.
MustLive
Цитата(MrAnderson @ 7.06.2005 - 14:19)
код взят из рус. книжки А. Болдуина "Studio Flash MX: Справочник профессионала". К сожалению, пока нашел только электронный вариант.

Не подскажите линку на данное чудо ламерской мысли. Чтобы я сам посмотрел детально на эту ламерскую книгу, в которой даются нерабочие примеры - что за фрукт такой.

Единственное что я нашёл за недолгое время поиска в сети, кроме "торговых предложений", это линка на еДонкей:
ed2k://|file|FlashMX.Studio.-.Spravochnik.profesionala[ru]
.2oo3.ace|53418582|8c4d6ac7368ebe4fee79920cd8c1850b|

Но она в данный момент не работает, и не известно будет ли ещё работать.

Глянул бы, может там ещё какой-нибудь код, из ранних примеров подскажет, что там не пашет.

Хотя я в любом случае, как найду время, посмотрю на этот код. И разберусь почему глючит.

Учитесь на реальных примерах - не из книжек (тем более ламерских), раз уж вы взялись учится на примерах (что похвально). Вообще без книжек учитесь - всю жизнь так учусь, за последние 11 лет мало книг на компьютерную тематику прочитал. А на тему того, в чём я хорошо разбираюсь, я вообще практически ничего не прочитал (разве что справочники по стандартным функциям языков программирования с которыми работаю, и то лишь некоторых языков, в других я интуитивно пишу правильный код smile.gif). Некогда читать - ты или делом занимаешься или читаешь.

Цитата
P.S. Какие книжки можете посоветовать начинающему, чтобы не было подобных трабл?

К сожалению, не могу посоветовать вам книги по флешу для начинающих - т.к. я не читал ни одной книги по флешу (ни для начинающих, ни для профи). Потому и посоветовать нечего. А зря советовать не стану.

Учитесь на реальных примерах - зашли на сайт, скачали исходник, запустили, откомпилели, посмотрели на работу, а потом на код. И познали истину. Это по началу. А дальше писать самому, лишь иногда заглядывая в Руководство по Акшон-скрипту, дабы напомнить себе синтаксис того или иного метода встроенных обьектов во флеше. cool.gif

Сейчас принято считать в профессиональном кругу флешеров, что на сегодня почти все книги про Флэш сделаны "под одну копирку". Что там почти все одинково во всех книгах, постоянно повторяют одни и теже прописные истины. Поэтому вы можете взять любую книгу - толк какой-то будет в любом случае.
MrAnderson
Во-первых, спасибо за быстрые ответы и по существу.


Если вам интересно, то книжку можно найти тут: ftp://217.106.232.112/incoming/Ebooks/Rus....podval.ee_.rar, стр. 411-416 кажется... Вообщем, там где учать создавать 3D вращающийся куб smile.gif

сам ее формат .djvu - можно открыть программой отсюда: http://windjview.sourceforge.net/

Насчет, книжек, обычно, как с C#, я читал только основной синтаксис, а также ООП (до этого имел очень смутное представление). Ну и стандартный классы, интерфейсы, пространства имен... Остальное же, конечно, познавалось только на практике...
MustLive
Цитата(MrAnderson @ 8.06.2005 - 08:45)
Если вам интересно, то книжку можно найти тут: ftp://217.106.232.112/incoming/Ebooks/Rus....podval.ee_.rar, стр. 411-416 кажется... Вообщем, там где учать создавать 3D вращающийся куб smile.gif

Спасибо, MrAnderson.

Ссылка рабочая, выкачаю сегодня ночью (поставлю на ночь качалку - FlashGet - дабы выкачала 13,7 MB книжку). И посмотрю как-нибудь ближайшие годы smile.gif - у меня долго книги лежат после выкачивания из инета, т.к. читать некогда.

Цитата
сам ее формат .djvu - можно открыть программой отсюда: http://windjview.sourceforge.net/


Для дежавю я пользуюсь DjVu Solo 3.1 cool.gif

Кстати, в том архиве, что я нашёл на еДонки, там PDFка. Но линка не рабочая в данный момент. Так что воспользуюсь вашей. Пдф удобней, чем дежавю (из дежавю сильно не наэкспортишься, и не переконвертишь, и на палм себе не сбросишь). Но для чтения, на ПК, вполне подходят оба формата.

Над данным алгоритмом с 3Д кубом я подумаю, как появится свободное время (между экзаменами, и написанием 4й и 5й курсовой).
MrAnderson
Совершенно с Вами согласен, что PDF удобнее. Тут и говорить нечего. Если скачайте все-таки в PDF - дайте знать. smile.gif

У меня тоже эказамены, правда конец 1 курса, так что полностью с Вами солидарен smile.gif.

P.S. Попроповал придложенную вами программку - к сожалению, она не смогла открыть этот файл, пишет, что нужно обновление, а оно на сайте и за деньги sad.gif
MustLive
Цитата(MrAnderson @ 8.06.2005 - 21:46)
Совершенно с Вами согласен, что PDF удобнее. Тут и говорить нечего. Если скачайте все-таки в PDF - дайте знать. smile.gif

В PDF Акробат Ридер позволяет осуществлять поиск по тексту - сам формат позволяет. Дежавю же не позволяет искать. Что в случае объёмных текстов с большин количеством страниц очень неудобно.

Конвертеров для дежавю я не встречал, поэтому кроме как распечать или сэкспортить в bmp и потом распознать (Файнридером, или через эмулятор принтера -> bmp, tiff -> finereader). А потом уже можно в хтмл, или на палм себе записать и читать. Что в случае объёмных текстов неудобно и потребует много времени (даже на моей быстрой машине).

Я забил на ту пдф-ку (в асе архиве), раз ваш rar качается. Т.к. в еДонкей нету никого, у кого есть этот файл. Поэтому качаю рар с дежавю, хоть что-то. Хотя конечно лучше было бы в пдф. Но найти в сети будет непросто данную книгу, и раз уж нашлась рабочая линка, то качаем пока то что есть wink.gif. Потом в будущем посмотрим, если будет необходимость, можно будет дополнительно пдф-ку поискать.

Цитата
P.S. Попроповал придложенную вами программку - к сожалению, она не смогла открыть этот файл, пишет, что нужно обновление, а оно на сайте и за деньги sad.gif

Скачаю и попробую открыть. Пока на этот просмоторщик (он есть в виде проги и в виде плагина к Интернет Експлореру) жалоб не было - все дежавюшки читал. Насчёт обновлений ничего не скажу, не качал smile.gif - у меня эта версия где-то с начала 2004 года и обновлять небыло потребности.
MustLive
Предисловие

Отключить вас от интернета - наслаждение, мистер Андерсон. (с) Агент Смит

По поводу алгоритма 3Д куба

Я вот решил вживую посмотреть на этот алгоритм.

Финальный рабочий код:

Код
this.createEmptyMovieClip("center", 0);
center._x = Stage.width/2;
center._y = Stage.height/2;
focalLength = 400;
cube = {vertexList:[]};
cube.vertexList.push({x:-50, y:-50, z:50});
cube.vertexList.push({x:50, y:-50, z:50});
cube.vertexList.push({x:-50, y:-50, z:-50});
cube.vertexList.push({x:50, y:-50, z:-50});
cube.vertexList.push({x:-50, y:50, z:50});
cube.vertexList.push({x:50, y:50, z:50});
cube.vertexList.push({x:-50, y:50, z:-50});
cube.vertexList.push({x:50, y:50, z:-50});
vertices = [];
for (var i = 0; i<cube.vertexList.length; i++) {
    center.attachMovie("vertex", "v"+i, i);
    vertices.push(center["v"+i]);
}
render = function (model) {
    for (var i = 0; i<model.vertexList.length; i++) {
 var scale = focalLength/(focalLength - model.vertexList[i].z);
 vertices[i]._x = model.vertexList[i].x*scale;
 vertices[i]._y = model.vertexList[i].y*scale;
    }
};
render(cube);


В итоге получается "псевдо-3Д" картинка.

В чём были проблемы.

1) length - длина, нужно правильно написать.

Не Leght, не Lenght, а именно length.

2) Я немного подправил координаты - чтобы вышла нормальная 3Д-картинка (прикольная), а не "психоделика" wink.gif

Вы в книге посмотрите, что там про координаты говорят авторы. Я взял на свой логический взгляд (все точки имеют разные координаты - полный двоичный перебор, от двоичного "0", до двоичной "7", с "-50" и "50" в качестве битов - у вас же в приведенном фрагменте кода были повторы).

3) Ругался "undefined" трейс:
trace(cube.vertexList.length);

Так как "length" была некорректно написана, то флеш думал, что это новая переменная, а учитывая, что она не инициализирована, и нигде не использована, то флеш и ругается. При правильном коде всё работает нормально, и флеш пишет "8", как и должно быть (длина массива). Трейс я убрал из финального кода, так как этот оператор нам не нужен (как я говорил ранее).

Также не работали циклы, т.к. опять же "длина" была некорректно написана.
В циклах фор, которая:
for (var i = 0; i<model.vertexList.length; i++)

4) Чтобы заработал атачМуви:
center.attachMovie("vertex", "v"+i, i);

Нужно в Лайбрари у нашего мувиклипа (я в нём сделал квадрат 100х100 толщиной в 1пх и на сцену его не вылаживал, сам код в первом кадре), который называется "vertex", указать Linkage - поставить галочку Export for ActionScript (в Export in first frame галочка сама поставится). Identifier установится в "vertex". Это нужно для работы программы.

Всё. Наслаждаемся. И познаём истину. cool.gif
MrAnderson
Цитата(MustLive @ 8.06.2005 - 23:34)
Скачаю и попробую открыть. Пока на этот просмоторщик (он есть в виде проги и в виде плагина к Интернет Експлореру) жалоб не было - все дежавюшки читал. Насчёт обновлений ничего не скажу, не качал smile.gif - у меня эта версия где-то с начала 2004 года и обновлять небыло потребности.


Плагин к IE я уже скачал - вот им нормально открывается smile.gif можно даже использовать, как и читалку - в IE мне даже больше понравилось smile.gif


Спасибо за код и за столь детальное пояснение/выявление ошибок - посмотрел - все заработало. biggrin.gif


Но у меня еще вопрос собственно по AC2:

никак не пойму, как работают события и как они связыны с объктом, конкретно с фильмом.
Поясню, что я имею в виду, на языки программирования (в д.с. не важно какой именно выбрать). Простейшая ситуация - есть форма, есть текстовое поле (это все не на флеш, а на язык прогр.!). Так вот, я имею соответственно разные событя для формы и для текстового поля.
Конкретно, события мыши, onMouseMove например. Я точно знаю, что мышь движется по форме или "зашла" на текстовое поле.
Но когда я атачу фильм это не работает. Событие, например, onMouseMove или onEnterFrame для главного объекта и для нового приатаченного movie одни и те же? Т.е. я не могу понять, когда мышь попала в область, занимаемую movie?

Если не сложно, поясните также иерархию объетов и уровни или, может, укажите конкретные ссылки на темы, где об этом можно найти.
MustLive
MrAnderson

На твои последние вопросы я ответил ещё в июле 2005. Но тогда летом был сбой на сервере, когда полетел винчестер. И в последнем бекапе не было постов за достаточно продолжительный период, поэтому в данной теме последний сохранённый пост был за 09.06.2005.

В итоге на все поставленные вопросы могу порекомендовать почитать документацию по AS (хелп, статьи и т.д.). В частности можешь почитать книги из раздела Книги по Flash. Это поможет тебе разобраться с событиями во флеше и с ActionScript в целом.
Русская версия IP.Board © 2001-2014 IPS, Inc.