forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   JavaScript / HTML (http://forum.boolean.name/forumdisplay.php?f=136)
-   -   DarkSpace (http://forum.boolean.name/showthread.php?t=19737)

DARKSIDER 14.03.2015 22:51

DarkSpace
 
Игра представляет собой браузерный космический шутер.
Разработка ведётся с использованием JavaScript и HTML5.

Ссылка на игру

Актуальная версия: 0.8 Alpha

Что есть на данный момент:
- Игрок, его перемещение и стрельба
- Магазин с возможностью покупки брони, орудий и кораблей
- Модуль миссий
- Враги (как же без них?)

Changelog:
V.0.6:
- Изменены хар-ки товаров в магазине, а также награда за уничтожение врагов и выполнение миссий
- Добавлен новый корабль
- Добавлено меню паузы (внутри есть миникарта)

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

V.0.8:
- Очередные изменения в балансе
- Добавлено отключение центрирования камеры в игре (в настройках)
- Добавлен ускоритель (Shift - использование)
- Добавлен новый тип миссий - зачистка (доступен с 7-ого уровня)


Управление:
Стрелки - перемещение корабля и переключение между пунктами меню
Пробел - стрельба/выбор
E - стыковка со станцией
Shift - использование ускорителя
Escape - меню паузы


Скриншоты:







При наличии идей/замечаний обязательно пишите их, всё будет учтено :)

moka 14.03.2015 23:16

Ответ: DarkSpace
 
Весьма прикольно, не мало работы сделано.
Хочеться чтобы было нормальное управление мышкой тоже, ну там по меню клацать.

Есть ли конкретный roadmap, или разработка ведеться органично?
Также было бы хорошо если canvas скейлилась под размер окна.

DARKSIDER 14.03.2015 23:35

Ответ: DarkSpace
 
Цитата:

Сообщение от moka (Сообщение 294139)
Хочеться чтобы было нормальное управление мышкой тоже, ну там по меню клацать.

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

Цитата:

Сообщение от moka (Сообщение 294139)
Есть ли конкретный roadmap, или разработка ведеться органично?

Да, есть. На пару сборок вперёд, но стараюсь корректировать под запросы юзеров.

Цитата:

Сообщение от moka (Сообщение 294139)
Также было бы хорошо если canvas скейлилась под размер окна.

Чуть позже попытаюсь сделать.

Nex 15.03.2015 08:40

Ответ: DarkSpace
 
Мой провайдер говорит что сайт находится в реестре запрещенных сайтов.
Выложи хотя бы скрины.

DARKSIDER 15.03.2015 12:21

Ответ: DarkSpace
 
Цитата:

Сообщение от Nex (Сообщение 294151)
Выложи хотя бы скрины.

Выложил.

RegIon 15.03.2015 17:20

Ответ: DarkSpace
 
  • Мне больше нравиться управление top-down шутерами 'стрелки = вектор направления', все по-началу пытался улететь вверх зажав UP.
  • С мышкой не так и много возни.
  • Умудрился потерять корабль-базу, а она сама похожа на часть фона.
  • Никакого ориентира нету, непонятно на сколько улетел вперед или назад, я бы советовал смещать звезды-фон относительно объектов переднего плана - имитации глубины.
  • В меню нужно вчитываться, я не понял сразу (первые 10 сек) как полетать - кнопку ОТБЫТЬ нужно как-то выделить.
Коменты по коду.

Зачем иметь угол поворота у всего? Сложне вычисления. Ты на такт игры дофига Math.sin и Math.cos вызываешь. Лучше иметь вектор направления, чем угол направления. Именно для "пулек". И код будет короче.
PHP код:

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); 

станет
PHP код:

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; --//это я не понял на какой фиг 

