PDA

Volledige versie bekijken : function in for loop?


joep
%Europe/Berlin %412 %2009, 10:54
Hallo allemaal,

Ik heb een vraagje over een funtie in een for loop zetten. Hier volgt de functie:

function locatie_func0(){
if(locatie0<240){
locatie0+=120;
} else{ locatie0 = 0
}
}
function locatie_func1(){
if(locatie1<240){
locatie1+=120;
} else{ locatie1 = 0
}
}

en zo door tot 7.

Ik heb al vanalles geprobeerd zoals.

for(y=0; y<8; y++){
function ["locatie_func"+y](){
if(["locatie"+y]<240){
["locatie"+y]+=120;
} else{ ["locatie"+y] = 0;
}
}
}
Maar dit schijnt niet te kunnen.
Iemand suggesties tips of oplossingen?? Ik hoor ze graag!!
BVD Joep

Jan
%Europe/Berlin %440 %2009, 11:33
Wat je wil kan wel, maar ik vraag me af waarom je het zo zou willen doen.
Waarom gebruik je niet gewoon een parameter in die functie?
Op die manier heb je maar 1 functie nodig:

Aangezien de functie altijd hetzelfde doet wordt die dan simpelweg:
function locatie_func(value)
{
if(value<240)
{
value+=120;
}
else
{
value = 0
}
}
Vroeger deed je:

locatie_func0();
locatie_func1();

En met deze functie:

locatie_func(locatie0);
locatie_func(locatie1);

Maar dit schijnt niet te kunnen.
Iemand suggesties tips of oplossingen?? Ik hoor ze graag!!
Als je het toch wil doen zoals in je vraag kan je niet de function declaration syntax gebruiken maar moet je het met een function literal doen:
dus ipv
function test1()
{
}
function test2()
{
}
dit:
test1 = function ()
{
}
test2 = function ()
{
}
en dan kan het wel met je blokhaken:
this["test"+i]=function()
{
}


Groeten,
Jan

joep
%Europe/Berlin %517 %2009, 13:24
Hey Jan,

allereerst bedankt. Het eersten klinkt heel erg logisch en het is idd beter als er maar een functie is.
Alleen krijg ik hem nog niet aan de gang

ik roep deze functie als volgt aan:

mc0.photo_0.mc_mask.onRollOver = function(){
ymask0 = 120;
interval0 = setInterval(locatie_func0, intervalsnelheid);
}

dat zal dan nu het volgende worden:

mc0.photo_0.mc_mask.onRollOver = function(){
ymask0 = 120;
interval0 = setInterval(locatie_func(locatie0), intervalsnelheid);
}

maar hier reageert hij niet op.

ook als ik dit doe doet hij niets:

mc0.photo_0.mc_mask.onRollOver = function(){
ymask0 = 120;
locatie_func(locatie0)
}

Mis ik iets?

Joep

joep
%Europe/Berlin %555 %2009, 14:19
Er is iets mis in die functie.
Als ik dit trace:
function locatie_func(value)
{
trace("functie");
if(value<240)
{
value+=120;
}
else
{
value = 0
}
}

traced hij hem wel.

Zet ik m hier:

function locatie_func(value)
{

if(value<240)
{
value+=120;
trace("functie");
}
else
{
value = 0
}
}

dan klopt hij niet

joep
%Europe/Berlin %564 %2009, 14:32
op een of andere manier werkt de interval nu ook niet meer

Jan
%Europe/Berlin %574 %2009, 14:47
Parameter(s) voor de functie die je aanroept in een setInterval moet je achter de tijd zetten:
Dus niet dit :
mc0.photo_0.mc_mask.onRollOver = function()
{
ymask0 = 120;
interval0 = setInterval(locatie_func(locatie0), intervalsnelheid);
}
maar wel dit:
mc0.photo_0.mc_mask.onRollOver = function()
{
ymask0 = 120;
interval0 = setInterval(locatie_func, intervalsnelheid, locatie0);
}
Kijk ook even in de help of locatie_func niet tussen quotes ("locatie_func") moet.
(Ik gebruik te weinig AS2 de laatste tijd om die details te kunnen blijven onthouden.)
Edit:
setInterval(functionReference:Function, interval:Number, [param1:Object, param2, ..., paramN]) : Number

setInterval(objectReference:Object, methodName:String, interval:Number, [param1:Object, param2, ..., paramN]) : Number


Groeten,
Jan

joep
%Europe/Berlin %646 %2009, 16:31
relax dat je me zogoed probeerd te helpen, alleen werkt het helaas nog niet.. ksnap er niets meer van..
Hij doet de functie, alleen in de functie zelf herkent hij value niet.. als ik value verander naar locatie0 doet hij het wel. maar als ik value aanhoud pak hij m niet..

Joep

Jan
%Europe/Berlin %694 %2009, 17:40
mc0.photo_0.mc_mask.onRollOver = function()
{
ymask0 = 120;
trace("locatie0= " + locatie0);
interval0 = setInterval(locatie_func, intervalsnelheid, locatie0);
}


function locatie_func(value)
{
trace("value= " + value);
if(value<240)
{
value+=120;
trace("functie");//als je deze trace niet ziet dan is value niet kleiner dan 240
}
else
{
value = 0
}
}

Groeten;
Jan