PDA

Volledige versie bekijken : 1 functie voor 7 movieclips


Fazer4341
%Europe/Berlin %634 %2010, 16:13
Ha, ik probeer al een tijdje om 1 functie op 7 movieclips te gebruiken.. Leek me tamelijk eenvoudig, maar krijg het niet voor elkaar...
Lukte wel met 7 individuele EventListeners en 7x dezelfde functie..maar dat is niet de juiste manier..

Nu heb ik dit:


import caurina.transitions.*;
import flash.display.MovieClip;

var cirX:Number = 60;
var cirY:Number = 60;
var someNumx:Number = Math.ceil(Math.random() * 576);
var someNumy:Number = Math.ceil(Math.random() * 768);

object1.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag);
object2.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag);
object3.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag);
object4.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag);
object5.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag);
object6.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag);
object7.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag);

function beginDrag(evt:Event):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE,moveM C);
stage.addEventListener(MouseEvent.MOUSE_UP,endDrag );
}

function moveMC(evt:MouseEvent):void
{
Tweener.addTween(evt.currentTarget,{x:mouseX,y:mou seY,time:0.5,transition:"easIn"});
evt.updateAfterEvent();
}

function endDrag(evt:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE,mo veMC);

if (evt.currentTarget.hitTestObject(target_mc))
{
Tweener.addTween(evt.currentTarget,{x:75,
y:700,
time:1,
transition:"easeIn"});
}
else
{
Tweener.addTween(evt.currentTarget,{x:someNumx,
y:someNumy,
time:1,
transition:"easeIn"});
}
stage.removeEventListener(MouseEvent.MOUSE_UP,endD rag);
}


Ik heb zeven movieclips genaamd Object1, Object2....Object7 en een target_mc. Als ik er een aanklik moet ie de muis volgen, totdat ik de muis weer los laat. Als dat loslaten in de buurt van de target_mc is moet ie daarheen springen. Zo niet kiest ie een eigen x en y random..

Het gekke is zoals hieronder werkt het prima..maar dit moet korter kunnen...


import caurina.transitions.*;

var cirX:Number = 60;
var cirY:Number = 60;
var someNumx:Number = Math.ceil(Math.random() * 576);
var someNumy:Number = Math.ceil(Math.random() * 768);

object1.addEventListener(MouseEvent.MOUSE_DOWN,beg inDrag1);

function beginDrag1(e:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE,moveM C1);
stage.addEventListener(MouseEvent.MOUSE_UP,endDrag 1);
}

function endDrag1(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE,mo veMC1);

if (object1.hitTestObject(target_mc))
{
Tweener.addTween(object1,{x:75,
y:700,
time:1,
transition:"easeIn"});

}
else
{
Tweener.addTween(object1,{x:someNumx,
y:someNumy,
time:1,
transition:"easeIn"});
}
stage.removeEventListener(MouseEvent.MOUSE_UP,endD rag1);
}

function moveMC1(e:MouseEvent):void
{
Tweener.addTween(object1,{x:mouseX,y:mouseY,time:0 .5,transition:"easIn"});
e.updateAfterEvent();
}


En dit zelfde verhaal dan zeven keer onder elkaar...:X

Hoor het graag wat ik fout doe..nu krijg ik een stage error..#2071
Dat komt denk ik doordat ik de stage.addEventListener(MouseEvent.MOUSE_MOVE,moveM C); op de stage laat luisteren...maargoed, in de uitgeschreven versie doet ie het...

F

cornedor
%Europe/Berlin %658 %2010, 16:47
dan zou je .getChildByName kunnen gebruiken

for (var i:int = 1; i<6; i++) {
var mc:MovieClip;
mc = MovieClip(getChildByName("object"+i));
mc.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag);
}

Fazer4341
%Europe/Berlin %467 %2010, 12:13
Ha, thnx voor de reactie. Die for loop had ik zelf ook al een keer staan dat werkt wel.
Alleen om nu de focus op een objectX te houden zodat de acties goed overkomen...:X

Heb nu dit:


import caurina.transitions.*;
import flash.display.*;

