Форум 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)

ZlobaZl 18.01.2009 00:49

1) Это я про себя говорю)))
2) Дак а брать где их? http://help.adobe.com/ru_RU/AS3LCR/Flash_10.0/ -от сюда? Дак тут я невижу ЭнтерФрэйма никакого.
3) Почему "например"? или там их тьма свойств? Откуда тогда достать синтаксис вызова свойств?

etc 18.01.2009 01:09

2) Лучше искать нужно :)
3) Там же, в хелпе. Читайте. Вам повезло — на русском.

ZlobaZl 18.01.2009 01:21

2) Нау..чите(чи)


Вот и получилась Убывающая последовательность из вопросов)

Добавлено через 8 минут
А вот всетаки в догонку пара вопросиков)

1) В АС2 писали имя переменных и мувиклипов как _root["blabla"+i+"_bla_"+j]. Как данное творение реализовать на flash? илиже только через массивы???
2) Какой истенный синтаксис создания мувиклипа на сцене и присваивание ему какогото имени??

Токо ненадо плс, посылать на хэлп)) я уже долго разбираюсь просто уже каша какаято в мозгах получилась, незнаю что из этого что надо выцеплять.

etc 18.01.2009 01:37

Цитата:

Сообщение от ZlobaZl (Сообщение 791663)
2) Нау..чите(чи)

http://www.picamatic.com/show/2009/0...0_bigthumb.png

Цитата:

Сообщение от ZlobaZl (Сообщение 791663)
В АС2 писали имя переменных и мувиклипов как _root["blabla"+i+"_bla_"+j]. Как данное творение реализовать на flash? илиже только через массивы???

По ссылкам или getChildByName.

Цитата:

Сообщение от ZlobaZl (Сообщение 791663)
2) Какой истенный синтаксис создания мувиклипа на сцене и присваивание ему какогото имени??

Код AS3:

var sp:Sprite = new Sprite();
sp.name = 'mySprite';
super.addChild(sp);
var mySprite:Sprite = super.getChildByName('mySprite') as Sprite;
trace(mySprite, mySprite.name);

Цитата:

Сообщение от ZlobaZl (Сообщение 791663)
Токо ненадо плс, посылать на хэлп)) я уже долго разбираюсь просто уже каша какаято в мозгах получилась, незнаю что из этого что надо выцеплять.

А придётся, я не вечный.

ZlobaZl 18.01.2009 01:52

1)
Цитата:

КАРТИНКА
Дак откуда понятьчто данное делает???

2)
Цитата:

По ссылкам или getChildByName.
Не я не про то кажись. Чето типа this.per[i] так можно писать??? или это и означает что нада создать массив per

3)"super" это ненче нам привычный рут так обозначается?)))
А как код будет выгледеть если нам надо созать 10 мувиклипов?

зы.
"ENTER_FRAME Константа "
"Примечание. Это событие не имеет фазы захвата и фазы пузырей, поэтому отправляется непосредственно целевому элементу независимо от того, находится он в списке отображения или нет."

Боже мой что за пузыри???)))

Добавлено через 2 минуты
Кстате из файла по этой теме:
Код AS3:

// При выходе мышки за пределы флешки, делать тоже самое, что и при отпускании кнопки
stage.addEventListener(Event.MOUSE_LEAVE, handleMouseUp);

что тут тогда "stage." означает?

etc 18.01.2009 02:04

Цитата:

Сообщение от ZlobaZl (Сообщение 791677)
1) Дак откуда понятьчто данное делает???

По имени константы можно найти кучу классов, которые событие с такой константой высылают.

Цитата:

Сообщение от ZlobaZl (Сообщение 791677)
2) Не я не про то кажись. Чето типа this.per[i] так можно писать??? или это и означает что нада создать массив per

Нет, нельзя.

Цитата:

Сообщение от ZlobaZl (Сообщение 791677)
3)"super" это ненче нам привычный рут так обозначается?)))

Нет, super точно такой же super, как и в AS2. Это обращение к супер-классу, либо его свойствам/методам, либо выполнение конструктора.

