UltimaForum

Wsparcie [VX] - Pomoc z ruby.

CrasheR - Wto 26 Kwi, 2011 12:34
Temat postu: Pomoc z ruby.
Jak w Ruby napisać komendę, że kiedy grasz ma 80% zmienia się jakaś grafika?
Chodzi mi o stworzenie Hud'a. Jak masz 100% jest grafika nr1, jak 80% nr2, a jak 50% nr3 itd.

Ayene - Wto 26 Kwi, 2011 13:35

Ale czego 80%? Ukończonej gry? HP? Nie można wyliczyć części bez całości ;-)
CrasheR - Sro 27 Kwi, 2011 16:12

Sorki myślałem, że napisałem czego :P HP oczywiście.
Ayene - Pią 29 Kwi, 2011 10:46

Należy zastosować warunek... możliwości jest kilka
Jeśli HUD oparty jest na 'sprajcie' bezpośrednio w scenie, można zrobić warunek:
Kod:
actor = $game_party.members[0]
if actor.hp == actor.maxhp
  # bitmapa nr 1
  # jakiś_sprite.bitmap = Cache.picture('bitmapa nr 1')
elsif actor.hp > actor.maxhp * 0,8  # gdyż 0,8 to 80%
  # bitmapa nr 2
  # jakiś_sprite.bitmap = Cache.picture('bitmapa nr 2')
elsif actor.hp > actor.maxhp * 0,5  # gdyż 0,5 to 50%
  # bitmapa nr 3
  # jakiś_sprite.bitmap = Cache.picture('bitmapa nr 3')
else # gdy powyższe warunki nie zostaną spełnione
  # bitmapa nr 4
end

Podobnie można zrobić w oknie... najlepiej by było, gdybyś podał fragment skryptu, w którym jest dodany HUD, wtedy dodając warunki ustawilibyśmy inną grafikę :aww:

CrasheR - Pią 29 Kwi, 2011 13:53

