Avatar billede Slettet bruger
10. oktober 2005 - 23:17 Der er 5 kommentarer

attachMovie - hvordan virker denne kode?

Hej eksperter.

Jeg har følgende uddrag af min actionscript-kode:

for (i=0; i<husarray.length; i++) {
  var husby = attachMovie("byikon", "by"+i, this.getNextHighestDepth(), {_x:bykoordinatx[i], _y:bykoordinaty[i]});
  husby.duharklikket = i;
  husby.onRelease = function() {
    trace(”Du trykkede på by nummer :”+this.duharklikket);
  }
}

for (i=0; i<7; i++) {
  if (_root["by"+i].ejerskab == true) {
    _root["by"+i].gotoAndStop(2);
  }
}

På min scene oprettes en række huse. På hver af disse huse kan brugeren klikke vha. onRelease-funktionen, der så fortæller, hvilken by der er blevet klikket på.
Jeg har i initialiseringen oprettet en række objekter, også kaldet ”by”, der har en række private-variabler tilknyttet – bl.a. en, der hedder ”ejerskab”.

Alt virker fint – lige bortset fra sidste kodelinie: _root["by"+i].gotoAndStop(2);
Vælger jeg variabel-listen under afviklingen, kan jeg se at f.eks. movieclippet ”by0” og ”by1” eksisterer (_level0.by0). Problemet er blot, at jeg ikke kan referere til det. I tilfældet her vil jeg gerne gå til frame 2 i movieclippet, der ligger i root, men intet sker.

Kan nogen forklare mig hvorfor?

Herudover, kan nogen forklare mig, hvad der sker i attachMovie-linien? Hvorfor skal den sættes lig variablen husby for at husene kan identificeres individuelt?
Avatar billede kragekjaer Praktikant
11. oktober 2005 - 09:52 #1
Denne her linie  if (_root["by"+i].ejerskab == true) {

kan skrives som  if (_root["by"+i].ejerskab) {
Avatar billede kragekjaer Praktikant
11. oktober 2005 - 09:54 #2
Prøv med dette:

for (i=0; i<7; i++) {
var by=_root["by"+i]
  if (by.ejerskab) {
    by.gotoAndStop(2);
  }
}
Avatar billede Slettet bruger
11. oktober 2005 - 16:30 #3
Hmm - desværre.

For lige at vende tilbage til min oprindelige tekst, har jeg prøvet at hardcode følgende linie nedenunder for-løkken:

_root.by0.gotoAndPlay(2);  Den virker ikke.

MEN: hvis jeg udskifter øverste del til følgende:

for (i=0;i<husarray.length;i++) {
  var husby = attachMovie("byikon", "by"+i, this.getNextHighestDepth(), {_x:bykoordinatx[i], _y:bykoordinaty[i]});
  if (_root["by"+i].ejerskab) {
    husby.gotoAndStop(2);
  }...

...så kan jeg godt gå til frame 2, blot ved at referere til til "husby" istedet for f.eks. "by0".
Det løser dog imidlertid ikke problemet helt - for på et tidspunkt ønsker jeg at køre en slags "refresh-screen" funktion, der viser en række byer (læs: går til frame 2 i MC'et).
Jeg har 7 byer, navngivet by0, by1 etc. - og vi er enige om, at disse navne er instance-navnene, genereret oppe i attachMovie-linien, ikke sandt?
Men i nævnte kode refereres til variablen "husby", og det er bl.a. det jeg ikke forstår. For når først jeg er ude af for-løkken, hvordan kan jeg så referere til "husby" igen?
Avatar billede Slettet bruger
11. oktober 2005 - 20:57 #4
Årsagen er fundet! Mine instances må ikke hedde det samme som min klasse-objekter.

Nå, men der er stadig nogle point, der skal uddeles – jeg kan stadig ikke greje, hvorfor var husby = attachMovie("byikon", "by"+i ...osv ser ud som den gør.

Altså: En instance, kaldet f.eks. ”by0” oprettes ud fra library-elementet ”byikon”. Men hvorfor sættes sætningen lig ”var husby”? Jeg var nødt til at gøre det, for på løkke-vis at kunne holde styr på, hvilken by jeg klikkede på - men hvorfor?
Og samtidig, husby.duharklikket ? Det ligner jo nærmest en objekt-variabel – men jeg har jo ikke defineret nogen klassestruktur ved navn ”husby”...?
Avatar billede kragekjaer Praktikant
12. oktober 2005 - 02:17 #5
var husby:MovieClip = attachMovie("byikon", "by"+i, this.getNextHighestDepth(), {_x:bykoordinatx[i], _y:bykoordinaty[i]});

Skulle det nok ha været, det er pænere....
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