Тема: DarkSpace
Показать сообщение отдельно
Старый 15.03.2015, 17:20   #6
RegIon
Элита
 
Аватар для RegIon
 
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,157
Написано 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<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 (прямой текст в методах).
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 местах править.

Ну а так неплохо для начала.
__________________
Сайт: http://iexpo.ml

Последний раз редактировалось RegIon, 15.03.2015 в 18:29.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо RegIon за это полезное сообщение:
DARKSIDER (15.03.2015), moka (15.03.2015), St_AnGer (15.03.2015)