Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Пишу платформер. Есть вопросы. (http://www.flasher.ru/forum/showthread.php?t=189462)

Инсайт 13.12.2012 00:44

Пишу платформер. Есть вопросы.
 
Вложений: 1
Для начала хочу сердечно поприветствовать все сообщество этого форума :) Меня зовут Саня и я уже пару месяцев изучаю ActionScript 3.0.
Из книг прочитал Колина Мука. Много чего не понял, ввиду того что это мой первый язык программирования, но юзаю гугл и учусь на практике (на мой взгляд лучший способ обучения :))

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

Код пишу в FlashDevelop после прочтения тут блога господина Кордума :)

Сама игра пока что выглядит так:

1) swc библиотека с графикой - подключена к проекту

2) Класс Main - основной класс игры. В нем создается массив хранящий все платформы, по которым прыгает игрок. Слушатель событий ENTER_FRAME прикручен к stage и через цикл проверяет столкновения игрока с платформой. Тут же программно созданы несколько платформ, что бы вы могли посмотреть на все это (файл прикреплю к теме)
И наконец слушатели событий на нажатие клавиш - для движения игрока. И слушатель событий клика мышки для атаки.

3) Класс Panda(он же класс персонажа). В нем прописаны функции движения влево/вправо и функция прыжка (которые принимают данные от слушателей событий в Main). Тут прописана так же сила гравитации, действующая на игрока.
Пересечение игрока с платформами считывается хитрым способом, вычитанным на блоге http://xitri.com/. В самом мувике персонажа я создал 4 объекта-невидимки и расположил их по сторонам света с именами p1,p2,p3,p4. Функция ENTER_FRAME в классе Main - проверяет методом
Код AS3:

hitTestObject()

пересечения этих маркеров с платформами и реагирует соответственно.

4) Класс Platform (класс описывающий платформу). В нем всего одно действие. В методе-конструкторе вешается слушатель событий

Код AS3:

this.addEventListener(Event.ADDED_TO_STAGE, addToStage);

и если платформа добавлена на сцену - выполняется функция

Код AS3:

(this.parent as Object).addPlatform(this);

Про эту функцию я так же вычитал на xitri.com. Она вызывает метод addPlatform в классе в котором был создан экземпляр Platform и передает в качестве параметров - саму себя.
Метод addPlatform описан в классе Main и выглядит так:

Код AS3:

internal function addPlatform(Obj:Object):void
                {
                        this.platform.push(Obj);
 
                }

Он просто добавляет полученный объект в массив хранящий все платформы, для дальнейшего прослушивания событий на столкновения.

К посту я добавил swf файл. В нем в классе Main создается персонаж и три платформы. Все работает - можно попрыгать по ним :)

А теперь внимание - вопрос.
Надо делать скролл уровня. Для этого как я вычитал в интернете - надо всю графику заключать в один большой мувиклип и двигать его относительно персонажа. Ок - я создаю во Flash IDE из объектов небольшой уровень, и оборачиваю все объекты в мувик. Но когда я в коде добавляю его на сцену - все мои функции перестают работать. 4 часа я пытался понять что не так и тут вкурил. В этом большом мувике лежат экземпляры классов swc, а не экземпляры классов, которые я наследовал от классов в swc.
Выход вроде есть - создавать каждый блок программно, присваивая ему переменную и бла бла бла - я умру так делать :D
Как мне быть? Как создавать уровень?
P.S. Думал о том, что бы сделать редактор уровней, но я встречал лишь такие, которые сохраняют данные в XML и потом игра на их основе делает уровень. Мне не пойдет, потому что хочу потом игру адаптировать под Вконтакте, без обращений к серверу (я просто не умею работать с сервером :p)

GBee 13.12.2012 01:05

Раз вы любите Хитри :о)
http://xitri.com/2009/07/13/scrollin...cept_hero.html

Котяра 13.12.2012 01:06

Цитата:

про панду с бензопилой, которая режет волшебных пони в их няшном волшебном мире
Это круче Медведя и рибы

GBee 13.12.2012 01:08

Цитата:

Это круче Медведя и рибы
Который на машине?

Инсайт 13.12.2012 01:11