Собственно и это станет легче.
PHP код:

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% всей математики, без рисования) - плохо..
Пример:
PHP код:

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<0mov_x=0;
    if (
mov_y<0mov_y=0;
    if (
mov_y>7626mov_y=7626;
    if (
mov_x>7426mov_x=7426;
    if (
player.x<0player.x=0;
    if (
player.y<0player.y=0;
    if (
player.x>8192player.x=8192;
    if (
player.y>8192player.y=8192;
    if (
player.xp>=player.lvl*(player.lvl*30)) player.lvl++;
    if (
player.arm_hp<=0player.arm_hp=0

ИЗ-ЗА этого тебе трудно внести небольшие изменения в код, например обрабоку нажатий мышкой.
а draw() вообще индус-код с const-string (прямой текст в методах).
PHP код:

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 местах править.

Ну а так неплохо для начала.:)

DARKSIDER 15.03.2015 18:14

Ответ: DarkSpace
 
Все перечисленные недочёты исправлю (кроме управления - я думаю, такое лучше оставить).
Цитата:

Сообщение от RegIon (Сообщение 294160)
PHP код:

bullets[i].x_c+=bullets[i].speed*bullets[i].dir.x;
bullets[i].y_c+=bullets[i].speed**bullets[i].dir.x; --//это я не понял на какой фиг 


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

RegIon 15.03.2015 18:34

Ответ: DarkSpace
 
Цитата:

Сообщение от DARKSIDER (Сообщение 294161)
Все перечисленные недочёты исправлю (кроме управления - я думаю, такое лучше оставить).


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

PHP код:

//При выстреле сохранять откуда выстрел.
bullets[i].shot.x= ...
bullets[i].shot.y= ...

//а потом сравнивать
if(Math.abs(bullet[i].bullets[i].shot.x) > махBulletX )
  {
  } 

Думаю так правильнее, но а лучше длину вектора положение_пули-стартовое_положение_пули использовать

moka 15.03.2015 18:43

Ответ: DarkSpace
 
Я для таких целей разработал минимальную Vec2 библиотеку для работы с 2D векторами: https://github.com/Maksims/tanx/blob...odules/vec2.js
И очень удобно использовать.
Для производительности не забудь recycle'ить векторы, вызывая .delete на вектор. Чтобы следующий .new его мог использовать.

RblSb 15.03.2015 20:14

Ответ: DarkSpace
 
Цитата:

Сообщение от Nex (Сообщение 294151)
Мой провайдер говорит что сайт находится в реестре запрещенных сайтов.

Что за провайдер? В реестрах пусто, странно это.

LLI.T.A.L.K.E.R. 16.03.2015 02:06

Ответ: 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, типа в моём городе)

у тебя игрушка выглядит прилично, но, пожалуй, присваивать не буду :ok: << жёсткая шутка (а игра норм)

LLI.T.A.L.K.E.R. 16.03.2015 02:27

Ответ: DarkSpace
 
а врагов где найти?
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 4 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.

Nex 16.03.2015 05:40

Ответ: DarkSpace
 
Цитата:

Сообщение от RblSb (Сообщение 294166)
Что за провайдер? В реестрах пусто, странно это.

http://inetvl.ru/

RegIon 16.03.2015 06:15

Ответ: DarkSpace
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 294178)
А на мобилках поиграется?

А не легче следить за длительностью жизни пули, чем за вычислением её пройденным расстоянием?

Есть правда не в том выражении - bullets[i].life=true;



может ну их.. звёзды.. просто картинкой

пока что на Pentium4 ОЗУ=1.5ГБ GForce6000 не тормозит


*** скрытый текст ***


как раз недавно, в связи с закрытием docs.google посмотрел проекты, так была онлайн мультиплеер космическая 2д-стрелялка
(решил её под свои нужды присвоить, но она без исходных кодов
думал сделаю из неё типа Counter-Strike 2D, типа в моём городе)

у тебя игрушка выглядит прилично, но, пожалуй, присваивать не буду :ok: << жёсткая шутка (а игра норм)

Не поиграться на мобилах - клавы нет и не влезает в экран.

DARKSIDER 16.03.2015 08:11

Ответ: DarkSpace
 
Цитата:

Сообщение от LLI.T.A.L.K.E.R. (Сообщение 294179)
а врагов где найти?

Проще всего - при выполнении миссий. А так, они спавнятся рандомно по всей карте.


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot