Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Статьи (http://www.flasher.ru/forum/forumdisplay.php?f=101)
-   -   Знакомство с Flash 9 и ActionScript 3.0 на примере создания аркадной игры (http://www.flasher.ru/forum/showthread.php?t=83431)

MerlinTwi 30.06.2008 13:40

Вы поставили класс main.preloader как главный класс документа. На основной сцене нет поля txt, о чем и говорит флеш. Текстовое поле txt есть у мувиклипа preloader, наверное ему и стоит сопоставить класс main.preloader?
Т.е. очистить поле Document class, а в свойствах мувиклипа preloader поставить галочку Export for ActionScript и в поле Class прописать main.preloader

Faster_ 30.06.2008 16:04

Спасибо большое, но с этим я уже разобрался)) щас об другое головой бьюсь :)

other.one 20.07.2008 15:00

ау. самый дельный урок который я встречал. РЕСПЕКТ. я просто счастлив

vvk80 20.08.2008 13:12

классная игра... математика- это сила... пример супер!!! спасибо большое!

peaknik 03.09.2008 16:22

Вложений: 2
Цитата:

Сообщение от krolser (Сообщение 683064)
Большое спасибо автору. Именно эта статья помогла мне в изучении основ AS3 и зарядила волонтерством. Вот и решил поделиться с остальными своим опытом. Т.к. я еще не профессионал, то просьба сильно не пинать, а указывать на ошибки по существу.

А вот и файлик.
Вложение 17883

Обнаружил вот такую интересную вещь:
Если флеш разместить в html-коде с указанием размеров, например, в два раза меньше реального размера, то при уменьшении зума, возникает ситуация, приведенная на скриншотах.

Кто-нибудь может объяснить как от этого эффекта избавиться? :confused:

(картинки размещены в "выкрученном" до минимума зуме, при запуске картинки идентичны)

_Smirnoff 03.09.2008 17:02

stage.scaleMode = StageScaleMode.NO_SCALE;

fox kids 14.09.2008 00:40

Код:

Attemping to launch and connect to Player using URL D:\САЙТЫ\Флеш Работа\Обучающая статья\main\test1.swf
[SWF] D:\САЙТЫ\Флеш Работа\Обучающая статья\main\test1.swf - 518 bytes after decompression

Что означает и как с этим бороться?
Это происходит при Debug Movie Ctrl+Shift+Enter
Что я делаю не так?

etc 14.09.2008 01:47

Цитата:

Сообщение от fox kids (Сообщение 764068)
Код:

Attemping to launch and connect to Player using URL D:\САЙТЫ\Флеш Работа\Обучающая статья\main\test1.swf
[SWF] D:\САЙТЫ\Флеш Работа\Обучающая статья\main\test1.swf - 518 bytes after decompression

Что означает и как с этим бороться?
Это происходит при Debug Movie Ctrl+Shift+Enter
Что я делаю не так?

А что вас смущает?

fox kids 14.09.2008 01:57

