Ogłoszenie |
Administracja Forum
|
Zamknięty przez: Nhadala Pią 20 Lip, 2012 06:41 |
Problem z paskiem EXP. XAS ABS |
Autor |
Wiadomość |
emag789
Dołączył: 14 Lip 2012 Posty: 5
|
Wysłany: Wto 17 Lip, 2012 12:33
|
|
Problem z paskiem EXP. XAS ABS
|
Witajcie. Mam problem z wyświetlaniem paska exp. Używam XAS ABS i torchę przerobiłem skrypt. Jestem zielony w skryptowaniu. Oto mój problem:
Pasek na pierwszym levelu napełnia się prawidłowo. Wartość exp. początkowa wynosi 0 ,a na następny level potrzebuje 50 exp.
Gdy zdobędziemy level, to nasza wartość expa wynosi 50 a do następnego poziomu brakuje 100 pkt exp.
I tu jest problem, bo pasek już jest na połowie, a chciałbym, żeby leciał od początku, czyli:
50 - to początek paska
100 - koniec paska
Tak samo z kolejnymi levelami.
Dałby radę ktoś coś zaradzić, lub po swojemu by przerobił?
Z góry dziękuje ;)
Kod: |
def create_exp
@low_exp = LOWHP
@exp = @actor.exp
@exp_flow = 0
@exp_damage_flow = 0
@exp_old = @actor.exp
@exp_ref = @exp_old
@exp_refresh = false
#Number EXP ----
@exp_number_image = Cache.system("Hud_Exp_Number")
@exp_number_sprite = Sprite.new
@exp_number_sprite.bitmap = Bitmap.new(@exp_number_image.width,@exp_number_image.height)
@exp_number_sprite.z = 153
@exp_number_sprite.x = HUD[0] + EXP_NUMBER[0]
@exp_number_sprite.y = HUD[1] + EXP_NUMBER[1]
@im_cw = @exp_number_image.width / 10
@im_ch = @exp_number_image.height / 2
#Meter EXP -----
@exp_image = Cache.system("Hud_Exp_Meter")
@exp_range = @exp_image.width / 1
@exp_height = @exp_image.height / 1
@exp_width = @exp_range * @actor.exp / @actor.next_exp
@exp_sprite = Sprite.new
@exp_sprite.bitmap = Bitmap.new(@exp_image.width,@exp_image.height)
@exp_sprite.z = 152
@exp_sprite.x = HUD[0] + EXP_METER[0]
@exp_sprite.y = HUD[1] + EXP_METER[1]
exp_flow_update
exp_number_refresh
end
|
Kod: |
#--------------------------------------------------------------------------
# ● exp_number_update
#--------------------------------------------------------------------------
def exp_number_update
@exp_refresh = true
if @exp_old < @actor.exp
@exp_ref = 5 * (@actor.exp - @exp_old) / 100
@exp_ref = 1 if @exp_ref < 1
@exp += @exp_ref
if $game_temp.hud_face_type != 1
$game_temp.hud_face_type = 1
$game_temp.hud_face_refresh = true
@face_sprite.x = HUD[0] + FACE[0]
end
if @exp >= @actor.exp
@exp_old = @actor.exp
@exp = @actor.exp
@exp_ref = 0
if @actor.exp < @actor.next_exp * @low_exp / 100 and
$game_temp.hud_face_type != 4
$game_temp.hud_face_type = 4
$game_temp.hud_face_time = 30
elsif $game_temp.hud_face_type != 0
$game_temp.hud_face_type = 0
$game_temp.hud_face_time = 30
end
end
elsif @exp_old > @actor.exp
@exp_refresh = true
@exp_ref = 5 * (@exp_old - @actor.exp) / 100
@exp_ref = 1 if @exp_ref < 1
@exp -= @exp_ref
if $game_temp.hud_face_type != 2
$game_temp.hud_face_type = 2
$game_temp.hud_face_refresh = true
end
if @exp <= @actor.exp
@exp_old = @actor.exp
@exp = @actor.exp
@exp_ref = 0
if $game_temp.hud_face_type != 0
$game_temp.hud_face_time = 30
end
end
end
end
end
#--------------------------------------------------------------------------
# ● exp_number_refresh
#--------------------------------------------------------------------------
def exp_number_refresh
@exp_number_sprite.bitmap.clear
@exp_number_text = @exp.abs.to_s.split(//)
lowexp2 = @actor.next_exp * @low_exp / 100
if @actor.exp < lowexp2
@health2 = @im_ch
else
@health2 = 0
end
@exp_health = @health2
for r in 0..@exp_number_text.size - 1
@exp_number_abs = @exp_number_text[r].to_i
@exp_src_rect = Rect.new(@im_cw * @exp_number_abs, @exp_health, @im_cw, @im_ch)
@exp_number_sprite.bitmap.blt(@im_cw * r, 0, @exp_number_image, @exp_src_rect)
end
@exp_refresh = false if @exp == @actor.exp
end
#--------------------------------------------------------------------------
# ● Exp Flow Update
#--------------------------------------------------------------------------
def exp_flow_update
@exp_sprite.bitmap.clear
@exp_width = @exp_range * @actor.exp / @actor.next_exp
#EXP Real------------------------------------
@exp_src_rect = Rect.new(@exp_flow, 0,@exp_width, @exp_height)
@exp_sprite.bitmap.blt(0,0, @exp_image, @exp_src_rect)
@exp_flow += METER_FLOW_SPEED
if @exp_flow >= @exp_image.width - @exp_range
@exp_flow = 0
end
end
|
|
|
|
|
pw1602
Preferowany:
Pomógł: 11 razy Dołączył: 09 Paź 2011 Posty: 119
|
Wysłany: Wto 17 Lip, 2012 13:35
|
|
|
To może zamiast dawać 100 expa na następny lvl daj 150? Może akurat pasek będzie od zera leciał? Jeśli to nie pomoże to czekaj na odpowiedź jakiegoś skryptera, bo ja się na tym nie znam. |
________________________
|
|
|
|
emag789
Dołączył: 14 Lip 2012 Posty: 5
|
Wysłany: Wto 17 Lip, 2012 13:37
|
|
|
Wartość 100 podałem powiedzmy, że przykładową. Jakby było 150 to pasek zaczynałby się od 1/3. |
|
|
|
pw1602
Preferowany:
Pomógł: 11 razy Dołączył: 09 Paź 2011 Posty: 119
|
Wysłany: Wto 17 Lip, 2012 22:59
|
|
|
Musiałbyś pokombinować trochę. Zrób powiedzmy tak:
Potwory dodają nie dużo pkt. doświadczenia.
Ilość expa na 2 lvl będzie wynosić 25 pkt. Na następny o 4 razy więcej, lecz potwory powinny być do tego dostosowane w dodawaniu expa. Wtedy pasek powinien iść od zera. Jeśli ci to nie pasuje to na razie nie mam pomysłu na rozwiązanie tego problemu. Może jakiś skrypter się wypowie?!
@Edit
Trochę tam popatrzyłem po tym skrypcie i czy:
Kod: | elsif @exp_old > @actor.exp | <- nie powinno tutaj być oddzielnie els i if? Jeśli nie to sorry za błąd.
Spróbuj może zamiast:
Kod: | @exp_ref = 1 if @exp_ref < 1 |
daj
Kod: | @exp_ref = 1 if @exp_ref < 0 |
Nie wiem czy to coś zmieni, ale w kolejnej części skryptu jest jeszcze raz to samo, więc też możesz zmienić. Może jakieś liczby powodują taki błąd?
@Edit 2
Kod: | @exp_refresh = false if @exp == @actor.exp |
A czasem nie ma być tutaj true? |
________________________
|
|
|
|
emag789
Dołączył: 14 Lip 2012 Posty: 5
|
Wysłany: Wto 17 Lip, 2012 23:11
|
|
|
Ogólnie to już kombinuję sporo czasu. Jak wspomniałem jestem zielony w tym języku. Najwięcej chyba zależy od tego równia:
@exp_width = @exp_range * @actor.exp / @actor.next_exp
Zamiast tego @actor.exp powinna być chyba różnica @actor.next_exp - @actor.exp. Wtedy długość paska wyznaczało by to ile brakuję do kolejnego levela. Jednak jak to u względnie to nadal jakieś głupoty wychodzą. No nic, czekam na odpowiedź doświadczonego skryptera. pw1602 - dzięki za zainteresowanie ;)
@Edit. Trochę chyba w błąd wprowadziłem, mogłem mniejszą ilość kodu skopiować. Te zmienne, o których wspominasz dotyczą się expa, ale w postaci liczbowej ;)
@Edit2. Z tym kombinowaniem expa to nie głupi pomysł, ale to już jutro sprawdzę, dzięki :)
@Edit3. Nie mogę ustawić takiej różnicy expa jak powiedziałeś, że do następnego potrzeba aż 4 razy więcej. Pasek raczej nie szedłby od początku, bo by było 25/100, czyli zajmowałby już 1/4. |
|
|
|
emag789
Dołączył: 14 Lip 2012 Posty: 5
|
Wysłany: Czw 19 Lip, 2012 15:30
|
|
|
Problem rozwiązany
Te 2 równania:
@exp_width = @exp_range * @actor.exp / @actor.next_exp
Powinny wyglądać tak:
@exp_width = @exp_range * (@actor.exp-@actor.current_level_exp)/(@actor.next_level_exp-@actor.current_level_exp)
Temat do zamknięcia. |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
|