Ogłoszenie 

Uwaga! To forum jest w trybie offline.
Wszelką pomoc uzyskasz pod adresem
forum.ultimateam.pl


Administracja Forum


Poprzedni temat «» Następny temat
Przesunięty przez: pw115
Nie 23 Maj, 2010 20:04
Definicja i opis klasy Scene_Map
Autor Wiadomość
pw115 



Preferowany:
RPG Maker XP

Pomógł: 10 razy
Dołączył: 19 Lut 2010
Posty: 235
Skąd: Katowice
Wysłany: Nie 23 Maj, 2010 20:04
Definicja i opis klasy Scene_Map
Witam w tym tutorialu pokaże wam jak zrobić własny CMS (custom menu system)
Uwaga! Żeby w pełni zrozumieć ten tutek wymagana jest umiejętność tworzenia okien (lekcja okno w ruby)

Zaczynamy:
1.Wchodzimy do edytora skryptów(F11) i tam tworzymy nową klasę(nad klasą main) i nazywamy ją jak chcemy.


2.Kopiujemy całą zawartość klasy Scene_Menu (gdyż na niej będziemy pracować) i wklejamy do naszego skryptu.


3.Zaczynamy analizę naszej klasy (;D)
a)Patrzymy i widzimy:
Kod:

def initialize(menu_index = 0)
   @menu_index = menu_index
end

Hmmm... czyżbyśmy nie znali metody initialize z naszej lekcji o oknach ? Ale zaraz.... co tu robi zwrot

menu_index ?
Otóż ten zwrot nie robi nic innego jak nie tworzy....(chwila napięcia)... ... indeks menu !! (cóż za niespodzianka)
Ten zwrot jest wykorzystany tylko tu i nam się nie przyda

b)Patrzymy poniżej i widzimy początek metody main. Widzimy tam polecenia (s1 = ...,s2 = .....) jest to nic
innego ale polecenia które są w menu. Pod tymi poleceniami mamy sam zwrot który tworzy ową tablicę komend.
Standardowo szerokość wysokość itd.. TEJ tablicy komend są zdefiniowane w klasie Window_Command.
Pod tym mamy komendę definiująca powyższe komendy jako indeks(menu). Jeśli chcemy samodzielnie wyznaczyć x i y
oraz szerokość i wysokość tego okna to zapiszcie pod
Kod:

@command_window.index = @menu_indeks

Własną pozycję na osi x i y:
@command_window.x = xxx
@command_winsow.y = xxx
(xxx to dowolna liczba)

c)Następnie mamy takie coś:
Kod:

    if $game_party.actors.size == 0
      # Disable items, skills, equipment, and status
      @command_window.disable_item(0)
      @command_window.disable_item(1)
      @command_window.disable_item(2)
      @command_window.disable_item(3)
    end
    # If save is forbidden
    if $game_system.save_disabled
      # Disable save
      @command_window.disable_item(4)
    end

Jest to fragment menu odpowiedzialny za blokowanie. Pierwszy fragment mówi że jeśli nie ma żadnego członka
w drużynie (game over) to blokuje dostęp do s1 s2 s3 s4 (patrz podpunkt b ).
Drugi fragment (if $game_system.save_disabled) blokuje dostęp do zapisu (s5) jeśli włączymy taką funkcję w zdarzeniu.

d)Poniżej widzimy kilka krótkich metod które przywołują okienka(z lekcji okno w ruby)
przykład:
Kod:

    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224

Pierwsza linijka przywołuje (tak jak szaman) nasze okienko
Druga odpowiada za pozycję x naszego okna
Trzecia za pozycję y naszego okna

e)Linijka niżej powoduje przejścia grafik(nas to nie obchodzi)

f)Następnie omijamy metodę loop do,Graphics.update itd...(służą one odświeżaniu i pobieraniu informacji o wciskanych klawiszach) Zatrzymujemy nasze bystre oczy na metodach:
Kod:

    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose

Te definicję służą za usuwanie okienek z widoku kiedy np. wychodzimy z menu

i takim sposobem kończymy omawianie klasy main(połowa za nami)