Я думал что буду любоваться текстом "Хэлло Уорлд", ноя любовался только этим текстом(((
Код:

Attemping to launch and connect to Player using URL D:\САЙТЫ\Флеш Работа\Обучающая статья\main\test1.swf
[SWF] D:\САЙТЫ\Флеш Работа\Обучающая статья\main\test1.swf - 518 bytes after decompression


Pylinsky 16.10.2008 02:55

ну вот :)
после того как установил цс4, появилась срочная необходимость понять ас3...

AlexsWulf 19.10.2008 21:45

Мучаюсь уже несколько дней.
обьясните как всетаки избавиться от ошибки
Код:

1119: Access of possibly undefined property osnov through a reference with static type flash.display:DisplayObject.
Не убивая компилятор?

etc 20.10.2008 02:05

Избавиться просто — изучить ActionScript.
К сожалению, сейчас данный пример на основе игры плохо подходит для изучения AS3.

AlexsWulf 20.10.2008 10:29

Я понимаю что нужно изучить ActionScript. Как раз этим и занимаюсь на примере этой игры пишу простенький морской бой. Упёрся в эту ошибку при расстановке кораблей на поле. Подскажите хоть в какую сторону копать или что почитать связанное с этой проблемой? Или можно не связанное а вообще для изучения ActionScript.

2morrowMan 20.10.2008 12:24

Где-то идет обращение к неизвестной переменной osnov

DRAGOnoid 20.10.2008 15:11

Цитата:

Сообщение от AlexsWulf (Сообщение 771437)
Мучаюсь уже несколько дней.
обьясните как всетаки избавиться от ошибки
Код:

1119: Access of possibly undefined property osnov through a reference with static type flash.display:DisplayObject.
Не убивая компилятор?

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

AlexsWulf 20.10.2008 15:48

Цитата:

Сообщение от civhimik (Сообщение 565929)
Вот что пишет:
Код:

**Error** D:\www\www1\as3manual\AsteroidStormSourceCode3\main\GameOver.as : Line 15, Column 54 : [Compiler] Error #1119: Access of possibly undefined property panel through a reference with static type flash.display:DisplayObject.
                        this.score_label.text = "Score: "+Math.floor(root.panel.score);
**Error** D:\www\www1\as3manual\AsteroidStormSourceCode3\main\GameOver.as : Line 33, Column 9 : [Compiler] Error #1119: Access of possibly undefined property sky through a reference with static type flash.display:DisplayObject.
                        root.sky.bg.handleMouseLeave();
**Error** D:\www\www1\as3manual\AsteroidStormSourceCode3\main\GameOver.as : Line 39, Column 10 : [Compiler] Error #1119: Access of possibly undefined property sky through a reference with static type flash.display:DisplayObject.
                                root.sky.Done();        // � sky �������� �������� ���� ��������
**Error** D:\www\www1\as3manual\AsteroidStormSourceCode3\main\GameOver.as : Line 40, Column 10 : [Compiler] Error #1061: Call to a possibly undefined method gotoAndStop through a reference with static type flash.display:DisplayObject.
                                root.gotoAndStop(2);        // ��������� �� ������ ���� ������

Ну и дальше ReferenceError'ы

Это было на второй странице данной ветки. Ошибка абсолютно таже только у меня не sky а osnov.
С ней и бьюсь.
Свой код смогу выложить только как доберусь до дома. И наверно стоит это делать уже в отдельной теме.

DeLZeX 20.10.2008 16:28

В 10м Flash добавили класс-контейнер Vector и теперь Vector из статьи конфликтует с ним. import main.Vector; как в Java не помогает((( Что можно сделать, кроме переименовывания класса?

DeLZeX 20.10.2008 18:22

Код:

function resolve(ball1:basic_object, ball2:basic_object):void
{
  var b1Velocity:Vectro=ball1.Velocity;
  var b2Velocity:Vectro=ball2.Velocity;

У класса basic_object нет поля Velocity:wacko: И все компилируется, и работает.
Почему компилятор позволяет такое?
*
Блин, это dynamic class придумают же такое)))

Remizorrr 23.10.2008 12:04

Статья классная. впринципе есть и попроще варианты в интернете. для начинающих flasher-ов. 4ре части по созданию простой игры
http://siliren.ru/content/view/34/1/
http://siliren.ru/content/view/44/1/
http://siliren.ru/content/view/45/1/
http://siliren.ru/content/view/52/1/

LegendMAN 25.10.2008 09:27

Remizorrr, по всей видимости не туда запостил, в твоем примере не AS3 ;)

DRAGOnoid 25.10.2008 14:39

а примерчики всёравно хорошие ;) спасибо

terbooter 10.11.2008 12:29

А вот интересно, если я игруху сделаю на базе этого туториала никто не обидется?
Могу денег сколько-то заплатить =)

etc 10.11.2008 12:36

Ну прям с тем же кодом я бы не стал.

terbooter 10.11.2008 22:01

Почему?

etc 10.11.2008 22:47

Потому что этот код, мягко говоря, не соответствует современному AS3.

terbooter 11.11.2008 08:43

Это не проблема, я все равно все перепишу по-своему =)
Главное чтобы было с чего начать.

root.Unknown 27.12.2008 07:11

В общем есть проблема с прелоадером... Прочитав всю тему с 1-й до этой страници я выправил несколько ошибок, но все таки некоторые остались, я использую Flash CS3, 9-ка...
Опишу все как есть и сколько ошибок и каких выбевает на этом не легком пути к истине...

Значит в fl файле 3-и кадра, 1-й кадр прелоадер, 2-й кадр кнопка Start, 3-й кадр сцена с игрой...

Расположил на первом кадре MovieClip под названием "preloader" в котором текстовое поле с id: txt, ну и стоит Dynamic Text, и MovieClip под названием "progressbar" с Instanse of: progressbar
В MovieClip-е с названием "preloader" поставил в Linkage... галочку Export for AS, прописал класс: main.preloader, это внешний файл лежащий в папке main с названием preloader.as
На первом кадре в главной сцене(root), во фрейме написал stop();

