Make en RPG-Style Tekst System for din neste kamp
6
Del
en
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
I denne opplæringen vil vi være å skape en tekst system som ligner på det du ser i en rekke rollespill. Vår klasse vil dynamisk vise et ikon for tegnene som de snakker, og vil skrive hver tekstblokk bokstav for bokstav.
Endelig resultat Forhåndsvisning
Her er et eksempel på teksten system vi vil være å skape:
Trinn 1: Sett opp din Flash File
Opprett en ny Flash-fil (Actionscript 3). Dine filminnstillinger vil variere avhengig av spillet ditt. For denne demoen jeg setter opp min film som 500x300, med en svart bakgrunn og 30 fps
Trinn 2:. Legg et bakgrunnsbilde
Du vil mest sannsynlig være viser teksten modulen over et bilde eller en animasjon fra spillet ditt. For denne demoen jeg bare bruker et bilde jeg kastet sammen med noen av figurene fra spillene mine stående i et felt av snø.
Sett bakgrunnsbilde på et lag som heter "bakgrunn". Anmeldelser Opprett en ny MovieClip på scenen (Insert > MovieClip) som heter "RPGText." I Egenskaper Symbol sjekk "Export for Action" og sette klassen navn til "RPGText". Vi vil bruke dette klassenavnet senere å knytte koden til denne MovieClip. Klikk på OK. Hvis du ser en advarsel her at klassen definisjon ikke ble funnet, det er OK. Det betyr bare at det ikke er noen kode å linke til dette symbolet (ennå). Gi MovieClip forekomstnavnet "rpgText." Husk at når jeg snakker om "RPGText" (store bokstaver) Jeg henviser til klassen (eller MovieClip); "rpgText" (små bokstaver) er navnet på en eksempel Tegn et rektangel inni den nye RPGText Jeg gjorde min 500px bred (for å matche min film) og 100px høy. Jeg fylte den med en gradient fra # 666666 til # 999999 (mørk grå til lysere grå) Quick Tips:. Å tegne et rektangel av en bestemt størrelse, velg rektangel verktøyet og Alt-klikk på scenen. Du får opp en dialogboks der du kan angi dimensjonene på rektangelet Lag et nytt lag inne i RPGText Inne i characterIcon Import (eller tegne i Flash) et ikon for hver av karakterene i spillet som skal snakke. For denne demoen jeg gjorde en 75x75px JPG for hver av mine karakterer. Legg ikonene til ikoner Nå opprette en ny keyframe på hver ramme av etiketter Velg hver etikett keyframe én etter én, og legge en ramme etikett som svarer til navnet tegnet som vises i denne rammen. Hvis du legger til et par tomme rammer (F5) i mellom nøkkelbilder, vil det gjøre det lettere å lese ramme etiketter, bare sørg for at ditt etiketter Sørg for at hver av etikettene har et unikt navn. Hvis du har to tegn med samme navn, må du skille dem liksom ('John_L' og 'John_K' for eksempel) Go tilbake til RPGText Tegn en tale boble. Jeg trakk en enkel boble med squared hjørner, men du kan lage din ser slik du vil. Gjøre det stort nok til at det fyller det meste av bakgrunns rektangel og sitter pent ved siden av din karakter ikoner Velg snakkeboble og konvertere den til en MovieClip. (Endre > Convert to Symbol). Nå som det er en MovieClip vi kan legge en skygge filter til det. Jeg satt meg til svart, 50% styrke, 5px blur og 1px avstand Lag et nytt lag i RPGText Gjør det til en linjer dynamisk tekstfelt med forekomstnavnet "txt". Husk å legge skriften hvis du ikke bruker systemet tekst. Jeg bruker 13pt Courier Vi trenger en måte for spilleren å gå videre til neste tekstblokk når spilleren har ferdig med å lese. La oss legge til en liten "neste" -knappen i hjørnet. Lag et nytt lag i RPGText Sett knappen nederst i høyre hjørne på toppen av din tale boble. Ikke bekymre deg om å gi det en forekomst navn. Jeg skal forklare hvorfor senere Opprett en ny Actionscript-fil som heter "Main.as" og legg denne koden for å lage den tomme skall for klassen: Set Hoved som dokument klasse i Flash-fil. Hvis du ønsker en rask oppfriskning på å bruke et dokument klasse, dette Quick Tips fra Michael Williams er en av de beste forklaringene jeg har sett Hvis du bruker dette i et spill du vil trolig velge å sette det andre steder, men for nå vil vi være å legge den til Document Class. Legg denne koden til konstruktøren funksjon i Hoved Her skaper vi en todimensjonal matrise (en matrise som inneholder andre arrays) for å holde manuset til vår scene. Før du endrer noe, ta en titt på hvordan det er strukturert. Hver matrise er en egen tekstblokk som inneholder to elementer. Den første er karakterens navn og den andre er teksten som han vil si. Tekstblokkene er oppført i den rekkefølgen de vises i scenen. Den siste linjen bare sender textBlocks Gå videre og redigere denne seksjonen for å passe din scene. Vær ekstra forsiktig at karakter navn samsvarer nøyaktig med navnene du brukte for ramme etikettene i characterIcon MovieClip Vi er endelig klar til å begynne å skrive . koden for RPGText klassen Opprett en ny Actionscript-fil som heter "RPGText.as" og legge inn denne koden: Dette er bare en grunnleggende shell for klassen. Det gjør ikke noe ennå, men la oss ta en titt på hva som er der. (Merk:. Jeg bruker streken i mine variabelnavn for å indikere private variabler). Siden vår _textBlocks Den kule ting om settere i Flash er at vi kan få tilgang til denne funksjonen som om den var en felles egenskap ved RPGText klassen. Som er nøyaktig hva vi gjorde på linje 21 i den største klassen i trinn 11: Legg til dette funksjon til RPGText Klasse: Dette er kjernefunksjonaliteten i klassen, der bokstaven-by-brev typing finner sted. La oss ta en nærmere titt på hva som skjer her: Legg denne funksjonen til RPGText klasse: Hovedhensikten med denne funksjonen er å fylle txt Legg merke til at denne funksjonen kan brukes med en MouseEvent som et argument, men vi setter sin standardverdien til null. Dette gir oss muligheten til å bruke denne funksjonen med en MouseEvent lytter, siden det vil akseptere hendelsen. Siden vi gi arrangementet en standardverdi kan vi også kalle funksjonen uten å sende en hendelse som vi gjør på slutten av updateText Etter fyller vi tekstfeltet, gjør vi en sjekk for å se om dette er den siste tekstblokk i rekken (hvis _currentBlockIndex Husker da vi opprettet "neste" -knappen, og jeg sa ikke å bekymre deg om å gi det en forekomst navn? La du merke til i det siste trinnet hvordan vi festet CLICK lytteren til hele RPGText MovieClip i stedet for knappen? Dette gjør det slik at spilleren kan klikke hvor som helst på MovieClip å avansere teksten. Vi trenger ikke engang på knappen, men jeg liker å sette en i så det er noen indikasjon på at du klikker for å gå videre i teksten. Dette er selvfølgelig bare en personlig preferanse av meg. Hvis du ønsker du kunne gi knappen en forekomst navn og feste KLIKK lytteren til knappen i stedet. Jeg bare finne større hit området å være enklere å bruke Tilbake til virksomheten. Legg denne funksjonen til RPGText Klasse: De tre første linjene er ganske enkel. Fjern MouseEvent lytteren, tømme tekstfeltet, og øke den _currentTextBlockIndex Linje 47 er med TEKST Neste vi bruke SPEAKER Til slutt legger vi en hendelse lytteren til å begynne å skrive på den nye tekststreng og deretter legge en KLIKK lytteren til å kjøre fillText Vi er nesten ferdig, vi trenger bare å legge til en funksjon som vil få alt i gang. Vi skal gjøre det med en offentlig funksjon som heter "startText." Siden dette er en offentlig funksjon la oss si det nær toppen av RPGText klassen, like nedenfor textBlocks Ser det kjent ut? Denne koden gjør nesten akkurat det samme som nextTextBlock Nå har vi en offentlig tilgjengelig måte å starte teksten. La oss sette den i bruk Legg til denne linjen i bunnen av hoved klassen konstruktør funksjon: Dette er bare å ringe startText funksjon inne i RPGText klassen.. Det burde få alt går Du bør være i stand til å teste filmen nå og se alt fungerer. Det er bare én ting mangler skjønt. Lyd Finn (eller opprett) en lyd å spille som teksten er å skrive på. Når du velger en lyd for dette holder det veldig kort, siden denne lyden vil spille om og om igjen som typer tekst på. En liten "boop" eller knapp klikk fungerer best for denne effekten. Importer lyden inn i biblioteket i Flash-fil, sjekk "Export for Action" og gi den klassen navnet "TypingSound." Anmeldelser For å få denne lyden til å spille trenger vi bare å legge to linjer til RPGText klassen. Først må vi på å bruke lyd. Legg til denne linjen på toppen av klassen under de tre andre private variabler: Nå hopper ned til updateText funksjon og legge til en linje som faktisk vil spille av lyden hver gang tekstoppdateringer (linje 38 er ny): Det er alt for demoen. Alt skal fungere på dette punktet, men hvis du ønsker å integrere dette inn i et spill, har du likevel fått en del arbeid foran deg. Først, avhengig av hvordan spillet er satt opp vil du sannsynligvis ønske å trekke tekstblokker ut av dokumentet klassen. Du har kanskje en Scene klasse som du bruker til å sette opp individuelle samtaler som skjer i spillet ditt, eller en Strings klasse som inneholder all teksten for hver samtale. For det andre, vil du ønsker å tenke på hvordan og når teksten modulen vises i spillet ditt. Du ønsker kanskje å legge en tween animasjon som gjør den gli inn og ut fra bunnen når en samtale starter og slutter. Du vil også være lurt å lytte til når samtalen er over, enten skjule teksten modul eller starte neste samtale. Siden vi allerede sjekket for å se om den siste tekstblokken er nådd i fillText Jeg er ikke blant disse emnene i opplæringen fordi den måten du går om disse tingene vil være svært spesifikke spillet. Dette bør være nok til å komme i gang selv. Jeg håper du likte det! Legg inn en kommentar og la meg vite hva du synes. Anmeldelser
Trinn 3: Opprett RPGText
MovieClip
av klassen
Trinn 4:. Legg en tekst Panel Bakgrunn
MovieClip. Dette vil være bakgrunnen for karakter ikoner og snakkeboble. Designe det slik du vil, men det bør dekker hele bredden på filmen og være kort nok til at det ikke dekker for mye av spillet ditt.
Trinn 5:. Tegn Ikon MovieClip
MovieClip kalt "-ikonet." Opprett en ny MovieClip på dette laget som heter "characterIcon" og gi den forekomstnavnet
MovieClip opprette to nye lag "characterIcon.": ". Etiketter" "ikoner" og Den ikoner laget vil inneholde alle dine karakter ikoner (hver på sin egen keyframe) og etiketter laget vil inneholde ramme etiketter som vi vil bruke til å vise tegnene på riktig tid.
lag, lage en ny keyframe for hver karakter. I hvilken rekkefølge de vises ikke er viktig, men sørg for at hvert ikon er plassert ved x: 0, y: 0 slik at de ikke ser ut til å hoppe rundt når du bytter tegn
Trinn 6:. Legg Frame Etiketter
lag. En rask måte å gjøre dette på er å velge alle rammer og trykke F6.
nøkkel bli foret opp med ikoner Anmeldelser keyframes.
Trinn 7:. Tegn Speech Bubble
MovieClip og opprette et nytt lag som heter "textBackground."
Trinn 8:. Tilsett dynamisk tekstfelt
MovieClip kalt "tekst". Bruk tekstverktøyet til å tegne en tekstboks. At den passer like innenfor kantene på snakkeboblen grafikken.
Trinn 9:. Tilsett Neste
Button
MovieClip kalt "-knappen." Legg til en ny knapp symbol kalt "b_next." Utforme de fire delstatene knappen din slik du vil. Jeg brukte en liten pil ned som knappen symbol fordi jeg ser at i mange kamper og anta spillere er kjent med den.
Trinn 10:. Opprett dokument Class
pakke {import flash.display.MovieClip; public class Hoved strekker MovieClip {//CONSTRUCTOR offentlig funksjon main () {}}}
Trinn 11:. Legg tekstblokkene
Klasse:
Var textBlocks: Array = new Array (["Kid", "Se, en robot"], ["Abe", "bleep -BLOOP. Jeg er en Autonomous Botanisk Engineer. Du kan kalle meg ABE. "], [" Kid "," Hi Abe. Meet Frosty the Snowman. "], [" Frost "," Happy Birthday! "], [" Abe "," BEEP-BIP. Hallo, Frosty. "], [" Abe "," Betyr dette frosken tilhører deg? "], [" Frog "," Ribbit ... "], [" Kid "," Nei jeg har aldri sett ham før Er du ikke kald frosk "], [" Frog "," Ribbit ... "]).?; rpgText.textBlocks = textBlocks;
matrise til rpgText
MovieClip (husk "rpgText "er navnet på forekomsten av RPGText MovieClip på scenen). Mer om dette senere.
Trinn 12:. Opprett RPGText Class
pakke {import flash.events.Event; import flash.events.MouseEvent; import flash.display.MovieClip; import flash.media.Sound; public class RPGText strekker MovieClip {private konst SPEAKER: int = 0; privat konst TEKST: int = 1; private Var _currentTextBlockIndex: int = 0; private Var _currentTextBlock: String; private Var _textBlocks: Array; //CONSTRUCTOR offentlig funksjon RPGText () {}}}
I klassen erklæringen er vi utvide MovieClip klasse. Vi må gjøre dette fordi denne klassen er knyttet til RPGText MovieClip i biblioteket (se trinn 3).
at vi skal bruke for å få navnet på høyttaler og teksten fra textBlocks matrisen vi satt opp i forrige trinn.
Den variable _currentTextBlockIndex
vil holde oversikt over hvilke tekstblokk Vi re tiden vise.
_currentTextBlock
vil holde selve teksten.
_textBlocks
vil holde hele utvalget av tekstblokker.
slutt, det er den tomme klassen konstruktør
Trinn 13: textBlocks
Setter Funksjon
variabelen er privat vi trenger en måte å få tilgang til den variabelen fra Hovedanmeldelser klassen hvor vi setter opp tekstblokker. Vi vil gjøre det ved å opprette en "setter" -funksjon. Legg dette til RPGText klassen rett under konstruktøren funksjon:
offentlig funksjon sett textBlocks (txt: Array): void {_textBlocks = txt;}
rpgText.textBlocks = textBlocks;
Trinn 14: Tilsett updateText
Funksjon
privat funksjon updateText (e: Hendelses): void {if (txt.text.length < _currentTextBlock.length) {txt.text = _currentTextBlock.substr (0, txt.text.length + 1); } Else {removeEventListener (Event.ENTER_FRAME, updateText); fillText (); }}
Linje 27:. Denne funksjonen godtar en hendelse som et parameter fordi vi skal kalle det ved hjelp av en ENTER_FRAME hendelse
Linje 28 : Vi sammenligner lengden (antall tegn) for tiden i txt
tekstfeltet til antall tegn i _currentTextBlock
String
Linje 29:. Hvis det er færre tegn i tekstfeltet da vi bruker substr
metode for å få alle tegn fra begynnelsen av _currentTextBlock
opptil én mer enn antall tegn for tiden i tekstfeltet. Vi legger alle disse tegnene i tekstfeltet, som har effekt av å legge til enda en karakter til slutten av teksten i tekstfeltet
Linje 31:. Hvis det er det samme antall tegn i teksten felt som i _currentTextBlock
String, fjerne ENTER_FRAME hendelse som kaller denne funksjonen
Linje 32:. Ring fillText
funksjon. Vi skal skrive denne funksjonen i neste trinn
Trinn 15:. Tilsett fillText
Funksjon
privat funksjon fillText (e: MouseEvent = null): void {txt.text = _currentTextBlock; if (_currentTextBlockIndex < _textBlocks.length-1) {addEventListener (MouseEvent.CLICK, nextTextBlock); }}
tekstfeltet med tekst fra _currentTextBlock plakater (linje 37). Hvis vi lar animasjonen spille gjennom, bør du updateText
funksjon ta seg av det, men det er godt å sørge for at ingenting gikk galt. Vi kan også koble denne funksjonen opp til vår "neste" -knappen for å tillate spillere å hoppe over tekst animasjon og omgivelser tekstfeltet med hele tekstblokk.
funksjon.
er mindre enn antall elementer i _textBlock
utvalg). Hvis ikke, legger vi et KLIKK lytteren til å utløse en funksjon som heter nextTextBlock
som vi skal skrive neste
Trinn 16:. Om det Klikk List
Trinn 17:. Tilsett nextTextBlock
Funksjon
privat funksjon nextTextBlock (e: MouseEvent): void {removeEventListener (MouseEvent.CLICK, nextTextBlock); txt.text = ""; //Fjerne teksten _currentTextBlockIndex ++; _currentTextBlock = _textBlocks [_currentTextBlockIndex] [TEKST]; //Satt teksten characterIcon.gotoAndStop (_textBlocks [_currentTextBlockIndex] [HØYTTALER]); //Setter karakter ikonet addEventListener (Event.ENTER_FRAME, updateText); //Start oppdatering teksten addEventListener (MouseEvent.CLICK, fillText);}
Var å peke på den neste tekstblokk.
konstant å få gjeldende tekststreng fra _textBlocks
array og tilordne den til _currentTextBlock
.
konstant for å få navnet på karakter. Siden karakter navn matche ramme etiketter i vår characterIcon
MovieClip vi kan bruke gotoAndStop
å sende characterIcon
MovieClip til rammen som viser det tegnet ikonet.
når MovieClip klikkes
Trinn 18:. Legg startText
Funksjon
Legger:
offentlig funksjon startText (): void {_currentTextBlock = _textBlocks [_currentTextBlockIndex] [TEKST]; characterIcon.gotoAndStop (_textBlocks [_currentTextBlockIndex] [HØYTTALER]); addEventListener (Event.ENTER_FRAME, updateText); addEventListener (MouseEvent.CLICK, fillText);}
funksjon. Det setter den gjeldende tekst og karakter ikonet, og legger til hendelsen lyttere for updateText Hotell og fillText
. Siden denne funksjonen bare kjører når teksten først starter vi ikke trenger å bekymre deg for å tømme tekstfeltet eller økes _currentTextBlockIndex
som vi gjorde i nextTextBlock
.
Trinn 19: Start startText
Funksjon
rpgText.startText ();
Trinn 20:. Legg Sound
private Var _typingSound: Sound = new TypingSound ();
privat funksjon updateText (e: Hendelses): void {if (txt.text.length < _currentTextBlock.length) {txt.text = _currentTextBlock.substr (0, txt.text.length + 1); _typingSound.play (); } Else {removeEventListener (Event.ENTER_FRAME, updateText); fillText (); }}
Trinn 21: Ta den videre
funksjon, kan du enkelt legge til noe der som håndterer slutten av samtalen.