Tutorialy Scripty

Skripty pro RPG Makeru XP (nekompatibilní s verzemi VX).

Moderátor: Moderátoři

Chcete další tutory??

Ano
0
Žádná hlasování
Ne
0
Žádná hlasování
Jen když se zamněříš na mojí žádost => dotazy k tutorům
0
Žádná hlasování
 
Celkem hlasů : 0

Uživatelský avatar
 
Příspěvky: 794
Registrován: únor 14, 2010, 10:07 pm
Bydliště: Slaný. To je kousek od Prahy.

Tutorialy Scripty

Příspěvek od legition » červenec 31, 2010, 8:48 am

Pár věcí k tomuto topicu

1.Toto je topic pouze pro dávání tutoriálů.

Pokud budete mít k nějakému tutoru dotaz ptejte se zde: > Dotazy k Tutorům <. Ke svému dotazu vždy připojte číslo tutoru kterého se to týká!.

A čeho vše se tu můžete dočkat? Bude to tu plné scriptů které si budete schopni udělat sami po svém.... postupně se budeme probírat nespočtem příkázu k vytváření ůžasných scriptů.

Momentálně se učím a zároveň cvičím na scriptu který přidá do menu Bonus scenů kde je custom men (animované) a spousty různých materiálů... Až to bude hotové Ze zajímavosti to sem postnu, protože už brzo to budete schopni udělat taky ;) či svůj vlastmí CMS který si třeba ze srandy udělal Klenáč. (myslím že ho tu už postnul....)

Tím také vychází najevo že všechny tutori co zveřejníme jsme dělali společně. Takže akorát zmínime kdo na tom mněl ten den větší kus práce :D

Toť asi vše. Všem přeju příjemné scriptování :twisted:

Obsah:
Zobrazení obrázku
Řídící struktury část první - podmínky (animace obrázku)
Vlastní menu (Před menové okno s Autorem)
Obrázek


Obrázek

Uživatelský avatar
 
Příspěvky: 794
Registrován: únor 14, 2010, 10:07 pm
Bydliště: Slaný. To je kousek od Prahy.

Re: Tutorialy Scripty

Příspěvek od legition » červenec 31, 2010, 5:45 pm

Lekce 1: Obrázek ve hřeby JKlena

Takže v první lekci sme sa rozhodli ukázat vám jak se dělají obrázek ve hře zapomoci eventu a příkazu Script:
Obrázek s pozadím běžící hry spouštený eventem.(Píšu to takhle aby ste si nemysleli že je to jediná možnost, ale 2. možnost je o dost ťažší aj ked nekedy sa hodí, takže o ní až v budoucnu.)
Tu vám ukážem, jak se dělají obrázky, které se v budoucnu dají využít napr. při tvorbě HUD.
Ve výběru příkazů pri každem evente dokonca aj common evente je na 3. strane tlačítko:
Obrázek

Týmto se vám otevře okno skoro jako u Show Text. Zde se píšou scripty stejne jako v Script Editoru, ale celkově je to jednoduchŠí jelikož to je příkaz s jakým ste zvyklý pracovat.
Teď k samotnému kódu:
Kód: Vybrat vše
@obrázek = Sprite.new


slovo které jde za @ je vlastne jakési "pojmenování" je to jméno daného obrázku (pojmenovává se takhle víc věcí, ale ty nás zatim nezajímají) (Těm co se aspoň trochu vyznají v programování jistě došlo že jde o pojmnevání promněné)
Sprite.new určuje že @obrázek je obrázek, Sprite je vlastne skupina která definuje programu "Co to vlastne obrázek je" a .new znamená že náš @obrázek je nové "neco" co je definované jako Sprite. (Skušenějším opět došlo že jde o definici promněné typu img)

Kód: Vybrat vše
@obrázek.bitmap = RPG::Cache.picture("muj_obrazek")


.bitmap za naŠím @obrázek je atrribut pro Sprity, nebo li obrázky, těchto atributú je víc, všechny opíšu o kousek níž
RPG::Cache.picture je adresa súboru kde má program hledat naviguje ho do "Název hry"/Graphics/Pictures/ (tento zápis platí jak pro súbory specifické pro našu hru, tak pro súbory RGSS).

