|
JavaScript / HTML Создание динамической разметки страниц |
14.03.2015, 22:51
|
#1
|
AnyKey`щик
Регистрация: 14.03.2015
Сообщений: 5
Написано 2 полезных сообщений (для 5 пользователей)
|
DarkSpace
Игра представляет собой браузерный космический шутер.
Разработка ведётся с использованием JavaScript и HTML5.
Ссылка на игру
Актуальная версия: 0.8 Alpha
Что есть на данный момент:
- Игрок, его перемещение и стрельба
- Магазин с возможностью покупки брони, орудий и кораблей
- Модуль миссий
- Враги (как же без них?)
Changelog:
V.0.6:
- Изменены хар-ки товаров в магазине, а также награда за уничтожение врагов и выполнение миссий
- Добавлен новый корабль
- Добавлено меню паузы (внутри есть миникарта)
V.0.7:
- Исправлена ошибка при загрузке игры
- Добавлены планеты (чисто для фона)
- Добавлено несколько новых кораблей и орудий
- Исправлено отображение шкалы опыта
- Добавлено ограничение для товаров в магазине по уровню
- Изменения в балансе
V.0.8:
- Очередные изменения в балансе
- Добавлено отключение центрирования камеры в игре (в настройках)
- Добавлен ускоритель (Shift - использование)
- Добавлен новый тип миссий - зачистка (доступен с 7-ого уровня)
Управление:
Стрелки - перемещение корабля и переключение между пунктами меню
Пробел - стрельба/выбор
E - стыковка со станцией
Shift - использование ускорителя
Escape - меню паузы
Скриншоты:
При наличии идей/замечаний обязательно пишите их, всё будет учтено
Последний раз редактировалось DARKSIDER, 15.03.2015 в 12:15.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо DARKSIDER за это полезное сообщение:
|
|
14.03.2015, 23:16
|
#2
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: DarkSpace
Весьма прикольно, не мало работы сделано.
Хочеться чтобы было нормальное управление мышкой тоже, ну там по меню клацать.
Есть ли конкретный roadmap, или разработка ведеться органично?
Также было бы хорошо если canvas скейлилась под размер окна.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.03.2015, 23:35
|
#3
|
AnyKey`щик
Регистрация: 14.03.2015
Сообщений: 5
Написано 2 полезных сообщений (для 5 пользователей)
|
Ответ: DarkSpace
Сообщение от moka
Хочеться чтобы было нормальное управление мышкой тоже, ну там по меню клацать.
|
Не очень хочется с мышкой работать. Возможно, в одной из более поздних версий запилю.
Сообщение от moka
Есть ли конкретный roadmap, или разработка ведеться органично?
|
Да, есть. На пару сборок вперёд, но стараюсь корректировать под запросы юзеров.
Сообщение от moka
Также было бы хорошо если canvas скейлилась под размер окна.
|
Чуть позже попытаюсь сделать.
|
(Offline)
|
|
15.03.2015, 08:40
|
#4
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: DarkSpace
Мой провайдер говорит что сайт находится в реестре запрещенных сайтов.
Выложи хотя бы скрины.
|
(Offline)
|
|
15.03.2015, 12:21
|
#5
|
AnyKey`щик
Регистрация: 14.03.2015
Сообщений: 5
Написано 2 полезных сообщений (для 5 пользователей)
|
Ответ: DarkSpace
Сообщение от Nex
Выложи хотя бы скрины.
|
Выложил.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.03.2015, 17:20
|
#6
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: DarkSpace
- Мне больше нравиться управление top-down шутерами 'стрелки = вектор направления', все по-началу пытался улететь вверх зажав UP.
- С мышкой не так и много возни.
- Умудрился потерять корабль-базу, а она сама похожа на часть фона.
- Никакого ориентира нету, непонятно на сколько улетел вперед или назад, я бы советовал смещать звезды-фон относительно объектов переднего плана - имитации глубины.
- В меню нужно вчитываться, я не понял сразу (первые 10 сек) как полетать - кнопку ОТБЫТЬ нужно как-то выделить.
Коменты по коду.
Зачем иметь угол поворота у всего? Сложне вычисления. Ты на такт игры дофига Math.sin и Math.cos вызываешь. Лучше иметь вектор направления, чем угол направления. Именно для "пулек". И код будет короче.
bullets[i].x+=bullets[i].speed*Math.cos(bullets[i].angle*Math.PI/180); bullets[i].y+=bullets[i].speed*Math.sin(bullets[i].angle*Math.PI/180); bullets[i].x_c+=bullets[i].speed*Math.cos(bullets[i].angle); bullets[i].y_c+=bullets[i].speed*Math.sin(bullets[i].angle);
станет
bullets[i].x+=bullets[i].speed*bullets[i].dir.x; bullets[i].y+=bullets[i].speed*bullets[i].dir.y; bullets[i].x_c+=bullets[i].speed*bullets[i].dir.x; bullets[i].y_c+=bullets[i].speed**bullets[i].dir.x; --//это я не понял на какой фиг
Собственно и это станет легче.
if ((player.x-mov_x>384 && camera_c==0) || (player.x-mov_x>518 && camera_c==1)) mov_x+=Math.abs(player.speed*Math.cos(player.angle*Math.PI/180)); if ((player.y-mov_y>284 && camera_c==0) || (player.y-mov_y>368 && camera_c==1)) mov_y+=Math.abs(player.speed*Math.sin(player.angle*Math.PI/180)); if ((player.x-mov_x<384 && camera_c==0) || (player.x-mov_x<250 && camera_c==1)) mov_x-=Math.abs(player.speed*Math.cos(player.angle*Math.PI/180)); if ((player.y-mov_y<284 && camera_c==0) || (player.y-mov_y<200 && camera_c==1)) mov_y-=Math.abs(player.speed*Math.sin(player.angle*Math.PI/180));
Комент по этому куску: УБЕРИ численные границы координат из условий, непонятно как они взялись вообще, , а то авто-резайз окна поломает все и долго искать глюки будешь.
Код состоит только из If, switch и чисел-костант (90% всей математики, без рисования) - плохо..
Пример:
if ((player.x-mov_x>384 && camera_c==0) || (player.x-mov_x>518 && camera_c==1)) mov_x+=Math.abs(player.speed*Math.cos(player.angle*Math.PI/180)); if ((player.y-mov_y>284 && camera_c==0) || (player.y-mov_y>368 && camera_c==1)) mov_y+=Math.abs(player.speed*Math.sin(player.angle*Math.PI/180)); if ((player.x-mov_x<384 && camera_c==0) || (player.x-mov_x<250 && camera_c==1)) mov_x-=Math.abs(player.speed*Math.cos(player.angle*Math.PI/180)); if ((player.y-mov_y<284 && camera_c==0) || (player.y-mov_y<200 && camera_c==1)) mov_y-=Math.abs(player.speed*Math.sin(player.angle*Math.PI/180)); if (mov_x<0) mov_x=0; if (mov_y<0) mov_y=0; if (mov_y>7626) mov_y=7626; if (mov_x>7426) mov_x=7426; if (player.x<0) player.x=0; if (player.y<0) player.y=0; if (player.x>8192) player.x=8192; if (player.y>8192) player.y=8192; if (player.xp>=player.lvl*(player.lvl*30)) player.lvl++; if (player.arm_hp<=0) player.arm_hp=0;
ИЗ-ЗА этого тебе трудно внести небольшие изменения в код, например обрабоку нажатий мышкой.
а draw() вообще индус-код с const-string (прямой текст в методах).
ctxMap.fillText("Прочность: "+ships[ships_shop_p].hp,16,106); ctxMap.fillText("Макс. скорость: "+ships[ships_shop_p].speed*100+" м/с",16,130); ctxMap.fillText("Скорость поворота: "+ships[ships_shop_p].speed_turn*60+" град/с",16,154); ctxMap.fillText("Доступно с уровня: "+ships[ships_shop_p].lvl,16,178); ctxMap.fillText("Цена: "+ships[ships_shop_p].cost,16,202);
Советовал бы сделать класс-меню, а не городить огород, а то что бы пункт добавить, то нужно в 10 местах править.
Ну а так неплохо для начала.
Последний раз редактировалось RegIon, 15.03.2015 в 18:29.
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо RegIon за это полезное сообщение:
|
|
15.03.2015, 18:14
|
#7
|
AnyKey`щик
Регистрация: 14.03.2015
Сообщений: 5
Написано 2 полезных сообщений (для 5 пользователей)
|
Ответ: DarkSpace
Все перечисленные недочёты исправлю (кроме управления - я думаю, такое лучше оставить).
Сообщение от RegIon
bullets[i].x_c+=bullets[i].speed*bullets[i].dir.x; bullets[i].y_c+=bullets[i].speed**bullets[i].dir.x; --//это я не понял на какой фиг
|
Это счётчик расстояния, пройденного пулей. У каждого орудия в игре есть свой параметр дальности стрельбы. Как только пуля пройдёт расстояние, заявленное в ТТХ установленного орудия, она пропадает.
|
(Offline)
|
|
15.03.2015, 18:34
|
#8
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: DarkSpace
Сообщение от DARKSIDER
Все перечисленные недочёты исправлю (кроме управления - я думаю, такое лучше оставить).
Это счётчик расстояния, пройденного пулей. У каждого орудия в игре есть свой параметр дальности стрельбы. Как только пуля пройдёт расстояние, заявленное в ТТХ установленного орудия, она пропадает.
|
//При выстреле сохранять откуда выстрел. bullets[i].shot.x= ... bullets[i].shot.y= ...
//а потом сравнивать if(Math.abs(bullet[i].x - bullets[i].shot.x) > махBulletX ) { }
Думаю так правильнее, но а лучше длину вектора положение_пули-стартовое_положение_пули использовать
|
(Offline)
|
|
15.03.2015, 18:43
|
#9
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: DarkSpace
Я для таких целей разработал минимальную Vec2 библиотеку для работы с 2D векторами: https://github.com/Maksims/tanx/blob...odules/vec2.js
И очень удобно использовать.
Для производительности не забудь recycle'ить векторы, вызывая .delete на вектор. Чтобы следующий .new его мог использовать.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.03.2015, 20:14
|
#10
|
Оператор ЭВМ
Регистрация: 25.08.2013
Адрес: Москва
Сообщений: 45
Написано 13 полезных сообщений (для 28 пользователей)
|
Ответ: DarkSpace
Сообщение от Nex
Мой провайдер говорит что сайт находится в реестре запрещенных сайтов.
|
Что за провайдер? В реестрах пусто, странно это.
|
(Offline)
|
|
16.03.2015, 02:06
|
#11
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: DarkSpace
А на мобилках поиграется?
А не легче следить за длительностью жизни пули, чем за вычислением её пройденным расстоянием?
Есть правда не в том выражении - bullets[i].life=true;
function update_stars()
{
for (var i=0; i<=250; i++)
{
if (stars[i].x-mov_x<0) stars[i].x+=800;
if (stars[i].y-mov_y<0) stars[i].y+=600;
if (stars[i].x-mov_x>800) stars[i].x-=800;
if (stars[i].y-mov_y>600) stars[i].y-=600;
}
}
|
может ну их.. звёзды.. просто картинкой
пока что на Pentium4 ОЗУ=1.5ГБ GForce6000 не тормозит
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 4 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.
|
как раз недавно, в связи с закрытием docs.google посмотрел проекты, так была онлайн мультиплеер космическая 2д-стрелялка
(решил её под свои нужды присвоить, но она без исходных кодов
думал сделаю из неё типа Counter-Strike 2D, типа в моём городе)
у тебя игрушка выглядит прилично, но, пожалуй, присваивать не буду << жёсткая шутка (а игра норм)
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.03.2015, 02:27
|
#12
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: DarkSpace
а врагов где найти?
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 4 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.
|
|
(Offline)
|
|
16.03.2015, 05:40
|
#13
|
Гигант индустрии
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений (для 3,298 пользователей)
|
Ответ: DarkSpace
Сообщение от RblSb
Что за провайдер? В реестрах пусто, странно это.
|
http://inetvl.ru/
|
(Offline)
|
|
16.03.2015, 06:15
|
#14
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: DarkSpace
Сообщение от LLI.T.A.L.K.E.R.
А на мобилках поиграется?
А не легче следить за длительностью жизни пули, чем за вычислением её пройденным расстоянием?
Есть правда не в том выражении - bullets[i].life=true;
может ну их.. звёзды.. просто картинкой
пока что на Pentium4 ОЗУ=1.5ГБ GForce6000 не тормозит
как раз недавно, в связи с закрытием docs.google посмотрел проекты, так была онлайн мультиплеер космическая 2д-стрелялка
(решил её под свои нужды присвоить, но она без исходных кодов
думал сделаю из неё типа Counter-Strike 2D, типа в моём городе)
у тебя игрушка выглядит прилично, но, пожалуй, присваивать не буду << жёсткая шутка (а игра норм)
|
Не поиграться на мобилах - клавы нет и не влезает в экран.
|
(Offline)
|
|
16.03.2015, 08:11
|
#15
|
AnyKey`щик
Регистрация: 14.03.2015
Сообщений: 5
Написано 2 полезных сообщений (для 5 пользователей)
|
Ответ: DarkSpace
Сообщение от LLI.T.A.L.K.E.R.
а врагов где найти?
|
Проще всего - при выполнении миссий. А так, они спавнятся рандомно по всей карте.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:04.
|