Цитата:

Сообщение от GBee (Сообщение 1109481)
Раз вы любите Хитри :о)
http://xitri.com/2009/07/13/scrollin...cept_hero.html

Я читал это. Но видимо я тупой и не понимаю как это адаптировать по свой проект :D Там все писалось на AS2 и в кадрах.. а если делать по нашенски, то я хз как))

Добавлено через 40 секунд
Цитата:

Сообщение от GBee (Сообщение 1109483)
Который на машине?

Кстати крутая игра была))))))))) Но закачик явный наркоман)))

bav 13.12.2012 01:12

Привет. Но ведь ничего не мешает сохранить XML-описание уровня в какой-нибудь константе внутри игры.
Код AS3:

// Например так
public static const LEVEL_1:XML = <data><mapSize width="4" height="4"/> ... </data>


Инсайт 13.12.2012 01:15

Цитата:

Сообщение от bav (Сообщение 1109486)
Привет. Но ведь ничего не мешает сохранить XML-описание уровня в какой-нибудь константе внутри игры.
Код AS3:

// Например так
public static const LEVEL_1:XML = <data><mapSize width="4" height="4"/> ... </data>


Слушай а я и не подумал))) Клево - спс ;)
Но вот вопрос с тем как создавать уровень - все еще открыт :) Может все таки возможно строить его во FlashIDE?)

Котяра 13.12.2012 01:25

глянь на flashpunk
или flixel

Инсайт 13.12.2012 01:27

Цитата:

Сообщение от Котяра (Сообщение 1109489)
глянь на flashpunk
или flixel

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

bav 13.12.2012 01:30

Лучше, на мой взгляд, написать редактор уровней, где как в IDE можно будет создавать платформы и выбирать их расположение, размеры, создавать мобов, и так далее, с последующим сохранением описания уровня в XML. Это удобно. Можно, да, создавать уровень в IDE. Тогда нужно при экспорте клипа (платформы, например) задавать ему имя класса (например Platform) и в той же папке где лежит .fla создать файл Platform.as примерно такого содержания:
Код AS3:

package
{
    import flash.display.MovieClip;
    import flash.events.Event;
 
    public class Platform extends MovieClip
    {
        public function Platform()
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
 
        private function init(e:Event = null):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            trace("Hello, I am platform!");
        }
    }
}

Ну и писать здесь уже все, что хочешь. Только я не проверял, но должно работать. Еще можно этот .as файл хранить в отдельной папке (например, scripts), тогда нужно будет при экспорте клипа указать scripts.Platform, а в самом файле уточнить пакет:
Код AS3:

package scripts
{
    ...
}

Но лучше все-таки редактор уровней, с ним ты не будешь привязан к IDE.

Котяра 13.12.2012 01:34

Цитата:

Т.е. я пишу игру не просто что бы написать игру, а что бы научится круто кодить
Круто кодить == использовать готовые движки, а не писать велосипеды. Исходники, которых, открыты.
В процессе, может ты и поймёшь, что использовать чужой двиг - нафиг.
И лучше сделать свой - узконаточенный.
Но в первую очередь, советую изучить существующие решения.

Bgg 13.12.2012 01:42

Цитата:

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

Изучив хорошую чужую библиотеку вы поймете каким может/должно быть API движка. Без этого вы изобретете кучу ненужных и наверняка неправильных велосипедов.

ps имхо писать саму игру интереснее чем писать сам движок.

Инсайт 13.12.2012 01:43

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

Сообщение от bav (Сообщение 1109491)
Лучше, на мой взгляд, написать редактор уровней, где как в IDE можно будет создавать платформы и выбирать их расположение, размеры, создавать мобов, и так далее, с последующим сохранением описания уровня в XML. Это удобно. Можно, да, создавать уровень в IDE. Тогда нужно при экспорте клипа (платформы, например) задавать ему имя класса (например Platform) и в той же папке где лежит .fla создать файл Platform.as примерно такого содержания:

Но лучше все-таки редактор уровней, с ним ты не будешь привязан к IDE.

Спасибо вам добрый бородатый мужчина :)) Убедили что нужен редактор уровней - пойду писать))))

