PDA

Просмотр полной версии : Vertical scrolling shooter game


Quadro9
30.09.2015, 21:02
Добрый день.
Получил тестовое задание реализовать сабж.
Начинаю продумывать архитектуру и различные элементы.
1) Сразу встал вопрос реализации эффективного gameloop'а.
насколько хорош этот варинат
var lastTime:int;

function onEnterFrame(...) {
var now:int = getTimer();

world.update(now - lastTime);
lastTime = now;
}
может есть более продвинутые варианты?
2) так же интересует простейшая реализация чтобы пули не пролетали сквозь врагов.
3) Потянет ли флеш по производительности или стоит делать в Starling? По условию задачи написано сделать в ActionScript3, но вроде не ограничивают в использовании каких либо библиотек.
4) Так же интересны другие советы опытных игроделов, особое внимание будет уделяться архитектуре и чистоте кода. Чем можно "удивить" интервьюверов?

ZackMercury
30.09.2015, 21:33
2) так же интересует простейшая реализация чтобы пули не пролетали сквозь врагов.
Определяем предел задержки(delta), и если он больше предела - делим выполнение кода на несколько частей, чтобы каждая была по размеру не больше предела.
Потянет ли флеш по производительности или стоит делать в Starling?
Старлинг - это хорошо, но не для браузера.
Потянет, если правильно распределить ресурсы и оптимизировать.

1) Сразу встал вопрос реализации эффективного gameloop'а.
насколько хорош этот варинат
Достаточно хорош. :)

udaaff
30.09.2015, 21:47
Старлинг - это хорошо, но не для браузера.
Почему он не хорош для браузера?

Quadro9
30.09.2015, 21:47
Спасибо за ответы, а почему Starling плох для браузеров? Чтоб я мог аргументировать если что свой выбор. Там какие-то проблемы с поддержкой?
Кстати сам начал думать только что над блитингом + спрайт шиты, но к сожалению пока мало с ним знаком и пока не представляю как его органично вписать в архитектуру. Может есть какие-то готовые менеджеры/библиотеки?
Архитектуру думаю на основе MVC сделать, которая хорошо описана на этом сайте в статьях.

ShockWave512
30.09.2015, 22:00
- mvc для тестового задания? это если заказчик требует, а так задержит сильно
- готовая либа/движок - citrus http://citrusengine.com/ там сразу готовая система столкновений, даже несколько реализаций (есть блиттер и спрайтшиты, старлинг)
- старлинг хорошая штука для отзывчивых интерфейсов, на мой взгляд гораздо плавней и чувствительней обычного дисплей листа
- старлинг для браузеров так же хорошо как и для устройств, старлинг создавался для ускорения 2д рендеринга на слабых устройствах
- пример скрол-шутера с цитрус - http://reaper512.blogspot.com/2014/05/actionscript-3-robotlegs-2-citrus.html

udaaff
30.09.2015, 22:03
Готовые игровые движки (я про цитрус), всё же не лучшая идея использовать в тестовом задании, имхо.

Quadro9
30.09.2015, 22:21
В задании сказано сконцентрироваться на архитектуре и чистоте кода.
Ну а так как на предварительном собеседовании я сказал что шарю в MVC,
то я думаю стоит попробовать его реализовать, иначе что еще сделать чтоб показать
что я сконцентрировался на архитектуре я не знаю.
Цитрус по описанию понравился, если меня возьмут на работу обязательно его изучу,
но для тестового задания, боюсь что не стоит его использовать.

ShockWave512
30.09.2015, 22:26
MVC приемлем для комплексной архитектуры данных и представления, использовать его внутри скрол-шутерной боевки, мягко говоря странно. Разве что для меню, попапов, сетевых сервисов, социалок и т.д.

Хотя хозяин барин, если мвс нужен для демонстрации знаний и умений, то хоть с тетрисом и змейкой.

Quadro9
30.09.2015, 22:45
еще сказано, что предполагается, что я уже в состоянии решить эту задачу (в общем то так и есть),
поэтому оцениваться задача будет не по принципу работает или нет, а по тому как она реализована,
а тут могут быть проблемы, т.к. я не постиг пока что дзена красивого дизайна. Я могу спроектировать более менее нормально,
чтоб там у каждого объекта свой класс и т.д., но мне кажется что это какойто детский дизайн,
а я так понял от меня хотят увидеть что-то серьезное в плане проектирования.
Был бы признателен здешнему сообществу если бы мне помогли спроектировать что-то хорошее :)

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

