Воскресенье, 17 Ноября 2024, 14:38

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Перезарядка оружия
FadeBakerДата: Воскресенье, 03 Июля 2011, 00:22 | Сообщение # 1
JavaSE Game Developer
Сейчас нет на сайте
Здравствуйте! В создании TDS столкнулся с проблемой в создании перезарядки оружия.
Как должна работать система:
Если обойма пуста, т.е. если в ней меньше 1-го патрона, то запускается таймер по истечению которого к обойме прибавляется n патронов и прибавленное кол-во отнимается из запасных патронов. Вопрос в том, как сделать так, чтобы если патронов в запасе больше, чем в полной обойме, то происходит вышенаписанное, если же патронов меньше, чем в полной обойме, то нужно наполнить обойму оставшимися патронами из запаса.
К примеру в обойме 30 патронв, в запасе - 12. При перезарядке в обойме становится 12 патронв, в запасе - 0, и сразу же по не понятной причине в обойме становится тоже 0.

Вот код:
Code
if global.weapon == 4 //если текущее оружие = 4
{
      _rel = o_main.automat1_ammoclipmax - o_main.automat1_ammoclip; //вычисляем выстрелянные патроны
      if o_main.automat1_ammoclip < 1 //если в обойме 0 патронов
      {reload[4] -= 1;} //то запускаем таймер
      if reload[4] <= 0 //если время истекло
      {
          if o_main.automat1_ammo >= o_main.automat1_ammoclipmax //если кол-во запасных патронов больше макс. кол-ва в обойме
          {
              reload[4] = o_main.automat1_timereload; //устанавливаем таймер
              o_main.automat1_ammoclip += _rel; //прибавляем к обойме выстрелянное кол-во патронов
              o_main.automat1_ammo -= _rel; //столько же отнимаем из запаса
          }
              else //иначе, если кол-во запасных патронов меньше макс. кол-ва в обойме
          {  
              o_main.automat1_ammoclip = o_main.automat1_ammo; //прибавляем к обойме патроны из запаса
              o_main.automat1_ammo -= o_main.automat1_ammoclip; //столько же отнимаем из запаса     
          }
      }
}


Подскажите пожалуйста, как решить сию проблему!
Заранее спасибо.


Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.


Сообщение отредактировал vasyan555 - Воскресенье, 03 Июля 2011, 09:10
kasheyДата: Воскресенье, 03 Июля 2011, 00:59 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
Тебе самому не страшно читать такой код? К чему такие извращения с именами переменных?
Ну ладно буржуйский любишь, но не все тут полиглоты. Комментарии хоть добавь в код, а то все желание помочь отпадает.
FadeBakerДата: Воскресенье, 03 Июля 2011, 09:03 | Сообщение # 3
JavaSE Game Developer
Сейчас нет на сайте
kashey, исходя из названий переменных можно понять, как работает данный код, к тому же я расписал.

Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
DemeronДата: Воскресенье, 03 Июля 2011, 10:49 | Сообщение # 4
User created in C++
Сейчас нет на сайте
Вот смотри, по идеи тут все просто: (псевдокод)
p_count_zapas - патронов в запасе
p_count_oboyma - патронов в обойме
p_count_max - максимальное количество патронов в обойме
p_count_ostatok - останется при перезарядке

при перезарядке:
p_count_ostatok = p_count_max - p_count_oboyma;
p_count_oboyma = 0;
p_count_zapas = p_count_ostatok;
//ждём сколько нужно для перезарядки....
if (p_count_zapas>=p_count_max) //если патронов обойма, или больше
{
p_count_zapas=p_count_zapas - p_count_max;
p_count_oboyma=p_count_max;
}

if (p_count_zapas<p_count_max && p_count_zapas!=0) //если меньше чем залазит в обойму и не равно 0
{
p_count_oboyma=p_count_zapas;
p_count_zapas=0;
}

if (p_count_zapas=0)//патронов 0!
{
p_count_oboyma=0;
}

Если нужны обьяснения - спрашивай.

Добавлено (03.07.2011, 10:44)
---------------------------------------------
Ой ошибочка... Не "p_count_zapas = p_count_ostatok;" а "p_count_zapas = p_count_zapas + p_count_ostatok;"

Добавлено (03.07.2011, 10:49)
---------------------------------------------
Так же, не забудь, что перед "}" надо выходить из функции перезарядки, чтобы перезарядка происходила все 1 раз, а не могла повторяться 2 или 3 раза.

FadeBakerДата: Воскресенье, 03 Июля 2011, 11:13 | Сообщение # 5
JavaSE Game Developer
Сейчас нет на сайте
Сделал всё, как ты расписал, но теперь патронов в обойме всегда 0, а запас постоянно наполняется.
Вот код:

Code
if global.weapon == 4
{
      p_count_ostatok = o_main.automat1_ammoclipmax - o_main.automat1_ammoclip;
      o_main.automat1_ammoclip = 0;
      o_main.automat1_ammo = o_main.automat1_ammo + p_count_ostatok;
      if o_main.automat1_ammoclip < 1
      {reload[4] -= 1;}
      if reload[4] <= 0
      {
          if o_main.automat1_ammo >= o_main.automat1_ammoclipmax
          {      
              o_main.automat1_ammo = o_main.automat1_ammo - o_main.automat1_ammoclip;
              o_main.automat1_ammoclip = o_main.automat1_ammoclipmax;
              reload[4] = o_main.automat1_timereload;
              exit;
          }
          if o_main.automat1_ammo < o_main.automat1_ammoclipmax
          && o_main.automat1_ammo != 0
          {
              o_main.automat1_ammoclip = o_main.automat1_ammo;
              o_main.automat1_ammo = 0;
              exit;
          }
          if o_main.automat1_ammo == 0
          {
              o_main.automat1_ammoclip = 0;
          }
      }
}

Что не так? Исправь пожалуйста!


Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.


Сообщение отредактировал vasyan555 - Воскресенье, 03 Июля 2011, 11:23
DemeronДата: Воскресенье, 03 Июля 2011, 11:25 | Сообщение # 6
User created in C++
Сейчас нет на сайте
Ты все переменные инициализировал? Сейчас проверю свой псевдо код....
FadeBakerДата: Воскресенье, 03 Июля 2011, 11:31 | Сообщение # 7
JavaSE Game Developer
Сейчас нет на сайте
А, всё, не надо, я проблему решил smile
Код написал с нуля.
Вот:
Code
if global.weapon == 4
{
     if o_main.automat1_ammoclip <= 0
     {
         reload[4] -= 1;
     }
     if reload[4] <= 0
     {
         if o_main.automat1_ammo >= o_main.automat1_ammoclipmax
         {
             o_main.automat1_ammo -= o_main.automat1_ammoclipmax;
             o_main.automat1_ammoclip = o_main.automat1_ammoclipmax;
             reload[4] = o_main.automat1_timereload;
             exit;
         }
         if o_main.automat1_ammo < o_main.automat1_ammoclipmax
         {
             o_main.automat1_ammoclip = o_main.automat1_ammo;
             o_main.automat1_ammo = 0;
             reload[4] = o_main.automat1_timereload;
             exit;
         }
     }
}

Всё работает! Извини, за беспокойство и лови плюс smile


Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
SellimiusДата: Воскресенье, 03 Июля 2011, 11:39 | Сообщение # 8
участник
Сейчас нет на сайте
вот моя перезарядка:
Code
reload = 0;
if (keyboard_check(ord('R')) and reload == 0 and global.patrons > 0 and global.patrons_gun < 30)
{
sound_play(reload_sound);
speed = 0;
patrons_plus = 30 - global.patrons_gun;
while (patrons_plus > global.patrons)
{
patrons_plus -=1;
}
global.patrons -= patrons_plus;
global.patrons_gun += patrons_plus;
reload = 1;
image_angle= point_direction(x,y,mouse_x,mouse_y)
sprite_index = pers_reload;
}
if (!keyboard_check(ord('R')))
{
sound_stop(reload_sound);
}


Сообщение отредактировал Sellimius - Воскресенье, 03 Июля 2011, 11:39
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг