Quick Tips: Hvordan feilsøke en AS3 Feil # 1203
Del
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 # 1 120
I denne hurtig Tip, vil vi diskutere forvirrende AS3 error 1203 "no konstruktør funnet", som dukker opp uten provokasjon og er heller dessverre formulert. Vi vil undersøke scenario der det vil dukke opp, og hvordan å fikse det
Trinn 1:. En obligatorisk, men noe unyttig beskrivelse av Error 1203
Først her er språket av feilen:
1 203: Ingen standardkonstruktør funnet i grunnklassen flash.display. BitmapData
Det er vanskelig å bryte dette ned i vanlig engelsk. Så la oss neste trekk på et scenario som produserer denne feilen
Trinn 2:. En Busted Prosjekt
Du kan finne dette prosjektet i nedlastingspakken, i mappen " ferska Et dokument klasse som heter Busted.as BustedBitmap klassen strekker BitmapData, og så bruker vi den til å mate en Bitmap objekt, som deretter legges til scenen. En annen klasse fil som heter BustedBitmap.as Så, i BustedBitmap konstruktøren, kaller vi perlinNoise () og dermed vi automatisk har noe interessant i pikseldata, slik at vi kan se noe med en gang når du viser på scenen. Nå, gå videre og teste filmen. Du vil få Error 1203 pekte på linje 4 av BustedBitmap.as Så hva skjedde? Den store tingen å huske på er at vi skriver en klasse som er en underklasse av en annen klasse (BitmapData i dette tilfellet). Også huske på at når en klasse er instansiert, er konstruktøren kalles som en del av den "nye" prosess. Hvis du ikke egentlig skrive en konstruktør, vil Actioninnebære en for deg. Det vil se slik ut:. Hvor "[NameOfClass]" vil matche navnet klassen På samme måte, hvis du skriver en underklasse, og kaller ikke super () i det, så Action vil innebære at samtalen for deg, så vel. Det vil se slik ut: Legg merke til at det skjer på den første linjen, og er rett og slett et kall til super uten argumenter. Til slutt, vi komme til roten av problemet. Hvis underklasse utelater en eksplisitt oppfordring til super, og din super konstruktør har krevd parametre, så din implisitt oppfordring til super ikke leverer de nødvendige parameterne. Man skulle tro at et argument mismatch feil kunne fange dette, men mener at siden det ikke er noen kode faktisk skrevet for å gjøre mismatch, kan Action bare klage på at mangelen på en standardkonstruktør. I vår eksempel BustedBitmap forlenge BitmapData, som har en konstruktør definert i dokumentasjonen som så: De to første parametrene er nødvendig, og vi er ikke forsyne dem Løsningen er, når du forstår problemet, svært enkel. Du må eksplisitt kaller super konstruktør, i hvert fall hvis det er nødvendig parametere. Med andre ord, i vår BustedBitmap klassen, vil dette etter markerte linjen løse problemet. Og som vil gjøre det. Som en lærevillig øyeblikk, vil jeg gjerne legge til at, når utvide en annen klasse, er det vanligvis en god idé å inkludere eksplisitt oppfordring til super. Selv om det ikke er noen parametre i det hele tatt, kreves eller på annen måte (som i Sprite eller MovieClip), kan en eksplisitt samtale erklære intensjon og bevissthet om innholdet i underklassen. Mer praktisk, eksplisitte samtaler gi deg en mulighet til å kjøre noen kode før kallet til super, noe som kan være nyttig i visse situasjoner Enda en feil avmystifisert; utfordringen for dette er at den virkelige årsaken til feilen er ganske begravet. Når du blir hendig med en spade, skjønt, er fix lett nok. Takk for lesing, og være klar for flere debugging tips. Anmeldelser
". Den består av følgende (som du kan bruke til å gjenskape dette prosjektet hvis du foretrekker en hands-on tilnærming):
En FLA navnet Busted.fla
. Den er tom, men er knyttet til dokumentet klassen beskrevet neste.
. Dette utvider Sprite og slett oppretter en forekomst av klassen beskrevet neste, og legger det til scenen
Innholdet i klassen er som følger:..
Pakke {import flash.display *; public class Busted strekker Sprite {offentlig funksjon Busted () {var bmp: Bitmap = new Bitmap (ny BustedBitmap ()); addChild (bmp); }}}
. Som nevnt tidligere, utvider denne BitmapData, og har som formål å være en BitmapData som automatisk forsyner seg med noen Perlin støy. Innholdet er:
pakke {import flash.display. *; public class BustedBitmap strekker BitmapData {offentlig funksjon BustedBitmap () {perlinNoise (100, 100, 2, 1024, falsk, falsk, 7, true); }}}
. Og linje 4 er ...
offentlig funksjon BustedBitmap () {
Trinn 3: hva er dette, da
Offentlig funksjon [NameOfClass] () {}
offentlig funksjon [NameOfSubclass] () {super (); //Annen eksplisitt koden i underklasse konstruktør}
BitmapData (bredde: int, høyde: int, transparent: Boolean = sant, fillColor: uint = 0xFFFFFFFF)
Trinn 4:. Det er så enkelt som ...
Pakke {import flash.display *; public class BustedBitmap strekker BitmapData {offentlig funksjon BustedBitmap () {super (600, 400); perlinNoise (100, 100, 2, 1024, falsk, falsk, 7, true); }}}
Trinn 5:. ... Og det er alt