Máme název obrázku uloženého ve složce picture ve vašem projektu či v rtp dej me to mu že se jmenuje takhle("muj_obrazek.png"). Ale v příkazu napíšeme jeho jméno bez přípony. To pro případ že uděláte super script s PNG obrázky a někdo komuho dáte třeba přes net si tam dá obrázky JPG a scrypt potom nefunguje.
POZOR ! Pokud RPG::Cache.picture nenajde ve složce muj_obrazek.png, muj_obrazek.jpg nebo muj_obrazek.bmp tak vyhodí chybu, že brázek nebyl nalezen a celá hra spadne, čím chci upozornit aby ste si dávali bacha.

Kód: Vybrat vše
@obrázek.x = 100
@obrázek.y = 120
@obrázek.opacity = 200
@obrázek.z = 12


.x X-ová souřadnice obrázku, pokud tento attribut nedefinujete x = 0, x se udává v pixelech
.y Y-ová souřadnice, jinak to isté
.opacity v preklade průsvitnost, má stejné nadstavení, jako průsvitnost u normálne nadstavovaných obrázkú v RM, ak vynecháte opacity = 255, tedy obrázek 100% viditelný.
.z vás možná zarazí protoŽe RM je 2D ale představte si kopu papiru na sobě a vy koukáte z vrchu, v tom případe je z kaŽdého papíru číslo které určuje kolký je odspodu. Tedy jak vysoko je, je to na prekrývání obrázků, ak budú 2 obrázky na rovnak míste a obrázek č.2 má večí Z, bude videt len obrázek č.2, teda ak majú zhodnú aj velkost, pro lepší pochopení, si to skuste samy.

POZOR! Když tenhle script píšete do eventu, MUSÍTE pred každú rádku dat ze 2 medzery, jinak vám vyhodí chybu:"Wrong number of arguments in runing script." proč tomu tak je, zatim přesne nerozumim.

by Legiton:Já ovšem ano...
Eventoví script totiž velice rád rozkládá delší příkazy na dva řádky. A někdy se stane že se rozdělí v místě kde končí příkaz a začinají být parametry příkazu. (Vím že tomu rozumí asi málo kdo ale je lepší to říct) Takže v případě obrázku stačí když nebude rozdělený mezi "=" a "RPG::Cache.picture("obrazek")" většinou když před to dáte ty dvě mezery tak se to rozdělí v jiném místě a příkaz se pak vykoná celý.[/hide]


script který sem opisoval je na obrázku v Červeném rámečku, ovšem je tam ješte jeden script v modrém:

Kód: Vybrat vše
@jakub.dispose

@jakub je stejné jako naše @obrázek
.dispose je vlastne taky attribut, i když obrázek nemnení, ani neposouvá,níbrž ho maže.

To je z dnešní lekce vše, přeji příjemnou práci!
Obrázek


Obrázek

Uživatelský avatar
 
Příspěvky: 794
Registrován: únor 14, 2010, 10:07 pm
Bydliště: Slaný. To je kousek od Prahy.

Re: Tutorialy Scripty

Příspěvek od legition » srpen 7, 2010, 11:10 pm

Lekce 2: řídící struktury část první by legition
podmínky


Takže v první lekci jsme se naučily jak se dělají obrázky ve hře zapomoci eventu a příkazu Script. V dnešní lekci si ukážeme další využití scriptu v eventu. Pokusíme se rozpohybovat obrázek který jsme minule scriptem zobrazily. Stím se naučíme pár řídících struktur.

Pro začátek, co to je řídící struktura? Přirovnám to eventu pro jednoduší pochopení. Conditional brach rozhoduje co se má stát když něco. Řídí sled událostí v eventu proto je také jeden z příkazu řídících struktur. Stejně se chovají switche. Když mají hodnotu ON děje se to ,když OFF děje se zas tohle. A podobně.