В благодарность вот вам интересная цветовая схема для FD)

Инсайт 13.12.2012 01:56

Цитата:

Сообщение от Bgg (Сообщение 1109495)
Изучив хорошую чужую библиотеку вы поймете каким может/должно быть API движка. Без этого вы изобретете кучу ненужных и наверняка неправильных велосипедов.

ps имхо писать саму игру интереснее чем писать сам движок.

Спасибо за совет) Что ж попробую поковырять flashpunk как советовал Котяра

bav 13.12.2012 02:04

Спасибо, но мне как-то ближе моноширинные шрифты :)

Котяра 13.12.2012 02:06

Цитата:

писать саму игру интереснее чем писать сам движок.
Кому как

Tails 13.12.2012 10:37

Инсайт,
Цитата:

которая режет волшебных пони
За что же вы их так ненавидите?

GBee 13.12.2012 11:41

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

Инсайт 13.12.2012 12:05

Цитата:

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

Хехе)) Клево)) Я наверное так и поступлю. Скачал Flashpunk, а он только с растровой графикой работает :(
Кстати Инсайт - это фамилия такая)))))

GBee 13.12.2012 12:33

Меня тоже не слушайте :о)

elder_Nosferatu 13.12.2012 13:56

Цитата:

Сообщение от Инсайт (Сообщение 1109553)
...
Скачал Flashpunk, а он только с растровой графикой работает :(
...

Это как бы неудобно, но в то же время - хорошее преимущество! На самом деле векторная графика не так хороша как кажется... Она очень компактна но отрендерить ее на много сложнее, чем растровую. Так что в очень навороченых прожектах для повышения производительности приходится отрисовывать свои векторные творения в битмапы и работать с ними (гы-гы, прощай МувиКлип).

В этом свете единственным неудобством движков типа FlashPunk можна назвать отсутствие встроенных инструментов кеширования векторной графики в растр. Но это очень интересный процесс и советую самостоятельно в нем разобраться.

Zebestov 13.12.2012 14:13

Цитата:

Сообщение от Котяра (Сообщение 1109493)
Круто кодить == использовать готовые движки.

Ересь какая-то.

Инсайт 13.12.2012 15:08

Цитата:

Сообщение от elder_Nosferatu (Сообщение 1109571)
Это как бы неудобно, но в то же время - хорошее преимущество! На самом деле векторная графика не так хороша как кажется... Она очень компактна но отрендерить ее на много сложнее, чем растровую. Так что в очень навороченых прожектах для повышения производительности приходится отрисовывать свои векторные творения в битмапы и работать с ними (гы-гы, прощай МувиКлип).

В этом свете единственным неудобством движков типа FlashPunk можна назвать отсутствие встроенных инструментов кеширования векторной графики в растр. Но это очень интересный процесс и советую самостоятельно в нем разобраться.

Спасибо старый вампир :) Поковыряю гугл на эту тему обязательно)

elder_Nosferatu 13.12.2012 18:38

Гугл слишком далеко... Почитайте справку по BitmapData#draw(). Это основной инструмент. Дальше просто прийдется решить вопрос с анимацией (МувиКлип прийдется заменить чем нибуть самопальним) и органихацией кеширования всех ресурсов перед стартом приложения (если ресурсов многовато, то запихнув весь процесс в один кадр, получим неприятный тормоз)

Sintesis 13.12.2012 19:56

Писать свой движок интересно, особенно радостно, что можно добиться такой процедурности, что в игре не будет отдельных классов для каждого уровня, игра не будет иметь большой по объёму код и это благодаря движку. Но для очень сложных задач, таких как движок физики или конвейер 3D графики - лучше пользоваться посторонними, пока хотя-бы лет 5 в программировании не побудешь.

Котяра 13.12.2012 23:57

Цитата:

Ересь какая-то.
Вадим, это не ересь.
Я может неудачно выразился просто. Нужно просто быть в теме и не изобретать велосипеды, когда есть готовые решения. И уже осознано писать свой велосипед, зная, что существующие движки по каким-то объективным причинам не подходят.

Zebestov 14.12.2012 00:04

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


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

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