var minLimitx:uint = 43;
var maxLimitx:uint = 532;
var rangex:uint = maxLimitx - minLimitx;

var minLimity:uint = 125;
var maxLimity:uint = 720;
var rangey:uint = maxLimity - minLimity;

var someNumx:Number = Math.ceil(Math.random() * rangex) + minLimitx;
var someNumy:Number = Math.ceil(Math.random() * rangey) + minLimity;

for (var i:int = 1; i<6; i++) {
var mc:MovieClip;
mc = MovieClip(getChildByName("object"+i));
mc.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag);
}

function beginDrag(e:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE,moveM C);
stage.addEventListener(MouseEvent.MOUSE_UP,endDrag );
}

function moveMC(e:MouseEvent):void
{
Tweener.addTween(e.currentTarget,{x:mouseX,y:mouse Y,time:0.5,transition:"easIn"});
e.updateAfterEvent();
}

function endDrag(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE,mo veMC);

if (e.currentTarget.hitTestObject(target_mc))
{
Tweener.addTween(e.currentTarget,{x:75,
y:700,
time:1,
transition:"easeIn"});
}
else
{
Tweener.addTween(e.currentTarget,{x:someNumx,
y:someNumy,
time:1,
transition:"easeIn"});
}
stage.removeEventListener(MouseEvent.MOUSE_UP,endD rag);
}


Alleen nu krijg ik onafgebroken deze error:

Error: Error #2071: De klasse Stage implementeert deze eigenschap of methode niet.
at Error$/throwError()
at flash.display::Stage/set y()
at caurina.transitions::Tweener$/updateTweenByIndex()
at caurina.transitions::Tweener$/updateTweens()
at caurina.transitions::Tweener$/onEnterFrame()
En die achterelkaar..onafgebroken.
Heeft toch iets met die twee te maken..


stage.addEventListener(MouseEvent.MOUSE_MOVE,moveM C);
stage.addEventListener(MouseEvent.MOUSE_UP,endDrag );


ik denk dat ie de tweenacties wil uitvoeren op de stage ipv de objectX movieclips..

??

Dauntless
%Europe/Berlin %489 %2010, 12:44
Aangezien je de eventListener aan stage hangt, verwijst e.currentTarget naar de stage en die geen setter voor y.

Je kan bv bij de startDrag() de movieclip waar op geklikt geweest is opslaan in een variabele. In plaats van e.currentTarget gebruik je in de endDrag() functie dan die variabele.

Fazer4341
%Europe/Berlin %627 %2010, 16:03
Thnx!

Het is gelukt.


import caurina.transitions.*;
import flash.display.*;

var minLimitx:uint = 43;
var maxLimitx:uint = 532;
var rangex:uint = maxLimitx - minLimitx;

var minLimity:uint = 125;
var maxLimity:uint = 720;
var rangey:uint = maxLimity - minLimity;
var someNumx:Number;
var someNumy:Number;
var clip:Object;

for (var i:int = 1; i<8; i++)
{
var mc:MovieClip;
mc = MovieClip(getChildByName("object" + i));
mc.addEventListener(MouseEvent.MOUSE_DOWN, beginDrag);

}

function beginDrag(e:MouseEvent):void
{
someNumx = Math.ceil(Math.random() * rangex) + minLimitx;
someNumy = Math.ceil(Math.random() * rangey) + minLimity;
clip = e.currentTarget;
stage.addEventListener(MouseEvent.MOUSE_MOVE,moveM C);
stage.addEventListener(MouseEvent.MOUSE_UP,endDrag );
}

function moveMC(e:MouseEvent):void
{
Tweener.addTween(clip,{x:mouseX,y:mouseY,time:0.5, transition:"easIn"});
e.updateAfterEvent();
}

function endDrag(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE,mo veMC);

if (clip.hitTestObject(target_mc))
{
Tweener.addTween(clip,{x:75,
y:700,
time:1,
transition:"easeIn"});

}
else
{
Tweener.addTween(clip,{x:someNumx,
y:someNumy,
time:1,
transition:"easeIn"});
}
stage.removeEventListener(MouseEvent.MOUSE_UP,endD rag);
}