| 
	
		
		
			| Проблемы с healthbar'ом |  |  |  | 
| realyhead | Дата: Воскресенье, 20 Мая 2012, 22:24 | Сообщение # 1 |  |   участник Сейчас нет на сайте | Нарисовал healthbar и разбил его на 5 частей: 
  - когда жизни равны 0 
 
  - когда жизни равны 25 
 
  - когда жизни равны 50 
 
  - жизни равны 75 
 
  - жизни равны 100 
 и что бы проверить работоспособность healtbar'a сделал, что при нажатии левой клавиши мыши от переменной healt отнималось 5, и отталкиваясь от этот скрипт будет менять спрайты, вот код рисования:
 
 Code if healt>=100{ draw_sprite(hp100,3,x,y)
 }
 
 if healt=75{
 draw_sprite(hp75,3,x,y)
 }
 
 if healt=50{
 draw_sprite(hp50,3,x,y)
 }
 
 if healt=25{
 draw_sprite(hp25,3,x,y)
 }
 
 if healt<=0{
 draw_sprite(hp0,3,x,y)
 show_message('Зе енд')
 }
 
 запустил- нажал левую клавишу мыши и спрайт сразу исчез, но после нескольких нажатий появился но уже спрайт 75hp потом 50hp и тд. В чём проблема?
 
 поиграть в мою онлайн игру
 
 
 Сообщение отредактировал realyhead - Воскресенье, 20 Мая 2012, 22:24 |  |  |  |  |  | 
| Andrey_M | Дата: Воскресенье, 20 Мая 2012, 22:34 | Сообщение # 2 |  |   старожил Сейчас нет на сайте | "Здоровье" переводится health. У тебя нажатия отнимают здоровье, по идее?
 
 ЪЪЪЪ! Лучшая благодарность - плюс в репутацию :-)
 |  |  |  |  |  | 
| realyhead | Дата: Воскресенье, 20 Мая 2012, 22:35 | Сообщение # 3 |  |   участник Сейчас нет на сайте | дело не в названии переменной а в проблеме со спрайтами. Каждое нажатие отнимает по 5 от этой переменной 
 поиграть в мою онлайн игру
 |  |  |  |  |  | 
| FadeBaker | Дата: Воскресенье, 20 Мая 2012, 22:37 | Сообщение # 4 |  | JavaSE Game Developer Сейчас нет на сайте | realyhead, ты в коде нигде не написал, что если, например, здоровье == 95, то рисовать хеалтбар. При первом уменьшении здоровья оно равно 95. Подумай. 
 Уроки по 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.
 |  |  |  |  |  | 
| realyhead | Дата: Воскресенье, 20 Мая 2012, 22:39 | Сообщение # 5 |  |   участник Сейчас нет на сайте | Fade ошибку свою понял, я прописал рисовать спрайт если healt равен 100,75,50,25,0 а для остальных значений не прописал, но как "урезать" код что бы не писать каждые -5 значений? может через for? 
 поиграть в мою онлайн игру
 |  |  |  |  |  | 
| Xageu | Дата: Воскресенье, 20 Мая 2012, 22:53 | Сообщение # 6 |  |   Хадей - Друг Детей Сейчас нет на сайте | switch healt {
 case 0: draw_sprite
 case 25: draw_sprite
 case 50: draw_sprite
 case 75: draw_sprite
 case 100: draw_sprite
 }
 
 
   |  |  |  |  |  | 
| realyhead | Дата: Понедельник, 21 Мая 2012, 08:13 | Сообщение # 7 |  |   участник Сейчас нет на сайте | ^ тоже самое 
 поиграть в мою онлайн игру
 |  |  |  |  |  | 
| Xageu | Дата: Понедельник, 21 Мая 2012, 08:32 | Сообщение # 8 |  |   Хадей - Друг Детей Сейчас нет на сайте | У тебя стандартный хелс бар, легче сделать через draw. Если же нет, рисуй каждый кадр. Если же тебе нужны только эти бары, добавь граничные условия: меньше или равен сотне, но больше семидесяти пяти и т.д. 
 
   |  |  |  |  |  | 
| LunarPixel | Дата: Понедельник, 21 Мая 2012, 08:35 | Сообщение # 9 |  |   старожил Сейчас нет на сайте | Code switch healt {
 case 0: sprite_index=sprite1; break;
 case 25: sprite_index=sprite2; break;
 case 50: sprite_index=sprite3; break;
 case 75: sprite_index=sprite4; break;
 case 100: sprite_index=sprite5; break;
 }
 
 draw_sprite(sprite_index,0,x,y)
 Можно sprite_index заменить на переменную, если не нужно менять спрайт объекта.
 
 Ну а вообще, проще загнать все эти спрайты в 1, покадрово, и менять номер кадра.
   
 
   
 
 Сообщение отредактировал LunarPixel - Понедельник, 21 Мая 2012, 08:39 |  |  |  |  |  | 
