webForumDet fria alternativet

Pekare i sctionscript

5 svar · 474 visningar · startad av oskob

oskobMedlem sedan maj 20021 558 inlägg
#1

Haj!

Finns det något smidigt sätt att göra en pekare till ett värde hos ett object?
Alltså när jag skriver var hej = this.myMc._x så ska inte hej tilldelas värdet i myMc._x utan peka till det värdet.
Går detta att göra på något smart sätt?

Det jag försöker uppnå är att jag gjort en funktion som ska animera det objekt man skickar till den. Just nu måste jag skriva såhär:

 
animera(this.myMc);

function animera(target) { 
target._x = blalba;
}

Men jag vill kunna skriva:

 
animera(this.myMc._x);
function animera(target) { 
target = blalba;
}

Tack på förhand!

BlixtsystemsMedlem sedan maj 2005704 inlägg
#2

Jag har svårt att tänka mig en situation där det vorde en bra lösning, men om du använder en sträng är det klart att man kan parsa ut vad som är referensen till ett mc och vad som är en egenskap för det.

animera("myMc._x");
function animera(target:String) { 
    var mc:String=str.substr(0,str.lastIndexOf("."));
    var prop:String=str.substr(str.lastIndexOf(".")+1);
    this[mc][prop]=100;
}

Skall du absolut ha med "this" får du parsa bort det ut strängen också.

Jag är lite nyfiken varför inte detta funkar:

animera(this.myMc, "_x");
function animera(target:MovieClip, prop:String) { 
   target[prop]=100;
}
oskobMedlem sedan maj 20021 558 inlägg
#3

nej this behöver inte alls vara med :)

Det jag vill slippa är att ha en massa if-satser som kollar vad det är som ska animeras:

function animera ( target, property, endPos) {

   if ( property == "x" ) {
      currentPos = target._x;
   }else if (property == "y" ){
      currentPos = target._y;
   }else if (property == "width"){
      currentPos = target._width;
   }

   och så vidare för alla propertys man kan tänkas vilja animera
}

Kanske finns något ännu smartare sätt men ditt verkar ju lösa biffen så jag får ge det ett försök!

spangoMedlem sedan juni 20008 205 inlägg
#4

Dynamiska programmeringsspråk räddar dagen! Du kan komma åt vilken property som helst genom att indexera objektet med en sträng. Istället för att skriva t.ex. objekt._x kan du skriva objekt["_x"]. Naturligtvis kan den strängen ligga i en variabel, så det går utmärkt att säga t.ex:

function animera ( target, property, endPos) {

   currentPos = target[property];

   // gör nåt 
}
animera(mc, "_width", 666);
animera(mc, "_height", 1337);
BlixtsystemsMedlem sedan maj 2005704 inlägg
#5

oskob skrev:

nej this behöver inte alls vara med :)
Kanske finns något ännu smartare sätt men ditt verkar ju lösa biffen så jag får ge det ett försök!

Du läste inte hela mitt svar ser jag :)
Den andra kodsnutten gör det du vill.

oskobMedlem sedan maj 20021 558 inlägg
#6

Oj jaha! Jag trodde du menade att det inte fungerade, men det gjorde det ju alla tiders :D

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)