Nie wiem jak to dodać ;-( Dodaję skrypcik.
Spoiler:


#==============================================================================
# **Kingdom Hearts HUD
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
# Jako actor.png wstawcie zdjęcie swojego bohatera.

class Hud < Sprite#Window_Base
def initialize
super()#(0-7,-1-23,185-5,108-10)
self.bitmap = bitmap = Bitmap.new(185-5,108-10)#self.contents = Bitmap.new(width - 32, height - 32)
#self.windowskin = RPG::Cache.windowskin("Blank")
self.x = 350#0-7
self.y = 280#-1-23
self.z = 9
refresh
end

def refresh
self.bitmap.clear
self.bitmap.font.shadow = true
self.bitmap.font.size = 14
self.bitmap.font.name = "Segoe UI"
# Tło HP
@actor = $game_party.members[0]
hud3 = Cache.picture("Base HP3")
hud1 = hud3.width
hud2 = hud3.height
hud4 = Rect.new(0,0,hud1,hud2)
self.bitmap.blt(19+2,15,hud3,hud4)
# Tło MP
hudd3 = Cache.picture("Base MP")
hudd1 = hudd3.width
hudd2 = hudd3.height
hudd4 = Rect.new(0,0,hudd1,hudd2)
self.bitmap.blt(1,68,hudd3,hudd4)
#Zdjęcie Postaci
huddd3 = Cache.picture("actor")
huddd1 = huddd3.width
huddd2 = huddd3.height
huddd4 = Rect.new(0,0,huddd1,huddd2)
self.bitmap.blt(110,47,huddd3,huddd4)
#Pasek Hp
hpbar = Cache.picture("hP2")
hpbarwidth = hpbar.width * @actor.hp / @actor.maxhp
hpbarheight = hpbar.height
hpbar_rect = Rect.new(0,0,hpbarwidth,hpbarheight)
self.bitmap.blt(21,15,hpbar,hpbar_rect)
# Valor HP
hprect = Rect.new(4+1+5+4-15, 5+3+1, self.bitmap.width - 8, 32)
hprect2 = Rect.new(4+5+4-15, 5+3, self.bitmap.width - 8, 32)
# Pasek Sp
mpbar = Cache.picture("MP-2")
mpbarwidth = mpbar.width * @actor.mp / @actor.maxmp
mpbarheight = mpbar.height
mpbar_rect = Rect.new(0,0,mpbarwidth,mpbarheight)
self.bitmap.blt(1,68,mpbar,mpbar_rect)
# Valor SP
sprect = Rect.new(0,0, self.bitmap.width - 8, 32)
sprect2 = Rect.new(4+5+4-15, 22+3, self.bitmap.width - 8, 32)
end
end

class Scene_Map
alias hud_main main
def main
@Hud = Hud.new
hud_main
@Hud.dispose
end
alias hud_update update
def update
hud_update
#if $andando == true
#@Hud.refresh if Graphics.frame_count % 80 == 0
#else
@Hud.refresh if Graphics.frame_count % 30 == 0
#end
end
end


Ayene - Pią 29 Kwi, 2011 13:55

I która grafika ma się zmieniać? :->
CrasheR - Pią 29 Kwi, 2011 13:57

Pasek Hp :P
Ayene - Pią 29 Kwi, 2011 13:58

Czyli Ty chcesz zrobić zwykły pasek HP?! To nie mogłeś od razu tak napisać? Przecież są skrypty na gotowe paski HP :-?
CrasheR - Pią 29 Kwi, 2011 13:59

Mam kilka zdjęć paska hp (od 100% do 0%) . I chcę aby kiedy gracz ma 100% pokazała się grafika nr 1 kiedy 90% grafika nr 2 i tak do 0%.

Przepraszam, że wprowadziłem Cię w błąd.

Ayene - Pią 29 Kwi, 2011 14:08

Jeżeli jest to tylko tło, to interesuje nas tylko fragment:
Kod:
hud3 = Cache.picture("Base HP3")


Spróbuj (nie przetestuje, bo nie mam grafik) ten fragment zamienić na:
Kod:
if actor.hp == actor.maxhp
  hud3 = Cache.picture(NAZWA)
elsif actor.hp > actor.maxhp * 0,9  # dla więcej niż 90%
  hud3 = Cache.picture(NAZWA)
elsif actor.hp > actor.maxhp * 0,8  # dla więcej niż 80%
  hud3 = Cache.picture(NAZWA)
elsif actor.hp > actor.maxhp * 0,5  # dla więcej niż 50%
  hud3 = Cache.picture(NAZWA)
else # gdy powyższe warunki nie zostaną spełnione
  hud3 = Cache.picture(NAZWA)
end

i to powinno wystarczyć. Możesz wstawić więcej warunków zgodnie z powyższym wzorem ;-)

CrasheR - Pią 29 Kwi, 2011 14:12

Wyskakuje błąd "Syntax Error"

elsif actor.hp > actor.maxhp * 0,9 # dla więcej niż 90%

Dodaję Grafikę .

Ayene - Pią 29 Kwi, 2011 16:48

No bo zapomniałam, że zamiast przecinka w RM powinna być kropka :-PP Choć to i tak nie ta linijka kodu. Wróć do wersji pierwotnej - bez powyższego warunku.
Po prostu fragment:
Kod:
hpbar = Cache.picture("hP2")
hpbarwidth = hpbar.width * @actor.hp / @actor.maxhp

zamień na:
Kod:
if @actor.hp == @actor.maxhp
  hpbar = Cache.picture("100%")
elsif @actor.hp > @actor.maxhp * 90/100 
  hpbar = Cache.picture("90%")
elsif @actor.hp > @actor.maxhp * 80/100 
  hpbar = Cache.picture("80%")
elsif @actor.hp > @actor.maxhp * 70/100 
  hpbar = Cache.picture("70%")
elsif @actor.hp > @actor.maxhp * 60/100 
  hpbar = Cache.picture("60%")
elsif @actor.hp > @actor.maxhp * 50/100 
  hpbar = Cache.picture("50%")
elsif @actor.hp > @actor.maxhp * 40/100 
  hpbar = Cache.picture("40%")
elsif @actor.hp > @actor.maxhp * 30/100 
  hpbar = Cache.picture("30%") 
elsif @actor.hp > @actor.maxhp * 20/100 
  hpbar = Cache.picture("20%")
elsif @actor.hp > @actor.maxhp * 10/100 
  hpbar = Cache.picture("10%") 
else
  hpbar = Cache.picture("0%")
end

Wtedy wczytają się kolejno Twoje obrazki ;-)


Powered by phpBB modified by Przemo © 2003 phpBB Group