Avatar billede Slettet bruger
09. januar 2010 - 18:17 Der er 2 kommentarer og
1 løsning

Forskellen mellem Document class og manuel oprettelse

Hej eksperter.

Jeg har et projekt, hvor min Main.as klasse bliver initialiseret/erklæret via Document Class. Konstruktøren bliver kørt og kører koden

public function Main() {
  stage.scaleMode = StageScaleMode.NO_SCALE;
  stage.align = StageAlign.TOP_LEFT;
  baggrund = new Baggrund();
}


Dvs. [Flash]->[Main, extender MovieClip]->[Baggrund, extender Main]

Det compiler - men er ikke så hensigtsmæssigt konstrueret, da Main's konstruktør bliver kaldt hver eneste gang, en underklasse bliver kaldt. Dvs. at den går ind i en uendelig løkke.

Hvis jeg havde lavet det på den "gammeldags" måde, ville jeg ha' fjernet new-linien og ha' skrevet dette i timeline, frame 1:

var main:Main = new Main();
main.opretBaggrund(); <-- Kør kun metoden 1! gang


Problemet med koden er blot at stage.ScaleMode-kommandoerne så af ukendte årsager ikke fungerer længere og melder "TypeError: Error #1009: Cannot access a property or method of a null object reference."

Hvorfor sker dette? Burde de to erklæringstyper ikke være ens? Main.as extender jo MovieClip og de fornødne includes ER angivet Og hvordan sørger jeg så for at ha' en initialiseringsmetode, der kun kører 1 gang, uanset om der oprettes subclasses eller ej?
Avatar billede Slettet bruger
09. januar 2010 - 20:42 #1
OK, dette opklarede noget af det: http://www.kirupa.com/forum/showthread.php?p=1950401

Document class nedarver fra flash.display.Stage, mens objekter, oprettet i tidslinien, kan nedarve fra f.eks. Sprite/MovieClip.

Jeg kan dog STADIG ikke greje, hvordan funktioner i Document Class kan sparkes igang udenom constructoren (der som nævnt giver problemer når en subclass oprettes, fordi den atter engang køres og dermed går i loop).
Avatar billede Slettet bruger
09. januar 2010 - 20:45 #2
...jo, constructoren kan selvfølgelig vha. en if/true/false-sætning sættes til at køre en bestemt metode, såfremt den ikke tidligere er blevet afviklet. Men er det virkelig måden at gøre det på? Det virker lidt hovsa-agtigt
Avatar billede Slettet bruger
10. januar 2010 - 10:09 #3
Lukker... og har iøvrigt købt "Actionscript 3.0 Design Patterns" der beskriver opbygningen af OOP-programmer meget grundigt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester