PDA

Volledige versie bekijken : Balletje moet álleen naar links en rechts schuiven


designgirl
%Europe/Berlin %807 %2009, 20:23
Hallo allemaal!

Nou.. hier alweer een post van mij. Doe nogmaals een beroep op jullie kennis. :#

Momenteel ben ik met een balletje in Flash AS3.0 Ik heb een balletje die ik kan bewegen over het scherm. Dit gebeurt door op het balletje te klikken en te slepen. De code ziet er als volgt uit -dit scriptje werkt prima- :

cirkel1_mc.addEventListener(MouseEvent.MOUSE_DOWN, onStartDrag1);
cirkel1_mc.addEventListener(MouseEvent.MOUSE_UP, onStopDrag1);

function onStartDrag1(evt:MouseEvent):void {
evt.target.startDrag();
}
function onStopDrag1(evt:MouseEvent):void {
evt.target.stopDrag();
}



Nu wil ik er voor zorgen dat het balletje alleen van links naar rechts kan en van rechts naar links. Tevens moet hij niet verder kunnen komen dan een bepaald punt. Dus wanneer ik 2 balletjes heb, kan het 2e balletje niet over het eerste balletje komen. Er zit dus een soort van margin aan, om het zo maar te zeggen.

Ik heb begrepen dat ik het balletje een x-waarde moet opgeven? Hoe of wat precies.. kan ik niet voor elkaar krijgen. Kan iemand mij hiermee verder helpen misschien? Alvast bedankt!

ath92
%Europe/Berlin %820 %2009, 20:41
Je kunt kijken welke x de muis heeft door mouseX op te vragen. Als je dan de x van het balletje verandert aan hand van de mouseX, zou het moeten werken. Hieronder een voorbeeldscript:


cirkel1_mc.addEventListener(MouseEvent.MOUSE_DOWN, onStartDrag1);
cirkel1_mc.addEventListener(MouseEvent.MOUSE_UP, onStopDrag1);
cirkel1_mc.addEventListener(Event.ENTER_FRAME, onEnterFrame);

function onStartDrag1(e:MouseEvent):void {
e.currentTarget.aangrijpPunt = mouseX - e.currentTarget.x;
e.currentTarget.dragging = true;
}
function onStopDrag1(e:MouseEvent):void {
e.currentTarget.dragging = false;
}

function onEnterFrame(e:Event):void{
if(e.currentTarget.dragging){
e.currentTarget.x = mouseX - e.currentTarget.aangrijpPunt;
if(e.currentTarget.x > (MAX_X){
e.currentTarget.x = MAX_X;
} else if (e.currentTarget.x < MIN_X){
e.currentTarget.x = MIN_X;
}
}
}


Dit zou moeten werken, misschien dat je e.currentTarget nog moet datatypen naar movieClip (op de een of andere manier weet ik dat nooit zeker :P).

Aangrijppunt is het verschil tussen mouseX en de x van het balletje wanneer die wordt aangeklikt. Als je die variabele meeneemt bij het draggen lijkt het hetzelfde als wanneer je gewoon startDrag gebruikt.

designgirl
%Europe/Berlin %832 %2009, 20:58
Hoi ath92..

Bedankt voor je snelle reactie! :)
Ik zal uitproberen of het werkt en zonodig aanpassen.

Dankje!

Jan
%Europe/Berlin %857 %2009, 21:35
Nu wil ik er voor zorgen dat het balletje alleen van links naar rechts kan en van rechts naar links. Tevens moet hij niet verder kunnen komen dan een bepaald punt.
De tweede (optionele) parameter van startDrag() is een Rectangle instance en de x, y, width en height van je rectangle zijn de grenzen waarbinnen je het object kan slepen.
startDrag(lockCenter:Boolean = false, bounds:Rectangle = null):void
Dit vervangt de oudere manier uit AS2:
startDrag([lockCenter:Boolean], [left:Number], [top:Number], [right:Number], [bottom:Number]) : Void

Groeten;
Jan

designgirl
%Europe/Berlin %707 %2009, 17:58
Nou.. nogmaals bedankt! Heb alleen nog geen tijd kunnen vinden om het toe te passen. Mocht ik vast komen te zitten dan is het te lezen :p

Groeten,
Eefje