Цитата:

Сообщение от ZlobaZl (Сообщение 791677)
А как код будет выгледеть если нам надо созать 10 мувиклипов?

Рано или поздно вы его сами напишите. Мне — лень.

Цитата:

Сообщение от ZlobaZl (Сообщение 791677)
Боже мой что за пузыри???)))

Не забивайте голову, вам до этого ещё далеко.

Цитата:

Сообщение от ZlobaZl (Сообщение 791677)
что тут тогда "stage." означает?

Когда разберетесь с моделью дисплей-объектов в AS3, этот вопрос отпадёт сам собой.

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

ZlobaZl 18.01.2009 02:13

Ну лана небуду пока тревожить)))

Добавлено через 22 часа 27 минут
Вот ещё вопросик.

Иду по коду предложенной игры и сотавляю свой.

Код AS3:

package main{
        import flash.display.MovieClip;
        import flash.display.DisplayObject;
        import flash.events.Event;
        import main.*;
 
        dynamic public class GameAs3Class_Robots_World extends MovieClip {;
        public var all_moving:Array;
        public function GameAs3Class_Robots_World() {
                all_moving = new Array();
                addEventListener(Event.ENTER_FRAME, Update);
        }
        public function DropSeveralAsteroids():void {
                var cnt, i, Type1, Type2, Type3 :Number;
                var new_BFR:GameAs3Class_Robots_Soldat;
 
                cnt=10;
                for (i=1; i<=cnt; i++) {
                        Type1=Math.floor(Math.random()*2)+1;
                        Type2=Math.floor(Math.random()*3)+1;
                        Type3=Math.floor(Math.random()*2)+1;
                        new_BFR = new GameAs3Class_Robots_Soldat();
                        addChild(new_BFR);
                        all_moving.push(new_BFR);
                        new_BFR.drop(1)
                }
        }
        public function Update(e : Event):void {
                DropSeveralAsteroids()
                this.x=super.stage.mouseX-300;
                this.y=super.stage.mouseY-300;
 
                for each (var obj:GameAs3Class_Robots_Soldat in all_moving) {
                        obj.move()
                }
        }
}
}

Это мой основной класс.

Код AS3:

package main{
        import flash.display.MovieClip;
        import flash.display.DisplayObject;
        import flash.events.Event;
        import main.*;
 
        dynamic public class GameAs3Class_Robots_Soldat extends MovieClip{;
 
        public function GameAs3Class_Robots_Soldat() {
        }
        public function move():void {
                x += 10;
                y += 10;
 
        }
        public function drop(Type1:Number):void {
                if(Type1==1){
                        x=20;
                        y=300;
                }
                if(Type1==2){
                        x=300;
                        y=20;
                }
        }
}
}

это мой второй класс.


Моеё целью должно быть чтобы в классе "GameAs3Class_Robots_World" вызывались 2 функции move() и drop(Type1:Number). Но при их вызове вылезает данная ошибка:
TypeError: Error #1006: drop is not a function.
at main::GameAs3Class_Robots_World/DropSeveralAsteroids()
at main::GameAs3Class_Robots_World/Update()

Что помойму означает что нет данной функции в DropSeveralAsteroids() нет и в Update(). Хотя в примере именно так все реализованно. Для функции мува таже самая ошибка.




2) Второй вопрос.
Когда нам надо писать что "GameAs3Class_Robots_World extends MovieClip", а когда" GameAs3Class_Robots_World extends GameAs3Class_Robots_World_02" Как я понял это и есть наследование (вопрос "3)" Это наследование или что???) либо от мувиклипов на сцене либо от кода, потипу продолжения чтоли? или если я непонял что это такое то можете (кто нибудь) объяснить что да как?