od posledně nám zůstalo toto
Obrázek
již známe příkazy které nastaví obrázku pozice x y. Mi teď budeme potřebovat takovíto obrázek rozpohybovat.
Ať už libovolnou cestou nebo po přímce...

Pro stejnost postupu si zobrazte jakýkoliv obrázek na souřadnice 100 100. Animaci docílíme tak že budeme obrázek posouvat pixel po pixelu....
takže si uděláme nový event a tam změnime pozici obrázku x y (příkazy viz tutor1) a to na souřadnice 10 10
Obrázek


Když hru spustíme co se stane? Vuď se nám hodí error to protože jste chtěli přesunout obrázek ještě dřív než jsme ho zobrazily nebo obrázek prostě přeskočil na nové souřadnice...

To ovšem nechceme mi chceme aby tam postupně došel.... Uděláme to jednoduše. Uděláme to tak že budem postupně odečítat od hodnoty @obr.x a @obr.y (@ tak jsem si pojmenoval proměnou s obrázkem...) po jedné. Jak to uděláme? Stejně jako v matematice u rovnic (kdo neví co to je tak je to jedno je to jen přirovnání...)

niní scriptem řekneme že hodnota x souřadnice obrázku od teď bude rovna té samé souřadni o jednu méně.

Kód: Vybrat vše
@obr.x = @obr.x - 1


a je to. Takhle se budou odečítat xová souřadnice... to samé uděláme ještě jednou tentokrát pro osy Y

Kód: Vybrat vše
@obr.y = @obr.y - 1


tyto dva scriptové příkazy dáme do toho druhého eventu místo toho prvního script takže tam budou jen tyto dva příkazy.... A co se stane když hru spustíme? no vuď nám opět vyskočí error to vpřípadě že jsme nezorazily obrázek než jsme ho začali posouvat, nebo se obrázek o kousek posunul. Když budeme rychle mačakt enter obrázek se bude postupně posouvat až zmizí mimo obrazovku hry... To mi nechcem. Musíme nějak zabránit uníku obrázku mimo souřadnice na které ho animací chceme dostat.

Jak to uděláme? No uděláme si podmínku která nám bude kontrolovat jestli se obrázek nenachází na konečných souřadnicích(10 10) a pokud ne posune obrázek zas o kousek.

Protože osa y bude v našem případě vždy stejná jako osa x stačí nám kontrolovat jenomo jednu z nich... před script ve druhém eventu napíšeme naší podmínku

Kód: Vybrat vše
if @obr.x > 10


teď si to rozebereme. if je klíčové slovo označující strukturu podmínky. Struktur podmínek jsou tři.

první je že pokud podmínka je splněná udělá příkazy které má pokud ne tak nic.

druhá je že pokud podmínka je splněná udělá příkazy které má a pokud není tak udělá jiné příkazy.

a třetí je že pokud podmínka je splněná udělá příkazy které má a pokud není tak tak otestuje jinou podmínku a když je splněná tak se provedou druhé příkazy a pokud není ani ta druhá podmínka splněná udělá třetí příkazy... pro lepší názornost jsem napíšu příklady

první případ
Kód: Vybrat vše
if podmínka
udělej příkazy když je podmínka splněná
end


druhý příklad
Kód: Vybrat vše
if podmínka
udělej příkazy když je podmínka splněná
else
udělej příkazy když je podmínka nesplněná
end


třetí případ
Kód: Vybrat vše
if podmínka
udělej příkazy když je podmínka splněná
elsif jiná podmínka
udělej příkazy když je jiná podmínka splněná a první není
else
udělej příkazy když žádná podmínka není splněná
end


Jistě jste si všimli další slovíčka tentokrát end Stejně jako if je začátek řídící struktury end je konec řídící struktury (nebo bloku příkazů ale to až jindy). Příkazy za end se budou v naše případě plnit podmínka nepodmínka.

To zatím k podmínkám... ale z5 k našemu příkazu if @obr.x > 10 zbytek za if je samotný matematický výraz který je buď pravda (podmínka je splněná) nebo není pravda (podmínka není splněná). ta naše říká že pokud bude x souřadice našeho obrázku větší než 10 je podmínka splněná. Za naším if em budou naše dva příkazy a za nimy slovíčko end. Náš event by mněl vypadat stejně jako tento na obrázku

