Форум 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) - означает дописывание в конец массива?
в конец


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

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