4) Как я еще понял мы записываем all_moving = new Array(); поочередно не просто какую то переменную, а целый "блок данных" включающий себя направление на выполнение каких либо функций а потом просто перебирай все по очереди в результате чего "блок данных" у нас начинает выполняться для каждого объекта (вопрос "5)" это бред как я понял либо это реально так?). В результате чего нам ненада индексировать никакие объекты по 100 раз. Вот возникает вопрос (все ещё четвертый) а чето я непонял как колизия (столкновение) проверяется исходя из двух объектов??? Как надо вызывать их???


зы не в тему "Добавлено через 22 часа 27 минут" порадовало)

MerlinTwi 19.01.2009 02:48

1. В коде все верно. Ошибка "drop is not a function" скорее всего из-за того, что в библиотеке есть мувиклип с Class: GameAs3Class_Robots_Soldat, и создается экземпляр именно этого мувиклипа, который не имеет никакого отношения к написанному вами классу main.GameAs3Class_Robots_Soldat
Укажите в свойствах мувиклипа Class: main.GameAs3Class_Robots_Soldat и все заработает.
На будущее, когда ручками пишите имя класса, связанного с мувиклипом, нажимайте на зеленую галочку справа от поля ввода, Flash сообщит вам связанно ли указанное имя с существующим классом, или же будет создан новый.

2. да, это наследование. Лучше, конечно про наследование почитать умные книжки, но я попробую на пальцах :)
Что писать после extends зависит от того, какие свойства должны быть у вашего класса изначально (от родителя).
Если классу не нужно ничего, например, он просто хранит "x" координату, то и наследоваться не надо:
Код:

        class MyClass1 {
                public var x:Number;
        }

Если надо еще один класс, который хранит две координаты "x" и "y" можно аналогично создать класс и прописать в нем две координаты, а можно унаследоваться от уже имеющегося:
Код:

        class MyClass2 extends MyClass1 {
                public var y:Number;
        }

Новый класс MyClass2 имеет два числа "y" - прописанное в нем, и "x" - полученное от родителя MyClass1. Т.е. по сути класс MyClass2 расширяет функционал класса MyClass1.
Когда вы пишете "GameAs3Class_Robots_World extends MovieClip", то создаете свой новый класс, который наследует все свойства мувиклипа: может содержать в себе рисунок, несколько кадров, анимацию и целую кучу других полезных свойств: http://help.adobe.com/ru_RU/AS3LCR/F...MovieClip.html Т.е. как бы говорите: "ок, я беру за основу мувиклип и добавлю туда кое что свое", в вашем случае это функция для перемещения function move() и функция для установки начальных координат function drop

4. all_moving - это массив. В каждой ячейке массива можно хранить что-то. (благодаря заботам разработчиков Flash, массивы нетипиризированные, т.е. за счет некоторого снижения производительности можно в любой ячейке хранить все что угодно!)
Вы в этот массив сохраняете ссылки на созданные экзепляры классов GameAs3Class_Robots_Soldat. Вас ведь не смущает код:
Код:

var new_BFR:GameAs3Class_Robots_Soldat;
new_BFR = new GameAs3Class_Robots_Soldat();
new_BFR.drop(1);

В переменную new_BFR вы записываете ссылку на созданный (new) экземпляр класса солдат. Точно так же и в массиве хранятся такие же ссылки, только их там много. Вот этот код будет аналогичен вышеописанному:
Код:

var ar:Array = new Array();
ar[0] = new GameAs3Class_Robots_Soldat();
ar[0].drop(1);


P.S. Все вышеописанное имеет мало отношения к AS3, а больше к основам программирования. Советую вам сначала почитать книги по программированию вообще.

ZlobaZl 19.01.2009 04:09

2) Отлично. Получается что мы разными классами описываем разные свойства разных объектов, а потом как в конструкторе собираем мир из свойств. На примере игры ты взял сначало описал поведение в целом объектов (столкновение, а также вывод жизней) в классе basic_object, затем наши "кругляшки" делятся на движемое и недвижемое имущество (двигаются астеройды, не двигается земля) но всеже они такие базовые объекты изза чего ты создал 2 класса moveing_object and static_object. ну и т.д. в итоге потом после уноследования нада "скрепить" базик со статиком и базик с мувингом. Но тогда как реализовать уноследование сразу от 2х классов???
4) хм тоесть реально реализовать потипу так:

Код AS3:

for each (var obj:GameAs3Class_Robots_Soldat in all_moving) {
    for each (var obj2:GameAs3Class_Robots_Soldat in all_moving) {
            obj.stolknovenie(obj2)
    }               
}
 
 
...
class .. GameAs3Class_Robots_Soldat ..
 
...
stolknovenie(var obj2:GameAs3Class_Robots_Soldat ){
    if(obj!=obj2 && stolknovenie_ne_izbejno){
          blabla
    }
}

тут я прокручиваю 2 массива и функцией в которую вносится второй объект, проверя нет ли столкновения с этим объектом.
дак вот интересно реально так будет работать? Или в каких местах нада чуть подправить (например "obj!=obj2" корректно?)?


зы и в догонку.
all_moving.push(new_BFR) - означает дописывание в конец массива? или в любую пустую???

Добавлено через 22 часа 55 минут
Дак что скажете?

MerlinTwi 21.01.2009 13:23

> 2. Но тогда как реализовать уноследование сразу от 2х классов???
Во флеше - никак. И мне, к примеру, ни разу не потребовалось. Если очень надо, то посмотрите метод Proxy, но это уже дебри, лучше подумать еще и отказаться от множественного наследования :)

4. Можно и так. Только получается избыточно. Если было проверено столкновение obj1 с obj2 зачем еще делать проверку столкновения obj2 с obj1 ?

> all_moving.push(new_BFR) - означает дописывание в конец массива?
в конец

ZlobaZl 21.01.2009 22:09

Спасибо за ответы)

ZlobaZl 05.02.2009 07:01

Подскажите как реализовать такое:

Надо создать 10 мувиклипо каждый со своим типом. Тип выбирается в момент создании в самом главном классе. Нужно чтобы значение этого типа вносилось с характеристики объекта как тажа координата х (икс) а далее в классе по этому объекту выбиралось бы (из условия о типе) какую функцию запустить для обработки.

Мне это надо из за того что появление мобов и героя происходит в разное время, хотя наследование идет от одного и тогоже класса. Следовательно когда я создаю героя или моба (зы моб это компьютерный игрок (он же бот)) мне нужно указать что герой это тип 1, а моб это тип 2 и т.д.

заранее спасибо;)

Денис00 04.03.2009 20:32

Я немного чайник, объясните, плз.
Вот установил я Flash CS4. Почитал уроки. Пытаюсь сделать всё по ним - и не въезжаю, скрипт в отдельном файле должен быть или в том же, где сцена? Если в отдельном, то просто ничего не происходит, если в этом, тоже самое, но плеер ещё и ругается на первую строку.
P.S. ActionScript я немного знаю, до этого во Flex-е пытался делать разные вещи, кое-что получалось. Так что мне нужно разобраться, как здесь хотя бы выполнить trace ("Hello world!"), а дальше я сам разберусь.

etc 04.03.2009 22:23

Классы всегда во внешних файлах.

Денис00 04.03.2009 23:31

Объясните тупому - есть папка flash, в ней - ролик. Где должен лежать файл скрипта и как и где прописать к нему путь? Как я понял, это прописывается в свойстве class в основном мувике, но что-то ни черта не получается. Папки через точку, да?
P.S. Всё, разобрался. :)

myLove 17.03.2009 03:42

Блин! А ведь не все в россии сволочи! Хоть кто-то не пожалел времени и сил и написал всё красиво и подробно...
Спасибо большое!!!

RidingTheFlash 22.05.2009 15:40

Спасибо. Понравились модельки, можно ли их использовать, или какие-то наводки по созданию похожих может есть?

MerlinTwi 23.05.2009 17:52

Использовать можно.
А наводки... берешь знакомого 3D-шника, ставишь ему пиво... :)

togoa 24.05.2009 20:28

Грустно это всё... стоит Adobe Flash CS4, данный туториал не работает. То есть уже вот тут (class Preloader):