4.Zaczynamy definicję klasy update i zaraz na początku widzimy znane nam już nazwy okienek tyle że z napisem
.update na końcu. Co owe tajemnicze .uptade oznacza? Otóż jeśli okno ma ciągle zmieniającą się zawartość np.
czas gry to musi być ciągle odświeżane aby działać poprawnie(inaczej obraz zastygł by i odświeżył by się po ponownym wejściu do menu).
Potem widzimy warunek (czyli metoda zaczynająca się na if) @command_window.active.
Nie powinny nas te warunki obchodzić ale w sekrecie powiem wam że one odświeżają aktywne okna komend(tylko nikomu tego nie mówcie to tajemnica).


5.Doszliśmy do update_command czyli nic innego jak komendy zdefiniowane przez nas w punkcie 3, podpunkcie b.

a)Zaczynamy od komendy powodowanej naciśnięciem klawisza ESC czyli... ... wyjścia za menu !!!
mamy tam napisane:
Kod:

if Input.tigger?(Input::B)
   $game_system.se_play($data_system.cancel_se)
   $scene = Scene_Map.new
  return
end

if input.tigger?(Input::B)
to warunek że klawisz B(ESC) jest wciśnięty. Potem mamy $game_system.se_play czyli nic innego jak odegranie
SE(sound effect pol. Efekt dźwiękowy zapisany w bazie danych).Następnie zobaczymy $scene = Scene_Map.new czyli innymi słowy powrót do gry.

b) Potem mamy twierdzenie! że jeśli nie ma nikogo w drużynie a my klikniemy na komendę nr4(zapis) to odpali nam dźwięk odmowy i powrócimy do menu

c)Teraz najdłuższy fragment czyli definiowanie poszczególnych komend (s1, s2, s3 etc...)
Przykład:
Kod:

when 0
  $game_system.se_play($data_system.decision_se)
  $scene = Scene_Item.new

Przetłumaczę to co tam jest napisane dosłownie: Jeżeli komenda 0(s1) jest wciśnięta to odegraj SE i przenieś
do Scene_Item(czyli plecak)
Wszystkie poniższe komendy zdefiniowane są w teki sam sposób(oprócz 1 2 i 3 ale o tym za chwilę)

d)Wspomniane wyżej punkty 2 i 3 to w menu ekwipunek i status bohatera. Przypomnijcie sobie moment kiedy klikacie w menu na status... z prawej strony wyskakuje lista bohaterów prawda? Zdefiniowane jest to właśnie tu przez metodę:
Kod:

        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0

Active oznacza aktywność (stąd nazwa jogurtu Activia[bardzo go lubię]) więc te metody powodują że okno z komendami ( s1 s2 s3...) przestaje być aktywne a pojawia nam się okno z bohaterami.


6. Zaczynamy już zajmować się ostatnią klasą a zwie się ona update_status

a)Zaczyna się od sprawdzenia czy przycisk B (ESC) jest naciśnięty. Jeśli tak to usuwa okienko z herosamii wraca do menu.

b)Potem mamy sprawdzenie czy przycisk C (ENTER) jest naciśnięty i przeniesienie do odpowiedniej klasy.

I to już koniec tutoriala

Przepraszam za ewentualne błędy ortograficzne/literówki jakie mogły znaleźć się w tutku

Copyright Time
________________________
Pomocy:
http://pw115.myminicity.com/




 
 
FireBlade 




Preferowany:
RPG Maker VX

Pomogła: 8 razy
Dołączyła: 04 Kwi 2010
Posty: 243
Skąd: Opole
Wysłany: Nie 23 Maj, 2010 22:33
Twoje tutoriale są bardzo mądre i dokładne a w dodatku śmieszne :
Time napisał/a:
Nie powinny nas te warunki obchodzić ale w sekrecie powiem wam że one odświeżają aktywne okna komend(tylko nikomu tego nie mówcie to tajemnica).

Ta tylko 876 osobą z forum które to zobaczą xD
Time napisał/a:
Active oznacza aktywność (stąd nazwa jogurtu Activia[bardzo go lubię])

A ja nie ? ;D

y kchym dobra wstałam z podłogi i jestem w stanie dać ocenę ;D
10/10 :D a jaka inna ? :D

inteligentnie , przemyślanie , dokładnie , śmiesznie świetny tutek :D
________________________
"Nigdy się nie tłumacz, przyjaciele tego nie potrzebują a wrogowie i tak nie uwierzą.,"

"Oklaski są z łaski a brawa to wielka sprawa"

"Akcpetuję tylko wodę, mountain dew i coca colę zero..."

DeviantArt : http://divinekataroshie.deviantart.com/
 
 
 
erienus 




Preferowany:
RPG Maker XP