Obrázek


Když hru spustíme tak se nám vuď opět stane error (doufám že vám všem došlo proč by mohl nastat a nemusím to tu potřetí psát :yes: ) a nebo se obrázek o kousek posunul. Když ovšem budeme mačkat enter obrázek se bude posuvat do horního levého rohu ale když bude těsně u kraje tak dále už nepůjde ať budeme mačkat enter sebevíc....

Tak to bychom to skoro mněli. Těd už jen udělat abychom nemusely jak šílení klikat entrem. Na to nám poslouží obyčejný label a conditionla brach který se bude řídit scriptem...

Nad naše příkazy jsi uděláme label pojmenujemeho třeba "znova". A ůplně na konec dáme conditional brach. Na 4. záložce ůplně dole je okénko script.
Tam napíšeme stejný matematický výraz jako u naší scriptové podmínce čili @obr.x > 10. Mnělo by to vapadat asi takto.

Obrázek


Po odkliknutí do conditionalu dáme příkaz wait 1 frame (protože by jinak animace byla tak rychlá že bychom ho okem neviděli a vypadalo by to stejně jako když obrázek rovnou dáme na cílové souřadnice) a po wait dáne jump to labe a vybereme label "znova"

Konečný event by mněl vypadat takto

Obrázek


Po spuštění hry bude vuď chyba a nebo se zobrazí obrázek který se poté pěkně pomalu přesune do levého horního rohu :)
Děkuju vám všem za pozornost. Prřípadné otázky či dotazy pište do sekce Jak na ruby.
Obrázek


Obrázek

Uživatelský avatar
 
Příspěvky: 794
Registrován: únor 14, 2010, 10:07 pm
Bydliště: Slaný. To je kousek od Prahy.

Re: Tutorialy Scripty

Příspěvek od legition » leden 15, 2011, 12:07 am

Lekce 3: Vlastní menu by legition
Před menové okno s Autorem

Takže v minulích lekcí jste se dozvěděli jak se zobrazují obrázky a pověděly jsme si něco o řídících strukturách a to konkrétně na podmínkách. Zatím jsme pracovaly čistě v eventech. Nyní se přesuneme do samotných scriptů. Ale před tím si něco o nich povíme. Každý script je jedna stránka textu. Každý může pracovat nezávysle na jiných, nebo může být volán jinýmy scripty. Každý script může (a z 99% má) své vlastní promněné (některé jsou podobné variablům, a některé jsou dokonce samotné variably) K promněním pak věnuji celý jeden odstavec. Scritpy jsou jako eventy. Píšem příkazy, ty se spracovávají v určitém pořadí (od zhora dolů), máme na výběr spousty funkci a když nejsou na výběr tak si je můžem udělat (ano i to lze ale to později).

Teď chci konečně roseknout jeden spor a to "Event nebo script". Sám říkám že scripty doplňují eventy, pravda je ovšem taková že eventy jsou takový zástupci skriptů. Ano, jakýkoliv příkaz v eventu je popsán a definován ve scriptech. Tím pádem jsme schopni změnit některé vytvořené příkazy do eventů. Příklad za vše, v eventech máme příkaz showtext. Vněm je možnost změnit barvu zobrazeného textu přičemž máme na výběr z devíti barev. ale co když se nám ani jedna nelíbí?? Jednoduché, jednu z 9barev změnime na tu co se nám líbí a možná (teď jsi tím nejsem zcela jist, musel bych se kouknout, ale mám za to že to jde) bychom jí mohly i vytvořit jako desátou.

Toť na úvod a teď ke scriptu
Každý script využívá promněný jak jsme si již řekly. Ovšem máme více druhů promněných. Uvedu základní které budem potřebovat nejčastěji.