ZackMercury
01.10.2015, 00:05
Почему он не хорош для браузера?
Почему-то вспомнилась тема caseyryan, где он жаловался на лаги старлинга в браузере, возникающие непойми откуда. И ещё вспомнилась "фича" со слетающим контекстом.
Вот работает себе игра, работает, свернул, посидел где-то, развернул, и нет контекста, только перезагружай страницу, бывало такое.
Ну и почему старлинг не так круто, как кажется:
1) Под него надо адаптировать гуи-элементы, любые комплексные библиотеки с прикольными шнягами для быстрой постройки интерфейсов, или делать гуи на флеше, что вносит разнородность в код.
2) Лично у меня в играх на старлинге регулярно заглядывают подвисания игрового процесса в браузере. Видимо, слабая видеокарта. Такие же игры на чистом флеше не тормозят. Суть то в том, что есть такие, у кого видеокарта ещё слабее. Некоторые сидят в браузерных играх с нетбуков и планшетов.
3) Те, у кого не поддерживается Molehill видеокартой, будут получать программную эмуляцию Molehill, т.е. выполнение будет только замедляться, а не ускоряться, и в итоге мы только проиграем.
Конечно, преимуществ больше, чем недостатков. Например, плавность его работы удивляет после флеша, фпс на высоте при больших загрузках не считая подвисаний. Но что насчёт старых компьютеров со старым железом, или слабых нетбуков, планшетов?

ShockWave512
01.10.2015, 00:11
- для восстановления контекста, надо просто хранить битмапы текстур в памяти
- для быстрой постройки интерфейса в старлинг есть Feathers
- адаптировать нечего из гуи, только писать заново, там свой дисплей лист
- на жефорсе 420 с 1гб, никогда нигде не висел старлинг, не знаю что может быть медленнее, intel встроенный какой нить
- сейчас найти железо которое не поддерживает молехил очень сложно

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

udaaff
01.10.2015, 00:19
У меня не возникают лаги. Контекст автоматически восстанавливается.
1) Под него надо адаптировать гуи-элементы, любые комплексные библиотеки с прикольными шнягами для быстрой постройки интерфейсов, или делать гуи на флеше, что вносит разнородность в код.
Никогда не использовал сторонние либы для интерфейса. Есть feathers, кому лень писать свои. Единственное неудобство, которое может возникнуть это создание лэйаута, но это тоже решаемо.
2) Лично у меня в играх на старлинге регулярно заглядывают подвисания игрового процесса в браузере. Видимо, слабая видеокарта. Такие же игры на чистом флеше не тормозят. Суть то в том, что есть такие, у кого видеокарта ещё слабее. Некоторые сидят в браузерных играх с нетбуков и планшетов.
Т.е. на дисплей листе эта игра работала бы быстрее? Тут надо сравнение, а так это просто голословное утверждение.
3) Те, у кого не поддерживается Molehill видеокартой, будут получать программную эмуляцию Molehill, т.е. выполнение будет только замедляться, а не ускоряться, и в итоге мы только проиграем.
Бенчмарки в студию, сравнение эмуляции молхил vs дисплей лист. Иначе опять голословно.

Quadro9
02.10.2015, 20:10
Делюсь с сообществом тем, что у меня на данный момент получилось, заодно надеюсь что местные гуру, сделают ревью кода и посоветуют пока не поздно какие нибудь исправления или даже сделают небольшой рефакторинг.
Архитектура (если это можно назвать архитектурой) начинает потихоньку терять стройность, а я ведь не реализовал еще и половины фич которые хотел.
Рендер решил делать на блитингах. Не знаю чем это обернется в конечном итоге, но менять решение уже не буду, попытаюсь довести до ума этот вариант.

Что еще буду реализовывать:
1) HUD (лучшие результаты, жизни)
2) Простейшую анимацию для взрывов
3) Возможно выпадающие бонусы.
4) GameOver и коректное возобновление игры с начала. (пока только наброски для этого есть.
еще думаю как реализовать чтобы враги летали карусельками как в этом примере:
https://www.youtube.com/watch?v=AlXf77Hheeo

Quadro9
21.10.2015, 14:28
Сказал "А", скажу и "Б". Завершение моей эпопеи. Долго не писал потому что ждал ответа от фирмы.
Ответ отрицательный, мол не достаточно хорошо, причем на мой уточняющий вопрос, что стоило бы сделать лучше, сказали, что не могут такую информацию сказать.
Сделал задачу на пределе своих возможностей, в рамках того времени что было отведено, возможно мог бы и лучше, но если бы мне указали путь.
Выкладываю весь финальный код и диаграмму "архитектуры" (один из пунктов задания).
Если кому интересно, посмотрите, был бы рад критике и конструктивным предложениям что можно было бы сделать лучше. Так сказать получить хоть от кого то фидбек своей работе.