Код AS3:

                        this.txt.text="Загрузка... "+s;
                        this.progress.gotoAndStop(percent+1);
                        // Если полностью загрузились, то переходим на второй кадр
                        if (bytesLoaded==bytesTotal || bytesTotal==0)
                        {
                                removeEventListener(Event.ENTER_FRAME, Update);
                                parent.play();
                        }

всё для меня закончилось.
progress.gotoAndStop -> ошибка, для начала просто убираем, не найдя вменяемой инфы в инете, только какие-то ужасы...
parent.play(); -> ошибка, делаем (parent as MovieClip).play();, как кто-то тут подсказывал...
(parent as MovieClip).play(); - валится на рантайме...

короче жизнь дерьмо:) То ли сильно изменили AS3 за это время, то ли я со своими 4 годами ООП уже в маразм впал(((

etc 24.05.2009 21:54

togoa, в коде статьи много чего не работает в режиме strict. ООП тут непричем.

togoa 25.05.2009 00:17

Ах, режим стрикт...))) Дело видимо в том, что я с AS вообще дела никогда не имел, занимался С++, потом С#, сейчас ASP.NET, самое близкое что было - javascript и совсем немного java. Поэтому для меня многое может не доходить, я даже и не спорю, что я тут нуб полный:) Просто расстроился, найдя исходники и клёвое описание, вроде на нужном языке и ни разу не компилируется((

Отбросив лирику, так что за режим и как с ним бороться?

MerlinTwi 25.05.2009 09:08

File->Publish Settings->Flash->ActionScript 3.0 Settings->Strict mode галочку снять...
но только на время изучения статьи, свои проекты писать обязательно в "Strict mode"!

togoa 27.05.2009 02:23

Глянул, что это... нет уж, лучше код поправить, нинада снисхождений:)

npou 28.05.2009 12:14

Добрый день.
Почитал статью, начал разбираться и непонял вот эту часть
"Еще один нюанс, наши астероиды вращаются вокруг своей оси, и после добавления полоски жизни, она тоже будет вращаться. Поэтому сам астероид и его картинку нужно разнести в разные мувиклипы и поворачивать только вложенную картинку (bg)."
Копался в коде, но так и не понял что это значит.
Еще в библиотеке есть турель и есть турель_bg, на турель_bg нету скрипта, но если удалить ее из библиотеки, то в игре нету этой турели.

Вроде бы вопросы схожи и мне непонятно про это bg. Если можно простенький примерчик или объяснение про эти bg.
Спасибо.

twix1124 12.06.2009 22:00

Респект тебе, автор =) Только вчера скачала flash, 2я страница html - "полёт нормальный" =)

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

З.ы. нигде не мог найти пример создания игры

Raimund 25.07.2009 01:07

объясните мне чайнику.
почему s выделено плюсами trace("s="+s+", ar="+ar);?
Код AS3:

function CheckArguments2(s:String, ... ar):void { 
    trace("s="+s+", ar="+ar);
}
CheckArguments2("test", 1,7,"check");    // s=test, ar=1,7,check


SergFD 02.08.2009 13:18

все работает, пускай автор не обижается но мне кажется что этоу игру написал не он
1) Start- почему не на руском да и прочие еденицы в игре на английскоком в том числе.
2) Код без коментов -- это настараживает
Но всеравно спасибо автору темы за исходники.

BlooDHounD 02.08.2009 14:37

SergFD, оставьте свои кажется при себе. а то часто креститься придётся.

buskaMuza 06.08.2009 13:11

Цитата:

Маленькое отступление. Мне стало интересно, почему при добавлении числа к строке “строка”+Number, его не нужно преобразовывать в строку toString() ? Написал маленькую проверку:

Код AS3:

var s:String="1";
var num:Number=4;
s+=num;
num+=s;
trace("s="+s+", num="+num); // s=14, num=414