Integer To je promněná do které ukládáme čísla. (Je to to samé co variable)
String To promněná do které ukládáme místo čísel, tex. To se nám bude hodit při tvorbě oken, nebo při jakékoliv práci s textem
Bool To je logická promněná. Toto je nejzvláštnější promněná protože do ní můžem uložit jen dvě hodnoty TRUE a FALSE (Pravda/nepravda). Tahle promněná se používá pouze do podmínek (poznámka: podmínky nemusí být jen v příkazech IF), říkají nám zda podmínka je pradivá(TRUE) nebo nepravdivá(FALSE)

Pak máme objekty, ty se v mnoha ohledech chovají jako promněné. Vysvětlím později. (Poznámka: S objektem jsme se již ztřetly a to když jsme chtěli zobrazit obrázek)

Ještě musím podotknout že každá promněná se nějak jmenuje a žádná promněná (a ani objekt) nesmí mít stejné jméno

Dobrá, každou promněnou (kromně objektů které nebudeme počítat jako promněnou) můžem rozdělit na dva druhy. Budem jim říkat
    Místní
    Celkoví

K čemu to?? Jak jsem již řekl, scripty mohou spolu spolupracovat. K tomu je potřeba jim zařídit jakousi "komunikaci". To se dělá právě celkovímy promněnímy.
Příklad: Máme jeden script který načte nějaký text od uživatele (je jedno jak, je to jen příklad) a pak máme druhý script který tento text bude umnět zobrazit. Takže se načte text a uloží se do celkové promněné, tenmto text od této chvíle znají všechny scripty a všechny metody. Takže stačí ve scriptu který zobrazuje zadaný text říct jak se jmenuje promněná ve kterém je text a můžem sním dále pracovat.

Ovšem tyto promněné jsou v paměti po celou dobu hraní a to by mohlo spůsobit sekání hry, či dokonce i zaseknutí hry. Pokud bychom používaly jenom tyto promněné tak nejenže by nám časem začali docházet jména pro jednotlivé promněné. Proto máme promněné místní, které se po ukončení scriptu (například při opuštení menu) z paměti smažou. Tyto promněné znají jenom jednotlivé scripty. K čemu to je? No kromně toho že tím nezasekáme hru nám to umožní používat v různých scriptech promněné se stejnýmy jmény. Takže nemusím e být tak kreativní :mrgreen: . Navíc budem často potřebovat promněné který by byli jiným scriptům naprd, tak není potřeba jim je dávat a plnit tak pamnět.

Příklad:
Budeme mít zase stejný dva skripty, ale načítací promněná bude načítat do místní promněné. Script který by mněl zobrazit text, by nic nezobrazil nic, nebo by zobrazil text který bychom předem napsaly do místní promněné v druhém scriptu se stejným názvem.

Ve scriptech je odlišujeme počátečním znakem a to @ pro místní a $ pro celkové. Objekty vždy začínají jen @.

Tolik k promněným. Nyní k samotnému menu. Standartní menu vypadá tak jak jej známe, čili jednoduchý výběr ze 3 možností, nějaká hudba v pozadí a samotný obrázek na pozadí. Tohle lze měnit v databázi projektu. Ale co třeba zobrazit Před menu nějaký obrázek s autorem a přitom nedělat menu eventově (Například přidávám do již rozdělaného projektu, nebo se mi to zdá prostě lepší)?Nebo co takhle si před spuštením menu udělat Intro, tak jak to známe skoro v každé nové hře a přitom třeba chci mít defaultní menu? A co třeba si místo klasického boxu s textem udělat svoje vlastní estetická tlačítka?? A Proč třeba menu nepřidat nějakou tu atmosféru?? Ale vše postupně. Začneme teda něčím jednoduchým. Pro začátek zobrazíme teda obrázek autora, než se přesunem do menu.

Takže oteřeme si editor scriptů a
Klikneme na poslední script pravým tlačíkem myši a kliknem na insert. Nový nepojmenovaný script bude nad scriptem Main je důležité aby byl nad scriptem main, jinak to později bude házet chybu.
si nad scriptem Main dva nové scripty, přičemž jeden bude sloužit jen jako oddělení našich scriptů od starých. Je to sice "zbytečné", ale pro lepší přehlednost je to lepší. (Poznámka: Ve scriptech v XP je to skoro nezbytné protože tu na přehled moc nehleděli, ve verzi VX je přehled již dostačujicí, přesto se vlastní scripty oddělují i tam). A druhý pojmenujem Scene_Autor. Do tohoto budem psát.