| Qvant | Дата: Понедельник, 21 Мая 2012, 09:10 | Сообщение # 10 |  |   почти ветеран Сейчас нет на сайте | Если максимальное здоровье 100 и нужно менять хелсбар через 20 единиц то используй целоцисленое деление div 
 
 Code switch (healt div 20) {
 case 0: draw_sprite ...
 break;
 
 case 1: draw_sprite ...
 break;
 
 case 2: draw_sprite ...
 break;
 
 case 3: draw_sprite ...
 break;
 
 case 4: draw_sprite ...
 break;
 }
 если хелс бар один спрайт , состоящий из кадров то ещё проще
 
 Code image_index=healt div 25;
 
 Сообщение отредактировал Qvant - Понедельник, 21 Мая 2012, 09:35 |  |  |  |  |  | 
| LunarPixel | Дата: Понедельник, 21 Мая 2012, 09:23 | Сообщение # 11 |  |   старожил Сейчас нет на сайте | Qvant, только вот по первому посту непонятно, в какой момент должны меняться спрайты. У меня они меняются, как написано в первом посте, только когда = конкретному значению. У тебя же начнут меняться в промежуточных значениях, что более логично ) 
 Ну и конечно, однозначно, проще сделать одним спрайтом.
 
 
   
 
 Сообщение отредактировал LunarPixel - Понедельник, 21 Мая 2012, 09:34 |  |  |  |  |  | 
| Qvant | Дата: Понедельник, 21 Мая 2012, 09:34 | Сообщение # 12 |  |   почти ветеран Сейчас нет на сайте | LunarPixel, да , по 1 посту не понятно , но по этому посту : 
 Quote Fade ошибку свою понял, я прописал рисовать спрайт если healt равен 100,75,50,25,0 а для остальных значений не прописал, но как "урезать" код что бы не писать каждые -5 значений? может через for?я думаю что автору нужно , чтоб его полоска здоровья менялась "скачками" а не плавно (если нужно чтоб Hp менялась не через 20 единиц , а через 5 - тогда делим div на 5 )
 
 PS. Если надо , чтоб Hp рисовалось плавно , то конечно надо по другому.
 
 
 Сообщение отредактировал Qvant - Понедельник, 21 Мая 2012, 09:36 |  |  |  |  |  | 
| LunarPixel | Дата: Понедельник, 21 Мая 2012, 09:45 | Сообщение # 13 |  |   старожил Сейчас нет на сайте | Qvant, да нет, я не о том. У тебя все правильно, должно меняться скачками. Просто у тебя, если жизней станет 99, то спрайт уже изменится. А у меня он изменится только если жизней станет 75. Просто я посмотрел, что автор везде использует только равенство, потому сделал так.
 
 Если брать вариант Qvant, то можно ещё сделать вот так:
 
 
 Code switch round(healt/25) {
 case 0: draw_sprite(sprite0,0,x,y); break;
 case 1: draw_sprite(sprite1,0,x,y); break;
 case 2: draw_sprite(sprite2,0,x,y); break;
 case 3: draw_sprite(sprite3,0,x,y); break;
 case 4: draw_sprite(sprite4,0,x,y); break;
 }
 Чтобы жизни менялись более гармонично. А то получается, что при значении 99, спрайт сразу заменится на тот, который обозначает 75 жизней.
 
 
   
 
 Сообщение отредактировал LunarPixel - Понедельник, 21 Мая 2012, 09:53 |  |  |  |  |  | 
| realyhead | Дата: Понедельник, 21 Мая 2012, 10:02 | Сообщение # 14 |  |   участник Сейчас нет на сайте | LunarPixel, спасибо как раз то, что я и хотел, можешь поподробнее описать строку 
 Code switch round(healt/25) 
 поиграть в мою онлайн игру
 |  |  |  |  |  | 
| LunarPixel | Дата: Понедельник, 21 Мая 2012, 10:06 | Сообщение # 15 |  |   старожил Сейчас нет на сайте | Делим переменную на 25 и округляем полученное значение до наибольшего целого (round). Ну а дальше смотрим, что получилось после округления: 0,1,2,3 или 4
 
 
   
 
 Сообщение отредактировал LunarPixel - Понедельник, 21 Мая 2012, 10:06 |  |  |  |  |  
 |