Pomógł: 29 razy
Dołączył: 12 Lut 2010
Posty: 300
Wysłany: Pon 24 Maj, 2010 10:56
Tutek niezły, opisane są aby komendy, co do czego służy, ciężko z tego CMS trochę zklecić no ale i tak brawo ;D

PS: jak zmienić wymiary okna?
________________________
Kolekcjonuję "Pomógł". Jeżeli ci pomogłem i chcesz wzbogacić moją kolekcję, kliknij "Pomógł".
 
 
pw115 



Preferowany:
RPG Maker XP

Pomógł: 10 razy
Dołączył: 19 Lut 2010
Posty: 235
Skąd: Katowice
Wysłany: Pon 24 Maj, 2010 11:14
Erinus którego okna ?? A co do tutka to nie chciałem ludziom pokazywać jak się robi CMSa krok po kroku. Moim celem było opisanie klasy Scene_(coś tam) która jest podstawą do tworzenia skryptów.

@EDIT
erinus okna musisz sam stworzyć i dopiero potem możesz je przypisać do skryptu
________________________
Pomocy:
http://pw115.myminicity.com/




 
 
erienus 




Preferowany:
RPG Maker XP

Pomógł: 29 razy
Dołączył: 12 Lut 2010
Posty: 300
Wysłany: Pon 24 Maj, 2010 11:39
aha ;p jeszcze dużo czasu minie zanim zrobię coś lepszego ^^ obecnie pracuję nad ulepszeniem swojego huda

a i jeszcze coś, bo chcę dodać do huda statystyki typu ATK DEF itp i linijka wygląda tak:


draw_actor_parametr1($game_party.actors[0], 145, 100)

wywala błąd

także jak powinno być odpowiednio? ;p
________________________
Kolekcjonuję "Pomógł". Jeżeli ci pomogłem i chcesz wzbogacić moją kolekcję, kliknij "Pomógł".
 
 
pw115 



Preferowany:
RPG Maker XP

Pomógł: 10 razy
Dołączył: 19 Lut 2010
Posty: 235
Skąd: Katowice
Wysłany: Pon 24 Maj, 2010 11:53
Proszę:
Kod:

$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
________________________
Pomocy:
http://pw115.myminicity.com/




 
 
erienus 




Preferowany:
RPG Maker XP

Pomógł: 29 razy
Dołączył: 12 Lut 2010
Posty: 300
Wysłany: Pon 24 Maj, 2010 12:02
no wiem, ale mi nie wychodzi xD podasz mi full linijkę odpowiedzialną za np atak? byłbym wdzięczny
EDIT: aaaa już chyba kapuję xd
EDIT2: $data_actors[0].hp - taką linijkę wpisałem i nici :S

taka też nie działa:
draw_actor_parametr($data_actors[1].hp, 145, 100)
________________________
Kolekcjonuję "Pomógł". Jeżeli ci pomogłem i chcesz wzbogacić moją kolekcję, kliknij "Pomógł".
 
 
pw115 



Preferowany:
RPG Maker XP

Pomógł: 10 razy
Dołączył: 19 Lut 2010
Posty: 235
Skąd: Katowice
Wysłany: Pon 24 Maj, 2010 12:15
hmm.. musisz tam wpisać numer bohatera. Czy masz bohatera no numerze 0 ??
________________________
Pomocy:
http://pw115.myminicity.com/




 
 
Ayene 




Ranga RM:
4 gry

Pomogła: 232 razy
Dołączyła: 18 Wrz 2007
Posty: 2424
Wysłany: Pon 24 Maj, 2010 12:24
Cytat:
draw_actor_parametr1($game_party.actors[0], 145, 100)

Bo co to jest:
'draw_actor_parametr1'?
Powinno być:
Kod:
draw_actor_parameter($game_party.actors[0], 145, 100, x)

Gdzie x to nr statystyki (od 0 do 6)
________________________


 
 
 
erienus 




Preferowany:
RPG Maker XP

Pomógł: 29 razy
Dołączył: 12 Lut 2010
Posty: 300
Wysłany: Pon 24 Maj, 2010 17:25
wielkie dzięki ayene (znowu ^^)

Zrobiłem 2 okna i jedno mi znika tak po prostu, nie wiem czego.
________________________
Kolekcjonuję "Pomógł". Jeżeli ci pomogłem i chcesz wzbogacić moją kolekcję, kliknij "Pomógł".
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
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

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group | Template Klam by Ayene