Je vhodné do záhlaví dát hlavičku. Což je jeden komentář o tom co je to za script, kdo a kdy ho dělal, případně nějaké poznámky k němu jak se ovládá. I my takouto hlavičku uděláme.

Kód: Vybrat vše
#==============================================================================
# ** Scene_Autor
#------------------------------------------------------------------------------
#  Okno ukazující autora hry či jméno týmu
#  Autor: Legition
#  Datum: 14.1.2011
#==============================================================================


Dobrá tobychom mněli. Dále musíme dát tomuto scriptu nějakou strukturu. Uzavřeme všechny příkazy do bloku, jako text v knížce do ostavce. Jedná se o třídu scriptu. Každá třída někde začíná, nějak se jmenuje a nějak kounčí. A to nejdůležitější, každý script má svojí minimálně jednu třídu. Ta naše se bude jmenovat stejně jako script samotný, čili Scene_Autor a tato třída (jako každá jiná) bude zakončena slůvkem end, které již známe.

Kód: Vybrat vše
class Scene_Autor
end


Bezva, jistě jste si všimly že po napsání class a následném odentrování se nám na další řádek nejdříve připsal tab a potom teprve začal blikat kurzor. Je to proto abychom se v nekonečně mnoho enddech nestrácely tak se po otevření bloku příkazu vždy další příkazy o jeden tab posunou. A to až do té doby než narazí na end který příkazy o jeden tab posunou zpátky. Pro lepší orientaci to takhle i budem dále psát.

Tímto bychom mněli třídu. Ve třídách jsou jednotlivé metody které poté voláme ze zákládní která se spouštím sama při zavolání scriptu. Jmenuje se příhodně main. Teorie bylo dneska už docela dost. takže metody popíšeme jindy. Jen základy popíšu hned. Každá metoda začíná slůvkem def a končí endem. Příkazy se zase píšou do tohoto bloku. Takže vytvoříme metodu main.

Kód: Vybrat vše
class Scene_Autor
  def main
  end
end


Fajn, tak teďkomc máme připraveno pro samotnou tvorbu. Předtím si ale promyslíme jak to bude asi vypadat. Budeme tam mít nějaké pozadí, potom nějaký obrázek s názvem autora (či týmu) po případně vněm může být ještě logo. Pro efekt, se spustí hudba, pomalu se zobrazí pozadí a poté ještě trochu pomaleji obrázek s názvem, ten tam bude nějakou chvíly čekat (na stisk klávesy enter) a pak se celá obrazovka celá setmí až do menu

Takže nejdřív si seženem obrázky. Pokud se někomu nechce schánět můžete použít moje.
Obrázek
Obrázek

nejsou dokonalé, zajímáme se o script nikoliv o grafiku, to si už každý udělá sám

poznámka: obrázek s autorem má stejnou velikost jako obrazovka a to proto abychom nemusely pro každý noví obrázek s jinou velikostí zjišťovat kam se má umístit


Takže nejdříve zobrazíme dva obrázky a to ono pozadí a samotný text. Pevně věřím, že už to každý zvás umí, pokud ne koukněte na první lekci.

Kód: Vybrat vše
    @pozadi = Sprite.new
    @pozadi.bitmap = RPG::Cache.title("Pozadi")
    @pozadi.x = 0
    @pozadi.y = 0
    @pozadi.z = 12


obrázek s textem nemá být vidět hned, ale má nastat efekt zobrazení. Tudíž obrázek s autorem zobrazíme později

Momentálně se snažíme zobrazit obrázek v místě kde to ještě zcela není nastavené, proto musíme scriptu trochu pomoct a to tím že grafiku necháme zobrazit, při čemž dobu zobrazování můžeme nastavit na nějaký čas, já dal pro efekt 120 (což je 60 oken), ale můžete si dát čas který se vám zlíbí.. Dobrá, příkaz vypadá takto

Kód: Vybrat vše
    Graphics.transition(120)


Tak to bychom mněli, ale asi by bylo špatné kdyby naše logo se objevovalo do ticha... takže logo ozvučíme. a to příkazem Audio.bgm_play() tento příkaz má 3 parametry přičemž dva jsou povyné, první je cesta a název mém případě "Audio/BGM/Logo_pozadi.mp3" při čemž Logo_pozadi.mp3 jsem si nakopíroval do složky BGM ve složce audio. Dalším paramtrem je hlasitost, tu můžete nastavit od 0 až po 100 procent no a třetí je frekvece, tu můžete nastavit od 0 až po 150 procent. Pokud nenapíšete parametr frekvece bere se jako by jste tam napsali 100 což je normální frekvece.

poznámka: Pro odstranění vady na kráse dejte příkaz pro spuštění hudby před zobrazením grafiky, jinak se bude zobrazovat grafika v tichu a pak teprve začne hrát hudba



Kód: Vybrat vše
    Audio.bgm_play("Audio/BGM/Logo_pozadi.mp3", 80, 100)
    Graphics.transition(120)


Dobrá, tím bychom mněli začátek, teď pomalu stejným spůsobem zobrazíme naše logo. Pokud bychom otestovali co by to udělalo, zjistily bychom, že se logo zobrazilo ihned, po pomalém zobrazení pozadí. To mi ale nechcem, my chceme abychom viděli i logo se pomalu objevovat. Toho docíleme takže grafiku jakoby zamrazíme, zobrazíme obrázek, ale protože je grafika zamrzlá, neukáže se. Pak dáme zase Graphics.transition a tím se nám logo pomalu vykreslí.
Kód: Vybrat vše
    Graphics.freeze
    @autor = Sprite.new
    @autor.bitmap = RPG::Cache.title("Autor")
    @autor.x = 0
    @autor.y = 0
    @autor.z = 13
    Graphics.transition(200)


Výborně, takže máme základ. pomalu se zobrazí pozadí s puštěnou hudbou. Pak se pomalu zobrazí i jméno autor/týmu. Nyní musíme udělat čekání na klávesu. Zde použijeme jednu z dalších řídících struktur, jedná se o cyklus loop

předtím než budu pokračovat vysvětlím co je to cyklus. Cyklus je blok příkazů který se bude několikrát opakovat. V minulé lekci jsme si takový menší cyklus udělaly eventem. abychom nemusely pořád klikat eneter pro přemístění obrázku, použily jsme návěstí které nás vrátilo k bodu, kdy jsme obrázek znovu o kousek posunuly.

nyní budem opakovat jednu podmínku. Když bude podmínka splněná budem pokračovat ve scriptu dále. Pokud ale nebude, budem podmínku testovat znova. A budem jí testovat tak dlouho dokud nebude splněná. Ona podmínka bude "Byl stisknut enter nebo mezerník??" (klapka C)

K samotnému tvoření cyklu loop.
Jak jsem již psal, loop opakuje blok příkazu a ten končí vždy endem. Za loop se píše klíčové slovo do. To spusobí se má cyklus opakovat do nekonečna. (Což je náš případ.)

příklad loopu
Kód: Vybrat vše
loop do
//příkazy
end


Naše podmínka bude vypadat asi takto:
Kód: Vybrat vše
if Input.trigger?(Input::C)

radím vám někam si tuto podmínku zapsat, protože je často používána. Místo C může být jakákoliv jiná klapka, např. B což je klapka pro ESC. Také lze použít klávesi šipek DOWN, UP, LEFT RIGHT

a konečně, protože se bude cyklus opakovat do nekonečna, bude potřeba ho nějak zastavit. To dělá klíčové slovo break. Toto klíčové slovo zastaví jakýkoliv cyklus (Poznamka: O dalších cyklusech jako je for se budem bavit jindy).

před samotnou podmínkou bude ale ještě toto
Kód: Vybrat vše
      Graphics.update
      Input.update

toto bude dělat to že cyklus nachvilinku (nepozorovatelně) zastaví aby se mohla vykreslit jeden frame grafiky a aby bylo možné zaregistrovat případné stisknutí klávesy.

fajn v celku to bude vypadat takhle:

Kód: Vybrat vše
    loop do
      Graphics.update
      Input.update
      if Input.trigger?(Input::C)
        break
      end
    end


Tím jsme skoro u konce scriptu. Teď už stačí jen nechat zmizet logo s pozadím a přepnout se do menu. Opaět použijem efekt postupného zmizení/objevení.

Nejdříve si klasicky stopnem grafiku

Kód: Vybrat vše
    Graphics.freeze


Nyní necháme zmizet obrázky

Kód: Vybrat vše
    @pozadi.dispose
    @autor.dispose


a uděláme efekt

Kód: Vybrat vše
    Graphics.transition(200)


teď se již přepneme do menu a už máme skoro hotovo. Přepnutí do nějakého okna scény (main menu, game menu, battle atd...) se provádí přes celkovou promněnou $scene. Do té se uloží název třídy volané scény (z pravidla mají stejný název jako samotný script. I my budem muset volat naši scénu, proto se naše třída jmenuje stejně jako script). A protože chce scénu zobrazit přidá se na konec .new takže když chceme do menu (Název classu a scriptu Scene_Title). budem postupovat takto

Kód: Vybrat vše
    $scene = Scene_Title.new


Tím se přesunem do menu.

poznámka: Pro lepší efekt dejte po zavolání menu ještě zmrazení grafiky, a v menu později (ukážu) nastavíme krátké zobrazení. Jinak nám menu prostě "Vblikne" na obrazovku.

Tak teď se přemístíme do scriptu main. Najdeme tam příkaz

Kód: Vybrat vše
    $scene = Scene_Title.new


a nahradíme ho příkazem

Kód: Vybrat vše
    $scene = Scene_Autor.new


Poznámka: Pro zobrazení menu ještě jděte do scriptu Scene_Title a najděte příkaz Graphics.transition(). Do závorek napište 40. A dejte ok

Nyní hru spusťete. A ola lá máme zobrazení autora. Obdobným spůsobem lze udělat celé intro před hrou. Enjoy :yes:

Dotazy pište sem Dotazy

Edit: Celý script bez úprav mainu (top už snad zvládnete ne?? =))
Kód: Vybrat vše
#==============================================================================
# ** Scene_Autor
#------------------------------------------------------------------------------
#  Okno ukazující autora hry či jméno týmu
#  Autor: Legition
#  Datum: 14.1.2011
#==============================================================================
class Scene_Autor
  def main   
   
    #Zobrazení obrázku pozadí
    @pozadi = Sprite.new
    @pozadi.bitmap = RPG::Cache.title("Pozadi")
    @pozadi.x = 0
    @pozadi.y = 0
    @pozadi.z = 12
   
    #pustíme si nějakou hezkou písničku ne? ;)
    Audio.bgm_play("Audio/BGM/Logo_pozadi.mp3", 80, 100)
   
    #efektní, ale nutné zobrazení grafiky
    Graphics.transition(120)
   
    #zastavení pozadí
    Graphics.freeze
   
    #Zobrazení autora
    @autor = Sprite.new
    @autor.bitmap = RPG::Cache.title("Autor")
    @autor.x = 0
    @autor.y = 0
    @autor.z = 13
   
    #efektní zobrazení grafiky
    Graphics.transition(200)

    #čekání na stisk klávesy
    loop do
      Graphics.update
      Input.update
      if Input.trigger?(Input::C)
        break
      end
    end
   
    #příprava na přechod
    Graphics.freeze
   
    #smazání obrázků a přechod do menu
    @pozadi.dispose
    @autor.dispose
    Graphics.transition(200)
    $scene = Scene_Title.new
    Graphics.freeze
  end
end
Obrázek


Obrázek


Zpět na Skripty pro RPG Maker XP

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 3 návštevníků