Wprowadzenie do RGSS/RGSS2 - Przydatne zmienne globalne/komendy "draw"
pw115 - Pią 26 Lut, 2010 17:06 Temat postu: Przydatne zmienne globalne/komendy "draw"W poradniku "okno w Ruby" nauczyłem was jak tworzyć okna i wypełniać je tekstem
dzisiaj pokaże wam jak w oknie wyświetlić zmienną, przełącznik, złoto drużyny itd.
W linijce
Kod:
self.contents.draw_text(0, 0, 288, 32, "Losowy tekst służący do zapełnienia okna", 1)
zamiast "losowy tekst służ.... możemy napisać:
Kod:
$game_variables[N] - pokazuje wartość zmiennej nr N.
$game_switches[N] - pokazuje wartość przełącznika nr N (True lub False)
$game_system.save_count - pokazuje ilość zapisów gry
$data_system.words.hp - pokazuje słowo 'HP' zapisane w bazie danych
$data_system.words.sp - pokazuje słowo 'SP' zapisane w bazie danych
$data_system.words.atk - pokazuje słowo "Atk" zapisane w bazie danych
$data_system.words.pdef - pokazuje słowo "Pdef" zapisane w bazie danych
$data_system.words.mdef - pokazuje słowo "Mdef" zapisane w bazie danych
$data_system.words.str - pokazuje słowo "Str" zapisane w bazie danych
$data_system.words.dex - pokazuje słowo "Dex" zapisane w bazie danych
$data_system.words.agi - pokazuje słowo "Agi" zapisane w bazie danych
$data_system.words.int - pokazuje słowo "Int" zapisane w bazie danych
$data_actors[N].final_level - ostateczny poziom postaci o numerze N
$data_actors[N].name - imię bohatera o numerze N
$data_actors[N].level - poziom postaci o numerze N
$data_actors[N].class_name - nazwa klasy bohatera o numerze N
$data_actors[N].exp_s - doświadczenie postaci o numerze N
$data_actors[N].next_exp_s - doświadczenie potrzebne do następnego poziomu dla postaci o numerze N
$data_actors[N].hp - pokazuje ilość HP postaci o numerze N
$data_actors[N].maxhp - pokazuje MaxHP postaci o numerze N
$data_actors[N].sp - pokazuje ilość HP postaci o numerze N
$data_actors[N].maxsp - pokazuje MaxSP postaci o numerze N
$data_actors[N].skills.size - ilość umiejętności jakie posiada postać o numerze N
$data_actors[N].item.size - ilość przedmiotów jakie posiada postać o numerze N
$data_actors[N].str - ilość str postaci o numerze N
$data_actors[N].dex - ilość dex postaci o numerze N
$data_actors[N].agi - ilość agi postaci o numerze N
$data_actors[N].int - ilość int postaci o numerze N
$data_actors[N].atk - ilość atk postaci o numerze N
$data_actors[N].pdef - ilość pdef postaci o numerze N
$data_actors[N].mdef - ilość mdef postaci o numerze N
$data_actors[N].eva - ilość eva postaci o numerze N
a zamiast
self.contents.draw_text(0, 0, 288, 32, "Losowy tekst służący do zapełnienia okna", 1)
możemy napisać:
Kod:
draw_actor_graphic - pokazuje character jaki posiada postać
draw_actor_name - pokazuje imię bohatera
draw_actor_class - pokazuję klasę postaci
draw_actor_level - pokazuje level bohatera
draw_actor_state - pokazuje postaci
draw_actor_exp - pokazuje doświadczenie bohatera
draw_actor_hp - pokazuje hit points postaci
draw_actor_sp - pokazuje skill points bohatera
draw_actor_parameter (actor, x, y, type) - pokazuje parametry postaci (dla type: 0 - atak, 1 - obrona fizyczna, 2 - obrona magiczna, 3 - siła, 4 - zręczność, 5 - zwinność, 6 - inteligencja.
Dużo tego nie ? ale pomyślcie jakie to stwarza możliwości !!Asantos - Pią 26 Lut, 2010 18:40 super nie wiedziałem że się znasz na RUBY - kiedy będę miał wolny czas to poszperam trochę i pouczę się tego wszystkiego :)Unnamed - Pon 01 Mar, 2010 17:44 Widze ze powieliles temat... na co dwa tematy ze zmiennymi?pw115 - Pon 01 Mar, 2010 17:57 Tak ale Ayene napisała zastosowanie zmiennych a ja wypisałem same zmienneCzeliosss - Wto 06 Kwi, 2010 16:26 No fajne. Można tak zrobić jakiegoś Huda.
Pzdr.SaE - Wto 27 Kwi, 2010 09:38 Jest pewna nieścisłość bo
Cytat:
$data_actors[N].hp - pokazuje ilość HP postaci o numerze N
N to nie numer postaci, tylko jej ID w bazie danych.
A tak na prawdę to w grze rzadko przydaje się tego typu zmienna, gdyż nie można przewidzieć jaką postać będzie miał w drużynie gracz dlatego używa się zmiennej przystosowanej do indeksu postaci:
$game_party.actors[N].hp - gdzie N to indeks postaci (od 0)
a w VX'e
$game_party.members[N].hp - gdzie N to indeks postaci (od 0)ziomalek - Nie 02 Maj, 2010 08:12 a dałby ktoś przykład skryptu jak wyświetlić lvl boha i aby nietrzeba było wstawiac nic do scene_map Ayene - Nie 02 Maj, 2010 08:26 Jeżeli korzystasz z VX'a możesz wejść w edytor skryptów, przejść do klasy 'Window_Message', znaleźć:
Dzięki temu wpisując w treści wiadomości \L[nr] wyświetlisz poziom postaci o id = nr
(dlatego nr zamień na jakieś id) ziomalek - Nie 02 Maj, 2010 08:36 Dzięki Ayne, jesteś BOSKA
A jak zrobić to bez dodawania tych koment do Windows_Message, Scene_Map...???
[ Dodano: Nie 09 Maj, 2010 12:56 ]
to powie ktoś???erienus - Pią 21 Maj, 2010 11:10 przy próbowaniu sobie coś zryłem chyba bo:
class Window_okno < Window_Base
def initialize(x = 160, y = 120, width = 320, height = 240)
super(x, y, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Tahoma"
self.contents.font.size = 18
self.back_opacity = 160
refresh
end
def refresh
self.contents.clear
self.contents.draw_actor_name
end
end
taki mam kod, chciałem by wyświetlało imię bohatera, więc dodałem
self.contents.draw_actor_name
ale wywala mi grę ;/Ayene - Pią 21 Maj, 2010 11:25 Bo co to jest w ogóle za komenda 'self.contents.draw_actor_name'. I kogo ma podać imię?
Po pierwsze 'draw_actor_name' to zadeklarowana już definicja, która sama w sobie powoduje wyświetlenie imienia bohatera, jednak - co jest ważne - należy wskazać, którego bohatera imię chcesz wyświetlić?
czyli linijka z:
Kod:
self.contents.draw_actor_name
powinna wyglądać przykładowo tak:
Kod:
draw_actor_name($game_party.actors[0], x, y)
za x i y podstaw współrzędne.
Wówczas wyświetli się imię pierwszego bohatera w drużynie.erienus - Sob 22 Maj, 2010 08:01 ok, dzięki ayene ;p
a jak zrobić by ukazać 2 lub 3 okienka? bo jak dałem 2 oddzielne skrypty z 2 okienkami to tylko jedno pokazało
EDIT: wiem już chyba, ale mam pytanie bo robię HUDa i jak zrobić by podstawić grafiki pod pasek HP MP i EXP?Ayene - Sob 22 Maj, 2010 10:46 Trzeba skorzystać ze skryptu, najlepiej będzie jak podejrzysz, jak wstawić takie paski do Menu:
class Window_Base < Window
def draw_actor_hp_gauge(actor, x, y, width = Ayene::SZEROKOŚĆ_PASKÓW)
gw = width * actor.hp / actor.maxhp
self.contents.fill_rect(x, y + 24, width, 6, Color.new(255, 255, 255, 255))
self.contents.fill_rect(x, y + 24, gw, 6, Ayene::KOLOR_HP)
end
def draw_actor_sp_gauge(actor, x, y, width = Ayene::SZEROKOŚĆ_PASKÓW)
gw = width * actor.sp / actor.maxsp
self.contents.fill_rect(x, y + 24, width, 6, Color.new(255, 255, 255, 255))
self.contents.fill_rect(x, y + 24, gw, 6, Ayene::KOLOR_SP)
end
alias ayene_draw_actor_hp draw_actor_hp
def draw_actor_hp(*arg)
ayene_draw_actor_hp(*arg)
draw_actor_hp_gauge(*arg)
end
alias ayene_draw_actor_sp draw_actor_sp
def draw_actor_sp(*arg)
ayene_draw_actor_sp(*arg)
draw_actor_sp_gauge(*arg)
end
end
Wystarczy, że w miejsce, gdzie chcesz wstawić paski podasz kod:
Kod:
draw_actor_hp_gauge(actor, x, y, width)
i
Kod:
draw_actor_sp_gauge(actor, x, y, width)
erienus - Sob 22 Maj, 2010 14:34 ok, może mi się udaFilipsO - Pią 23 Lip, 2010 13:32 Mam wielki problem!
Stworzyłem coś takiego:
Spoiler:
Skrypt:
class Window_okno < Window_Base
def initialize(x = 7, y = 16, width = 320, height = 60)
super(x, y, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "HP:"$data_actors[N].hp
self.contents.font.size = 18
self.back_opacity = 160
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(0, 0, 288, 32, "", 1)
end
end
Scene_Map
class Window_okno < Window_Base
def initialize(x = 7, y = 16, width = 320, height = 60)
super(x, y, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Book Antiqua"
self.contents.font.size = 18
self.back_opacity = 160
refresh
end
def refresh
self.contents.clear
self.contents.draw_text(0, 0, 288, 32, "HP:"$data_actors[N].hp, 1)
end
end
class Scene_Map
def main
@spriteset = Spriteset_Map.new
@message_window = Window_Message.new
@okienko = Window_okno.new
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@spriteset.dispose
@message_window.dispose
@okienko.dispose
if $scene.is_a?(Scene_Title)
Graphics.transition
Graphics.freeze
end
end
def update
loop do
$game_map.update
$game_system.map_interpreter.update
$game_player.update
$game_system.update
$game_screen.update
unless $game_temp.player_transferring
break
end
transfer_player
if $game_temp.transition_processing
break
end
end
@spriteset.update
@message_window.update
@okienko.refresh
if $game_temp.gameover
$scene = Scene_Gameover.new
return
end
if $game_temp.to_title
$scene = Scene_Title.new
return
end
if $game_temp.transition_processing
$game_temp.transition_processing = false
if $game_temp.transition_name == ""
Graphics.transition(20)
else
Graphics.transition(40, "Graphics/Transitions/" +
$game_temp.transition_name)
end
end
if $game_temp.message_window_showing
return
end
if $game_player.encounter_count == 0 and $game_map.encounter_list != []
unless $game_system.map_interpreter.running? or
$game_system.encounter_disabled
n = rand($game_map.encounter_list.size)
troop_id = $game_map.encounter_list[n]
if $data_troops[troop_id] != nil
$game_temp.battle_calling = true
$game_temp.battle_troop_id = troop_id
$game_temp.battle_can_escape = true
$game_temp.battle_can_lose = false
$game_temp.battle_proc = nil
end
end
end
if Input.trigger?(Input::B)
unless $game_system.map_interpreter.running? or
$game_system.menu_disabled
$game_temp.menu_calling = true
$game_temp.menu_beep = true
end
end
if $DEBUG and Input.press?(Input::F9)
$game_temp.debug_calling = true
end
unless $game_player.moving?
if $game_temp.battle_calling
call_battle
elsif $game_temp.shop_calling
call_shop
elsif $game_temp.name_calling
call_name
elsif $game_temp.menu_calling
call_menu
elsif $game_temp.save_calling
call_save
elsif $game_temp.debug_calling
call_debug
end
end
end
def transfer_player
$game_temp.player_transferring = false
if $game_map.map_id != $game_temp.player_new_map_id
$game_map.setup($game_temp.player_new_map_id)
end
$game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)
case $game_temp.player_new_direction
when 2
$game_player.turn_down
when 4
$game_player.turn_left
when 6
$game_player.turn_right
when 8
$game_player.turn_up
end
$game_player.straighten
$game_map.update
@spriteset.dispose
@spriteset = Spriteset_Map.new
if $game_temp.transition_processing
$game_temp.transition_processing = false
Graphics.transition(20)
end
$game_map.autoplay
Graphics.frame_reset
Input.update
end
end
I wyskakuje mi syntax error a ja chcialem HP w rogu Sabikku - Pią 23 Lip, 2010 13:43 W ruby blok ma taką postać:
Kod:
begin
end
Każdy blok rozpoczyna się jakimś słowem kluczowym (begin, def, if, case i tak dalej) i kończy end'em. Policz liczbę słów kluczowych (w RMie są ładnie pokolorowane) i endów i zastanów się, gdzie się przeliczyłeś. Tak się dzieje jak nie używasz tabulatorów (wcięć w każdym bloku).
Kod:
class Costam
def costam
if costam
end
end
def costam
if costam
end
end
def costam
if costam
end
end
end
radek02 - Wto 03 Sie, 2010 17:59 a jaki jest odnośnik do menu ? ( takie coś jak Scene_Map itp. )Sabikku - Wto 03 Sie, 2010 19:23 Odnośnik? Przeniesienie do Scene_Menu:
Kod:
$scene = Scene_Menu.new
O to ci chodzi?radek02 - Wto 03 Sie, 2010 20:22 Sabikku, dzięki . to już mam pierwszą linijkę .maciek1520 - Czw 23 Gru, 2010 01:10
Cytat:
[quote="Ayene"]Bo co to jest w ogóle za komenda 'self.contents.draw_actor_name'. I kogo ma podać imię?
Po pierwsze 'draw_actor_name' to zadeklarowana już definicja, która sama w sobie powoduje wyświetlenie imienia bohatera, jednak - co jest ważne - należy wskazać, którego bohatera imię chcesz wyświetlić?
czyli linijka z:
Kod:
self.contents.draw_actor_name
powinna wyglądać przykładowo tak:
Kod:
draw_actor_name($game_party.actors[0], x, y)
za x i y podstaw współrzędne.
Wówczas wyświetli się imię pierwszego bohatera w drużynie.
jak wklejam to co ayene napisala tutaj czyli to
Cytat:
draw_actor_name($game_party.actors[0], x, y)
to podczas wlaczania nowej gry w grze to wyskakuje mi blad i pokazuje ze jest cos zlego z ta linijka
co moge na to poradzic ???
caly moj kod wyglada tak :
Cytat:
class Window_okno < Window_Base
def initialize(x = 0, y = 0, width = 160, height = 120)
super(x, y, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Tahoma"
self.contents.font.size = 18
self.back_opacity = 160
refresh
end
def refresh
self.contents.clear
draw_actor_name($game_party.actors[0], 0, 0)
end
end
Prosze o pomocSabikku - Czw 23 Gru, 2010 01:51 Myśl, nie przeklejaj.
Kod:
class Window_okno < Window_Base
def initialize(x = 0, y = 0, width = 160, height = 120)
super(x, y, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Tahoma"
self.contents.font.size = 18
self.back_opacity = 160
refresh
end
def refresh
self.contents.clear
self.contents.draw_actor_name($game_party.actors[0], 0, 0)
end
end
maciek1520 - Czw 23 Gru, 2010 12:10 dalej nie dziala tylko wyskakuje mi taki oto blad :
Cytat:
Script 'Windows_okno' line 12: NoMethodError occurred .
undefined method ' actors' for #<gameparty:0x1506878