Код на внешний файл preloader.as

Код AS3:

package main {
        import flash.display.MovieClip;
        import flash.events.*;
 
        dynamic public class preloader extends MovieClip {
                public function preloader() {
                        // Нужно периодически вызывать функцию Update, которая будет обновлять процент загрузки
                        // Используем старый-добрый onEnterFrame с учетом событий AS3
                        addEventListener(Event.ENTER_FRAME, Update);
                }
 
                public function Update(e : Event):void {
                        var bytesLoaded:Number = stage.loaderInfo.bytesLoaded;
                        var bytesTotal:Number = stage.loaderInfo.bytesTotal;
                        var s:String = "";
                        var percent:Number = 0;
                        if (bytesTotal>0){
                                percent = Math.floor(bytesLoaded/bytesTotal*100);
                                s = percent+"% ("+
                                Math.round(bytesLoaded/1024)+"kb / "+
                                Math.round(bytesTotal/1024)+"kb)";
                        }
                        this.txt.text="Loading... "+s;
                        this.progressbar.gotoAndStop(percent+1);
                        // Если полностью загрузились, то переходим на второй кадр
                        if (bytesLoaded==bytesTotal || bytesTotal==0){
                        removeEventListener(Event.ENTER_FRAME, Update);
                        if (parent is MovieClip) {
        MovieClip(parent).play();
                                }
                        }
                }
        }
}

Всё прально вроде бы, но при компиляции выскакивает ошибка:
preloader.as Line 1 1046: Type was not found or was not a complite-time constant: TextField.

Причем здесь TextField, я же написал dynamic public class preloader extends MovieClip { и выбрал для текстового поля Dynamic text, указал в нем ID: txt )))))

В общем думал справлюсь сам, но после 4 часов над исправлением ошибок одна за другой замучался, тут я уже пришел в тупик, что оно от меня хочет?
Подскажите пожалуйста, уже нету сил с ним боротся, код по прочтению всей темы я так понял писался для FL v. 8... Повторюсь, у меня 9-ка...

Добавлено через 5 часов 18 минут
Разобрался сам, опять моя ошибка...
Забыл написать import flash.text.TextField; Хотя в примере игры, в файле preloader.as автора этой строки нету )))))

Хотя у меня еще возник один вопрос, при компеляции файла, в Flash CS3 компилирую Ctrl+Enter, в окне Player-а в меня View > Simulate Download показывается что файл грузится... но в самом флег окне загрузка прелоадера, то есть отображения мувиклипа самого показывается только тогда, когда % дошел до 80 и только после 80, прелоадер отображается и эта полоска загрузки добегает четверь всей длины, у меня вопрос, почему эта полоска загрузки не с 0% начинает отображаться?

MerlinTwi 28.12.2008 23:53

А какой вес первого кадра? Может там все классы игры и сидят, потому-то и грузится он долго, т.к. большой?
"Export classes in frame" стоит 2 ?

root.Unknown 29.12.2008 05:33

хм... а где его ставить или посмотреть вообще?
Если на любом MovieClip-е нажать правой кнопкой мыши и выбрать Linkage..., то там можно выбрать только
Class: name
BaseClass: flash.Display.MoiveClip

Linage: Export for ActionScript (стоит галочка)
Export for runtime sharing
Export in first Frame (стоит галочка)

а где прописать "Export classes in frame" "2" не знаю... :

musat 29.12.2008 11:38

root.Unknown
Publish Settings -> Flash -> (ActionScript 3.0) Settings -> Export classes in frame

THJVHFGRE 03.01.2009 00:42

Люди, допоможите, плиз!!!
Я второй день пытаюсь разобраться с классами - полная беда, то ли я чегой

Добавлено через 1 минуту
Люди, допоможите, плиз!!!
Я второй день пытаюсь разобраться с классами - полная беда, то ли я чегой - то не въезжаю, то ли фиг его знает... Короче, пытаюсь повторить начальныйурок с классами из статьи,

Добавлено через 3 минуты
Люди, допоможите, плиз!!!
Я второй день пытаюсь разобраться с классами - полная беда, то ли я чегой - то не въезжаю, то ли фиг его знает... Короче, пытаюсь повторить начальный урок с классами из статьи, а он, зараза, пишет, что невозможно определить класс... Я поставил 3 флеш. Дошел до того, что тупо копировал текст, - результат тот же. Может, кто поможет чайнику...

Stephen Wings 09.01.2009 20:35

