[Flash/AS2.0] class casting?

Pagina: 1
Acties:

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
[noot: ik heb to nog toe alle Flash topics op GoT genegeerd en de search/google leverden niets op, dus ik ga er vanuit dat dit een originele vraag is ;)]

Ik ben gisteren begonnen met Flash, en ben best enthousiast over Actionscript 2.0. Nu zit ik alleen met het volgende probleem. Ik heb ergens gelezen hoe je classes extend van MovieClip en hoe je die moet instantieren. Nou dat werkt allemaal goed, maar nou zit ik met het volgende. Ik heb een class A die een MovieClip is, en een class B die ook MovieClip is. A is een container voor 10 B's:

(vergeet dat 'java', het is AS2.0 ;)
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// A.as:
class A extends MovieClip {
    
    private var bees:Array;
    
    function A() {
        bees = new Array();
    }
    
    public function init():Void {
        for(var i:Number = 0; i < 10; i++) {
            var b:B = attachMovie("B", "b" + i, getNextHighestDepth());
            b.init()
            bees.push(b);
        } 
    }
}

// B.as:
class B extends MovieClip {
    
    function B() {
    }
    
    public function init():Void {

    }
}

// frame 0 script:
this.attachMovie("A", "a",1);
a.init();


Dit werkt niet vanwege de volgende error:
code:
1
A.as: Line 11: Type mismatch in assignment statement: found MovieClip where B is required


Logisch, netjes dat AS2.0 er rekening mee houdt. Het is vrij eenvoudig te omzeilen, door "var b:B = ..." te schrijven als "var b = ...". Maar da's niet zo netjes. Is er niet een manier, zoals in C++ en Java, om een class te casten? Dan zou je zoiets krijgen:

code:
1
var b:B = (B)attachMovie("B", "b" + i, getNextHighestDepth());


Maar dat geeft dus een syntax error...

edit: Aarrgghh, ik wist dat het een overbodige vraag zou gaan worden!!

Class casten in Flash gaat dus zo:

code:
1
var b:B = B(attachMovie("B", "b" + i, getNextHighestDepth()));


|:(

[ Voor 10% gewijzigd door Genoil op 08-07-2004 11:39 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 18-05 16:30

André

Analytics dude

Je hele probleem hangt dus rondom een ), frustrerend he :D

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Ja idd...

Is er trouwens een manier om AS2.0 subclasses van MovieClip te laten werken zonder ze te hoeven toevoegen aan de Library? Ik placht zoveel mogelijk van de onhandelbare GUI van Flash af te blijven...

  • Canard
  • Registratie: Oktober 1999
  • Laatst online: 21-05 20:37
Genoil schreef op 08 juli 2004 @ 12:03:
Ja idd...

Is er trouwens een manier om AS2.0 subclasses van MovieClip te laten werken zonder ze te hoeven toevoegen aan de Library?
Wat bedoel je hier precies mee? Kun je het is duidelijker uitleggen?

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Canard schreef op 08 juli 2004 @ 12:14:
[...]

Wat bedoel je hier precies mee? Kun je het is duidelijker uitleggen?
Nou ik bedoel dat je, als je wilt dat subclasses van MovieClip goed geinstantieerd worden, je ze dan toe moet voegen aan het Library-panel van je Flash project, en daarin de linkage naar de corresponderende AS2 class moet aangeven.

Ik vroeg me af of je die "linkage" ook in Actionscript zelf te scripten valt?

[ Voor 3% gewijzigd door Genoil op 08-07-2004 13:56 ]


  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Godver...krijgt Flash eindelijk een wat fatsoenlijkere taal, krijg je gelijk die nerds van de buren op bezoek :+ Suggestie, kan je niet via Composition het gewenste effect krijgen? ( ff uit me hoofd )

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Bar extends MovieClip {

  public function doIets () {
    logger.fine( "Bar::doIets aangeroepen" );
  }

}

class Foo {
  private var b:Bar;

  public function Foo () {
    b = new Bar();
  }

  public function doIets () {
    b.doIets();
  }
}


Als je trouwens via createEmptyMovieClip werkt, voorkom je dat je via de Library je classes moet gaan linken aan Movieclips.

Nog 2 links:
Logging Framework for ActionScript 2Actionscript 2 testing framework

"You're only as good, as what you did last week."


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
oh,when? schreef op 08 juli 2004 @ 14:08:
Godver...krijgt Flash eindelijk een wat fatsoenlijkere taal, krijg je gelijk die nerds van de buren op bezoek :+ Suggestie, kan je niet via Composition het gewenste effect krijgen? ( ff uit me hoofd )

..

Als je trouwens via createEmptyMovieClip werkt, voorkom je dat je via de Library je classes moet gaan linken aan Movieclips.

Nog 2 links:
Logging Framework for ActionScript 2Actionscript 2 testing framework
nerd van de buren wheheh B) alsof ik altijd in /14 hang :P

maargoed, jij bedoelt dus zoiets:
Flash ActionScript:
1
var b:B= B(createEmptyMovieClip("b" + i, getNextHighestDepth()));


dat werkt niet :?

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Verplaats het creeeren van de movieclip naar de klasse zelf. :)

"You're only as good, as what you did last week."


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
oh,when? schreef op 08 juli 2004 @ 18:23:
Verplaats het creeeren van de movieclip naar de klasse zelf. :)
/me deze nerd van de buren vraagt om hulp!

ik kom er niet echt uit. ik heb m'n testscriptje iets uitgebreid. uitgecomment is de methode die wel werkt (mits linkage ingsteld via toevoegen an library):

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class A extends MovieClip {
    
    private var bees:Array;
    
    function A() {
        bees = new Array();
    }
    
    public function init() {
        
        for(var i:Number = 0; i < 10; i++) {
            var b:B= new B(); // dit uit als volgende regel aan
            //var b:B = B(attachMovie("B", "b" + i, getNextHighestDepth()));
            b.init(i);
            bees.push(b);
            b.draw();
        } 
    }   
}


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class B extends MovieClip {
    
    private var _r;
    
    function B() {
    }
    
    public function init(r) {
         // ja hier dus binnen de classes aanroepen???
        createEmptyMovieClip("b" + r, getNextHighestDepth());
        _r = r;
    }

    // zomaar een hexagon :) 
    function draw() {
        clear();
        beginFill(0xFFFFFF, 0);
        moveTo (_r*20 *Math.cos(Math.PI/2),_r*20 *Math.sin(Math.PI/2));
        lineStyle(2);
        for(var i:Number = 0; i <= 6; i++) {
            var x:Number = _r*20 * Math.cos(Math.PI*i/3 + Math.PI/2)
            var y:Number = _r*20 * Math.sin(Math.PI*i/3 + Math.PI/2)
            lineTo (x, y);
        }
        endFill();
    }
}


er wordt dus gewoon niets getekend...dat betekent dat de mc niet goed is geinstancieerd?

ik begin er steeds meer aan te wennen dat het op de manier MOET zoals het wel werkt, maar als je een voorbeeldje hebt van een subclass van MovieClip die gewoon werkt op de manier die je zegt, zou ik er erg blij mee zijn! B)
Pagina: 1