Перезарядка оружия
|
|
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
Сейчас нет на сайте
| А, всё, не надо, я проблему решил Код написал с нуля. Вот: 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; } } } Всё работает! Извини, за беспокойство и лови плюс
Уроки по 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 |
|
| |