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. 
 
 