Уважаемый THJVHFGRE, на ваш пост никто не сможет ответить, так как он небуквально гласит: "Расскажите мне вкратце про Action Script, чтобы я все понял и мог программировать на нем".

Уважаемые знатоки :) У меня вопрос чуть менее глупый, но более конкретный. Я даже зарегистрировался, когда понял, что не могу дальше без диалога.

Итак, у меня идентичная проблема, что и уже озвучивалась в этой теме. Постом позже на нее создатель этого замечательного туториала ответил. Вот эти сообщения:
здесь.
здесь ..

но каюсь, я перечитывал ответ автора и переделывал код десятки раз, но, что называется, "не просек". Я не вижу в сообщении №112 конкретного ответа: "как изменить код, чтобы он работал?"

Прошу ответить для тех, кто в танке. Неважно, насколько глуп вопрос. Хочу разобраться. :)

MerlinTwi 12.01.2009 07:24

Цитата:

Сообщение от Stephen Wings (Сообщение 789301)
Я не вижу в сообщении №112 конкретного ответа: "как изменить код, чтобы он работал?"

заменить
Код:

for each (s in new_asteroid.sectors){
на
Код:

for (s in new_asteroid.sectors){

THJVHFGRE 14.01.2009 23:04

Понял, прошу прощения...Попытаюсь разобраться, в чем фишки...

ZlobaZl 17.01.2009 22:58

Вот возникло несколько проблем когда разбирался с примером.

пишу код для движения за мышкой
Код AS3:

package main{
        import flash.display.MovieClip;
        import flash.display.DisplayObject;
        import flash.events.Event;
 
        dynamic public class GameAs3Class_Robots_World extends MovieClip {;
        public function GameAs3Class_Robots_World() {
                addEventListener(Event.ENTER_FRAME, Move_camera);
        }
        public function Move_camera(e : Event):void {
                this.x=mouseX;
                this.y=mouseY;
        }
}
}

import flash.display.DisplayObject;
1) Если создать в основном файле мувиклип с индификатором
"main.GameAs3Class_Robots_World" Ипросмотреть как работает данный файл, то получается картина того как мелькает наш мувиклип (притом мелькает похоже както странно, то ли запоминает предыдущее местоположение и летает то к нынешнему то к предыдущему, толи складывает координаты и мелькает, в общем не так как надо).
Что изменить как исправить проблемму?
2) "addEventListener(Event.ENTER_FRAME, Move_camera);"
Это как понятно добавление события в код. синтаксис как я понял таков:
"ДобавитьСобытие(Событие.Врубания_Кадра, Производить_действие_события_в_такойто_функции)" Тогда вопрос фраза "addEventListener" будет для всех событий одинакова?
И где найти другие события кроме "Event.ENTER_FRAME"
3) Начто писать это: "(e : Event)" ? К чему переменная эта нужна?
4) Для чего нужно писать "import flash.display.DisplayObject;", как я понял чтобы работал блок this.x=mouseX; (тоесть чтобы когд понял что нам надо координаты брать) Но дело в том что и не писав этот импорт flash не выдает ошибки. Почему?

etc 17.01.2009 23:11

1) Вы используете mouseX и mouseY относительно самого клипа, а т. к. при каждом рендере кадра клип смещает свою позицию и положение курсора мыши относительного него изменяется, соответственно мы видим хаотичное движение. Как вариант, можно использовать super.stage.mouseX, super.stage.mouseY.

2) Эта строка означает, что вы подписываете на событие (как на газету) какой-либо метод-обработчик вашего класса. Если переносить в реальность, то, грубо говоря, в вашем коде вы подписываете газету с названием Event.ENTER_FRAME (в константе содержится строковое значение 'enterFrame', т. е. это «ежекадровая» газета) на почтовый ящик (метод Move_camera), который и будет получать экземпляры этой газеты (те самые «e», указанные в обработчике Move_camera).

4) Потому что класс DisplayObject в вашем коде нигде не используется. Это абстрактный класс, экземпляры которого создать нельзя, но можно создавать наследников, вроде класса Sprite. В классе DisplayObject описаны базовые свойства визуальных объектов во Flash, такие как x, y, width, height и др.

ZlobaZl 17.01.2009 23:58

Цитата:

1) Вы используете mouseX и mouseY относительно самого клипа, а т. к. при каждом рендере кадра клип смещает свою позицию и положение курсора мыши относительного него изменяется, соответственно мы видим хаотичное движение. Как вариант, можно использовать super.stage.mouseX, super.stage.mouseY.