Ни каких ошибок компилятор не выдал. Это что же получается, все как раньше? Переменная num по пути из Number стала String и в результате получили “414” вместо ожидаемых “18” или хотя бы ошибки компиляции?! Нафига тогда вообще типы переменных нужны? Что-то я не понял
Это нормально как раз :) Пусть есть 2 переменные разных типов: число и строка. Вы производите с ними какое-то совместное действие. При этом есть 3 варианта:
- выдать ошибку, что типы не соответствуют;
- преобразовать строку в число и выполнить действие как с числами;
- преобразовать число в строку и выполнить с ними операцию как со строками.

Почему Вы считаете, что третий вариант хуже второго? :) Если уж так следить за типами, то выбирать третий вариант. Но в подобной ситуации, думаю, достаточно выбрасть стандартный способ - третий.

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

Пока что пробую сделать карточную игру типа "Башенки" :) Застоорилась на событии клацанья по карте - не знаю пока что как это делается по-человечески.... чтоб нигде потом ничего не потерялось и все правильно работало.
Но пока что флеш вместе с AS почти полностью меня захватил и увлек! :)

SergFD 13.08.2009 14:58

Цитата:

Сообщение от SergFD (Сообщение 839918)
все работает, пускай автор не обижается но мне кажется что этоу игру написал не он
1) Start- почему не на руском да и прочие еденицы в игре на английскоком в том числе.
2) Код без коментов -- это настараживает
Но всеравно спасибо автору темы за исходники.

Был не прав - извеняюсь прерд автором.:drinks:

veisss 01.09.2009 12:19

действительно классная статья. сам с нее начал AS3 учить, вот во что у меня превратилась сие творение Robocity

VladiT 30.09.2009 23:53

Автор, ты реально крут:) у знакомого взял этот пример, начал ковыряться и вот только сейчас нашел этот форум. До этого никогда не работал с флешем, а тут решил попробывать, делал все на AFlash CS4, 10-й Player. После биллион ошибок, вроде все стало работать(хотя есть кое какие глюки дошел до посл. стр). Вот только мне почемуто показалось, что игру я делал быстрее чем учил флеш, хотя вникал и переписывал все в ручную, вплоть до комментариев. Сейчас вот проблемы с этой моделью дисплей-объектов AS3.0 ни как вникнуть немогу, что где куда... не вижу общей картины связаности, также так как там не указан Document class, без понятия как порядок загрузки мувиков... чувствую сейчас отправят в гугл :)

Насчет примера, так как код старый, незнаю реально ли на нем нормально научиться... повторюсь до этого с флешем не связывался, начил ровно с AFlash CS4 и AS3.0.

petrikov 04.10.2009 03:04

Я тоже начал с cs4, порыскав в интернете на предмет обучающих материалов, наткнулся на сей пример. Сперва на несущественные вещи (на мой взгляд) забивал, но потом пришел к выводу, что я в принципе не понимаю, что делаю)). В итоге начал заново и все по порядку.
Ближе к делу.
Код AS3:

// Нажатие кнопки мыши по нашему мувику
function handleMouseDown(event:Event):void {
        var dx:Number = width-stage.stageWidth;
        var dy:Number = height-stage.stageHeight;
        var dragRect:Rectangle = new Rectangle(-dx,-dy, dx,dy);
        startDrag(false, dragRect);
}

при клике мышкой на фоне фон улетает в сторону. Внимание - вопрос. Как осуществляется расчет координат на сцене? мувик с фоном нужно помещать центром в левый верхний угол scene? Ответы на самые тупые вопросы искать тяжелее всего...

TonKhaO 18.10.2009 14:07

прям вопрос по первому пункту, хеллооу ворлд почему не получаетися посмотрите скриншот, все сделал как там написано и нифига в аутпуте нету
[откоцано за разнос страницы форума]

Anate 09.11.2009 23:15

Я тоже вначале застрял. Практически ничего не понимаю. Есть уроки по ActionScript 3.0 для совсем чайников?

mykolka 25.11.2009 19:13

очень понравился урок (да и сама игра). сижу вот разбираюсь. автору большое спасибо!

