Quick Tips: Hvordan feilsøke en AS3 Feil # 1120
en
Del
Del
Share < .no> Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie som heter Hvordan fikse bugs i Flash.Quick. Tips: Hvordan feilsøke en AS3 Feil # 1203
En veldig vanlig Action feil er feil 1120, den "udefinert Eiendommen "feil. Faktisk kan dette være den vanligste compile-time feil. Årsaken er meget enkelt, men det finnes en rekke måter kan det faktisk bli indusert. Vi vil ta en rask gjennomgang av noen av de scenarier der du vil støte på denne feilen, og hvordan du løser dem.
forklaringen
Først, la oss få den generelle ideen om hva som er skjer med denne feilen. Dette vil være vår teoretiske diskusjon; vi får til mer praktiske eksempler i resten av spissen.
Du finner denne feilen oppstår når du refererer til en variabel (eller eiendom) i en linje med kode, men den variabelen ikke eksisterer. Hvis du er vant til å skrive Action i Script panel, og ikke i klasser, så ikke bli skremt av begrepet "eiendom". Jeg vil ikke komme inn i en lang diskusjon om hvorfor vi har disse to begrepene, men nok det å si at gitt den måten Action kompilerer koden fra Script panel, er en variabel faktisk en eiendom.
Hvis Action Kompilatoren kan ikke finne den eiendommen du har angitt, det flagg den med kompilatoren error 1120. Du vil se omtrent slik ut:
1120:. Tilgangs av udefinert eiendom foo
Hvor "foo" er navnet på din uakseptable egenskapsnavn.
Løse dette vanligvis så enkelt som å få navnet riktig. La oss ta en titt
Eksempel 1:. No Variable Declaration
Ta denne koden for eksempel (hvis du vil, kan du enten åpne opp "missing" eksempel prosjekt (dvs. prosjektet heter "mangler" i kilden nedlasting) eller lage dette prosjektet på egen hånd: bare lage en ny Flash-fil og et dokument klasse for det, og legg denne koden i dokumentet klasse):
pakke {import flash.display. *; public class Missing strekker Sprite {offentlig funksjon Missing () {foo = "Moo."; }}}
Compile dette FLA, og du vil få 1120: Tilgang til udefinert eiendom foo. feil, rettet mot linje 7.
Igjen, er årsaken sannsynligvis veldig klare; du aldri har erklært foo eiendom og så bruke det i linje 7 som om det allerede eksisterte skaper problemer. Løsningen er å bare deklarere variabelen. Teknisk sett kan dette finnes overalt i det aktuelle omfang. Hver av de følgende er akseptable løsninger:
Erklærer det som en parameter til metoden:
offentlig funksjon Missing (foo: String);
Erklærer det som en {foo = "Moo."} lokal variabel inne i metoden:
offentlig funksjon Missing () {var foo: String; foo = "Moo.";}
Erklærer det som et eksempel eiendom i klassen:
pakke {import flash.display. *; public class Missing strekker Sprite {private Var foo: String; offentlig funksjon Missing () {foo = "Moo."; }}}
Løsningen er avhengig av hva som er riktig å hva du prøver å gjøre. Det er ikke vanlig å erklære en metode parameter og så bare sette den i metoden kroppen, selv om det finnes tilfeller der du ønsker å påvirke parameterverdier.
Hva kan være interessant er hvordan Flash vil søke etter en variabel av navnet. Først ser det for en lokal variabel av navnet foo. Hvis man ikke ble erklært, så det ser ut på parametrene for det navnet. Hvis den ikke finner en det, ser det for en forekomst eiendom med samme navn. Hvis ingen av disse er funnet, vil du se feil 1120.
Eksempel 2: En Typo
Vårt neste eksempel vil være ganske lik. Igjen, kan du bare åpne opp "typo" -prosjektet fra nedlasting; eller lage en enkel FLA med dokumentet klasse og lime /skrive følgende kode inn i klassen; eller bare lese sammen
pakke {import flash.display *..; public class Typo strekker Sprite {var foo: String; offentlig funksjon Typo () {boo = "Moo."; }}}
Det er ikke mye som skjer her. Ideen er å erklære en egenskap kalt foo, og deretter i konstruktøren satt som til verdien "Moo.". Kjøtt av dette er på linjene 5 og 9, fremhevet ovenfor. Resten er bare dokumentet klasse teksten.
Igjen, er feilen sannsynligvis smertelig åpenbart. Og selvfølgelig er det, når det er bare to linjer med kode for å bekymre deg med. Klart vi har en skrivefeil; Vi mente å skrive:
foo =;
Og hvis du fikse skrivefeil, vil du være i stand til å kompilere FLA uten 1120 error
Selv om dette er åpenbare "Moo.". ønsker jeg å lage to notater. Den første er at skrivefeil som dette er faktisk noe vanlig og vanskeligere å utlede når du har tusenvis av linjer med kode i prosjektet. En god IDE eller tekst editor kan hjelpe deg ved å gi autofullføring eller andre typer feilsjekking, men som en failsafe Action vil også hjelpe deg ut ved å produsere feil 1120.
Det andre notatet er at feilen som Action er faktisk rapportering er at du prøver å referere til en egenskap kalt "boo", men det er ikke å finne en. I dette eksempelet har vi produsert feilen ved å innføre en skrivefeil i vår kode. Men Action ikke vet at du egentlig mente "foo"; det forutsetter at når du skriver "boo =" Moo. ";" at du mente boo, og advarer deg når den ikke finner en eiendom med det navnet.
Dette er en ganske subtil forskjell, men det er nyttig å huske på den egentlige årsaken til feilen.
Eksempel 3: Erklærte Stage forekomster
Vår siste eksempel innebærer Flash IDE spesielt, og kan trygt ignoreres hvis du ikke bruker Flash CS3 /4/5, og i stedet bruke Flash Builder med Flex Framework. Sette opp feilen vil ta noen enkle trinn.
Du kan finne problematisk prosjekt i den fasen-forekomst mappe med nedlastingspakken. Eller du kan gjenskape det på følgende måte:.
Start med en ny Flash-fil og tilhørende dokumenter klasse
I Flash-fil, tegne en figur av noe slag og gjøre det til et symbol
Velg symbolet eksempel på scenen og åpne Egenskaper-panelet, og navngi forekomsten instance_mc
Fortsatt i Flash, velger Fil >..; Publish Settings velg deretter kategorien Flash
Klikk på knappen Innstillinger ... ved siden av. "Script:". Menyen
Hvor er sier Stage: erklære automatisk scene tilfeller, sørg avmerkingsboksen ikke er valgt
Legg til følgende kode i dokumentet klassen:..
pakke {import flash.display *; public class StageInstance strekker Sprite {offentlig funksjon StageInstance () {instance_mc.rotation = 45; }}}
På dette punktet, gå videre og kjøre filmen. Du vil nok en gang få 1 120 feil.
Som du kanskje kunne gjette, slå av "Automatisk erklære scene forekomster" hadde mye å gjøre med den generasjonen av feilen. Det er et alternativ som er som standard slått på, så du vil nok ha en grunn for - og være klar over -. Slå den av
Hva er gjør hvis det er ganske selvforklarende, men jeg vil legge mine to cents. Når du har et dokument klasse (eller en egendefinert klasse knyttet til et symbol på biblioteket), strekker den klassen Sprite eller MovieClip. Den typiske regler for å skape variabler og egenskaper gjelder akkurat som alle andre klasse, men fordi du har et visuelt grensesnitt til dette objektet - Flash IDE - du kan bli implisitt legger til egenskaper ved hjelp av å tegne flere symboler på scenen og gi dem forekomstnavn .
Hvis "erklærer automatisk scene forekomster" er på, da Flash vil gå gjennom objektene lagt til scenen gjennom IDE og sett eiendomserklæringer til de aktuelle klasser for hvert symbol eksempel med et navn.
Hvis det er slått av, da Flash vil ikke gjøre noe med forekomster på scenen.
For å unngå feil, kan du bare slå dette alternativet på igjen. Alternativt kan du manuelt erklære scenen tilfeller. Hvis vi har gjort vårt dokument klasse ser slik ut:.
Pakke {import flash.display *; public class StageInstance strekker Sprite {public Var instance_mc: MovieClip; offentlig funksjon StageInstance () {instance_mc.rotation = 45; }}}
Dette vil også unngå feilen, fordi eiendommen er fortsatt erklært; det bare ikke har blitt erklært automatisk av Flash Professional.
Merk at hvis tilgangen modifier er ikke offentlig vil du få en runtime error. Jeg har ikke tenkt å gå i detalj på denne feilen; som vil være for en annen Quick Tips.
Nå, hvorfor ville du noen gang vil slå det alternativet av i første omgang? Jeg tror grunnene alle har å gjøre med å gå utover Flash som et utviklingsverktøy. Hvis du bruker Flash Builder å kode, eller ASDoc, eller integrere Flash-innhold innenfor en Flex prosjekt, kan du sette pris på konsekvensene av å skru alternativet. Hvis du slår den av, blir du tvunget til å deretter erklære egenskapene manuelt. Det motsatte er også sant: hvis du slår den på, blir du tvunget til å ikke erklære disse egenskapene manuelt
Dermed, hvis du kjører class filer gjennom ASDoc, det vil mest sannsynlig finne en referanse til en scene eksempel. , men ikke sin erklæring, og du vil få feil 1120. Slå alternativet på er en praktisk, men slå den av tvinger deg til å skrive mer "ren" kode som er mer portable og selvforsynt.
Jeg erklære dette Quick Tips Ferdig
Som mange feil, er Error 1120 enkel på hjertet, og lett å fikse når du vet hva du skal se etter. Takk for lesing, og følg med for flere debugging Tips! Anmeldelser