2) Эта строка означает, что вы подписываете на событие (как на газету) какой-либо метод-обработчик вашего класса. Если переносить в реальность, то, грубо говоря, в вашем коде вы подписываете газету с названием Event.ENTER_FRAME (в константе содержится строковое значение 'enterFrame', т. е. это «ежекадровая» газета) на почтовый ящик (метод Move_camera), который и будет получать экземпляры этой газеты (те самые «e», указанные в обработчике Move_camera).

4) Потому что класс DisplayObject в вашем коде нигде не используется. Это абстрактный класс, экземпляры которого создать нельзя, но можно создавать наследников, вроде класса Sprite. В классе DisplayObject описаны базовые свойства визуальных объектов во Flash, такие как x, y, width, height и др.
1) А т что в "Миграции с АС2 на АС3" написанно что _xmouse --> mouseX в расчет не брать? И как теперь пользоваться "super.stage.mouseX" В тупую писать вместо "mouseX"? Надо ли какиенибуть Классы потипу "DisplayObject"
2) Тоесть и получается если разбирать "addEventListener(Event.ENTER_FRAME, Move_camera);"" по частям: "addEventListener"- вызов события; "(Event.ENTER_FRAME, Move_camera)" - Вызов события с такими характеристиками где: "Event.ENTER_FRAME"-Характеристики самого вызова (притом ENTER_FRAME можно заменить на чтонибуть друго (что потребуется)), а "Move_camera" адрес вызывания.
3)"который и будет получать экземпляры этой газеты (те самые «e», указанные в обработчике Move_camera)." А какие экзэмпляры имеются у ЭнтерФрэйма??? Или это пишется по стандарту (в энтер фрэйме просто ничем он вызван ен может быть), а в других случаях нужно вызывать? Это случаем например не та "дэльта", или както так, что АС2 Требовалась при обработке события использования ролика мышки (ана нам помогало определить куда ролик крутим)??
4) А можно поподробнее что за наследники "вроде класса Sprite"?

зы и еще вопросик))
Как пользоваться тогда "Мигратором" (назовем его так))))

Разберем строчку:
"_ymouse Свойство [только для чтения] flash.display.DisplayObject.mouseY Перемещено в класс DisplayObject, изменено имя на mouseY, удалено исходное подчеркивание из имени."

Как я раньше понимал что мы смотрим для АС2 код находим его это "_ymouse" далее смотри на "flash.display.DisplayObject.mouseY" Логично что это строчка неможет быть оператором, поэтому по логике "mouseY"-это оператор, а "flash.display.DisplayObject" это класс который нада импортировать. Правильно я понял? Или не так получается? Тогда почему "flash.display.DisplayObject."- абстракционный клас? И что надо сделать чтобы Его использовать???

etc 18.01.2009 00:10

1) Нет, _xmouse/_ymouse в AS2 тоже брались бы относительно клипа;
2) Нет. addEventListener — метод добавления нового слушателя, а не вызов. Вызов, а точнее отправка — это dispatchEvent.
3) Какие-какие? Экземпляры типа Event, содержат в себе как минимум ссылку на отправителя и тип. Это и есть само событие, его параметры. Т. е. когда происходит событие, вызывается подписанный на это событие обработчик и в него передаётся экземпляр этого события (e:Event), у этого экземляра есть различные свойства, как минимум тип события и ссылка на отправителя. В случае подписки на скролл мыши, будет ещё и та самая дельта;
4) О наследниках DisplayObject можно узнать в хелпе.

mouseY — это свойство, а не оператор. В AS2 аналогом было свойство _ymouse у MovieClip-ов. Импорт класса DisplayObject для использования свойства mouseY в его наследниках не требуется.

ZlobaZl 18.01.2009 00:29

1) А точно в АС2 мы же отходили от _root-а да и писали в кадре, а тут та у нас рут это имя мувиклипа. Такчто понятно это)
2) А по поводу характеристик (тоесть константы ENTER_FRAME) это правда? И где их брать эти другие "константы"???
3) Как я понял e это переменная со свойствами, дак как тогда эти свойства нам вызвать? Например координаты "х" и "у" у мувиклипа мы находим путем "name_move.x" и "name_move.у" а как тут быть?

Получается нужно разграничивать свойства и переменные. Для переменных надо импортировать кслассы для свойст ненада.

etc 18.01.2009 00:45

1) В AS2 в кадрах тоже не писали, всё в классах;
2) У класса Event есть ещё куча констант;
3) e.type, e.target, например;

Ну, грубо говоря, да, для собственных свойств импортировать ничего не надо.


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

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