пока не смог отловить утечку памяти: через несколько минут игры начинаются жуткие тормоза (загрузка процессора под 100%). юзаю флеш цс4. деструкторы вроде везде стоят. мож сборщик мусора в флеше плохо работает?

mysBer 02.12.2009 00:27

Подскажите пожалуйста, в чём ошибка:

TypeError: Error #1007: Попытка реализации в объекте, который не является конструктором.
at src::moving_object()
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at src::sky()
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at game_fla::MainTimeline()
TypeError: Error #1007: Попытка реализации в объекте, который не является конструктором.
at src::moving_object()
at src::sky()
at flash.display::Sprite/constructChildren()
at flash.display::Sprite()
at flash.display::MovieClip()
at game_fla::MainTimeline()

bzzt 03.12.2009 23:46

Цитата:

Сообщение от mysBer (Сообщение 869619)
Подскажите пожалуйста, в чём ошибка:

TypeError: Error #1007: Попытка реализации в объекте, который не является конструктором.
at src::moving_object()
at flash.display::Sprite/constructChildren()
...

У тебя мувик, полагаю, компилируется для 10-го флешплеера. Поставь в настройках 9-ку, мне помогло. Сам код затыкается в moving_object(), при Velocity = new Vector().

mysBer 04.12.2009 01:28

bzzt, спасибо огромное! Помогло!

DVHERO 17.12.2009 14:37

Здравствуйте. Вот повезло найти этот форум. Начать разбиратся в этой игре что и как по туториалу. Все шло хорошо, но сейчас возникла проблема с астероидами, они не двигаются..., делал все как написано в туторе, просматривал исходник, вроде все также, но мой пример почему то не работает,подозреваю что косяки в moving_object и sky,больше негде)
vector тоже использую из туториала

moving_object.as
Код AS3:

package main {
    import flash.display.MovieClip;
    import main.*;
 
    dynamic public class moving_object extends basic_object {   
        const DROP_RADIUS:Number = 200;    // разброс при вбрасывании
    const MIN_SPEED:Number = 1;  // раброс начальной скорости
    const MAX_SPEED:Number = 10;
          public var Velocity:Vector; // вектор движения
 
          public function moving_object() {
                var num:Number;
                num = Math.floor(Math.random()*totalFrames)+1; // выбираем случайный кадр
                gotoAndStop(num); // и переходим на него
                Velocity = new Vector(); // создаем вектор
                // вычислим наш радиус, основываясь на размере картинки
                radius = Math.floor((width+height)/4);   
          }
              // Вбросить объект рядом с указанной точкой x1:y1 и двигаться к x2:y2
                  public function drop(x1:Number,y1:Number, x2:Number,y2:Number):void {
          // координата вброса
          x = x1 + (Math.random()-0.5)*DROP_RADIUS;
          y = y1 + (Math.random()-0.5)*DROP_RADIUS;
          // направление
          Velocity.setMembers(x2-x, y2-y);
          // скорость
          var spd:Number = MIN_SPEED + (MAX_SPEED-MIN_SPEED)*Math.random();
          // приведем длину вектора к выбранной скорости
          Velocity.mulScalar( spd / Velocity.magnitude() );
          }
                    // Переместиться
                  public function move():void {
                    x += Velocity.x;
                y += Velocity.y;
            }
    }
}

sky.as
Код AS3:

package main {
    import flash.display.MovieClip;
    import flash.events.*;
    import main.*;
 
    dynamic public class sky extends MovieClip {
                var new_asteroid:moving_object;
          public function sky() {
                addEventListener(Event.ENTER_FRAME, Update);
                                dropAsteroid();
                }
                    public function dropAsteroid():void{
                new_asteroid = new moving_object();
                addChild(new_asteroid);
                new_asteroid.drop(200,300, 500,500);
                        }
 
                        public function Update(e : Event):void {
                // Проходим по всему массиву созданных объектов
                // и заставляем каждого сдвинуться в своем направлении
                    new_asteroid.move();               
          }
    }
}

что я делаю не так


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

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