PDA

Volledige versie bekijken : simpele versnelling


natascha82
%Europe/Berlin %744 %2010, 18:51
Hallo allemaal!

Ik ben redelijk nieuw met AS3.0, nu heb ik een simpele beweging gemaakt, waardoor de gebruiker zelf de richting kan bepalen en de film automatisch gaat lopen, dit werkt perfect: var xcenter:int=402.5;


producten.addEventListener(Event.ENTER_FRAME, beweeg);



function beweeg(evt:Event):void{

if (root.mouseX > xcenter) producten.x+=-1;
if (root.mouseX < xcenter) producten.x+=1;
if (producten.x > 0) producten.x=-3387;
if (producten.x < -3387) producten.x=0;
}

Maar nu wil ik dat als je je muis naar rechts en links beweegt er een versnelling in komt en deze natuurlijk weer langzamer gaat als je muis er weer af haalt, dit heb ik er van gebakken:



var xcenter:int=402.5;




producten.addEventListener(Event.ENTER_FRAME, beweeg);
producten.addEventListener(MouseEvent.MOUSE_OVER, versnel);


function beweeg(evt:Event):void{

producten.x+=-1;
if (producten.x > 0) producten.x=-3387;
if (producten.x < -3387) producten.x=0;
}

function versnel(evt:MouseEvent):void{
if (root.mouseX > xcenter) producten.x+=-10;
if (root.mouseX < xcenter) producten.x+=10;



}


naar mijn idee errug logisch, maar er gebeurt niks... kan iemand aangeven wat ik fout doe? [V]

Bedankt in iedere geval!

joeribouwman
%Europe/Berlin %876 %2010, 22:02
misschien een slecht idee maar,
kun je geen soort van "hidden"(bijv een movieclip die op visible.false staat) object plaatsen die op enterframe de x en y van de muis heeft. Zodat je hiermee kan checken waar de muis is en vergelijken met de scrollbar?

ludatic
%Europe/Berlin %845 %2010, 21:17
het probleem zit hem in twee dingen:
_root.Xmouse, moet zijn stage.mouseX
Ook is MouseEvent.MOUSE_OVER maar eenmalig, dus je productenlijst zal 1 frame versnellen.
Bovendien is de versnelling nogal plotseling.
Ik zou de y waarde van de muis ook afvangen (of een hitTest doen), in de enterframe functie en als deze binnen de range van de producten is, (producten.Ymouse>-15 && producten.Ymouse<15) de versnelling doen, volgens mij ben je dan een stuk verder

ludatic
%Europe/Berlin %846 %2010, 21:18
kortom:


var xcenter:int=275.5;

producten.addEventListener(Event.ENTER_FRAME, beweeg);

function beweeg(evt:Event):void{

producten.x+=-1;
if (producten.x > 0) producten.x=-3387;
if (producten.x < -3387) producten.x=0;

if(producten.mouseY>-35 && producten.mouseY<35)
{
if (stage.mouseX > xcenter) producten.x+=-3;
if (stage.mouseX < xcenter) producten.x+=3;
}
}

:)

Crazydance
%Europe/Berlin %640 %2010, 16:21
en dan natuurlijk wel even de helft van je stage width van de benodige positie afhalen

(((0-stage.stageWidth) + _xmouse) / (stage.stageWidth/2));


als het goed is komt hier een waarde uit tussen de -1 en 1 :)

Salvago
%Europe/Berlin %663 %2010, 16:55
(((0-stage.stageWidth) + _xmouse) / (stage.stageWidth/2));
als het goed is komt hier een waarde uit tussen de -1 en 1 :)
Helaas is het niet goed ;)
bv.

(0 - 10 + 0) / (10 / 2) = -10 / 5 = -2
(0 - 10 + 10) / (10 / 2) = 0 / 5 = 0
Je zou er dus nog een 1 bij op moeten tellen.

Overigens wordt het 'midden' al opgevangen door de xcenter variabele.

jaspermuts
%Europe/Berlin %908 %2010, 22:48
Kleine toevoeging:
var xcenter:int=402.5;
Geeft dat geen error? Want 402.5 en 275.5 zijn geen int(eger)s. Integers zijn hele getallen zonder decimalen. xcenter zou van het type Number moeten zijn, wil je decimalen gebruiken.

Salvago
%Europe/Berlin %027 %2010, 01:40
Denk eigenlijk dat de Flash compiler hier niks mee doet, niet eens een warning.
Dat is een van de problemen die ik met AS heb eigenlijk, het doet 'teveel impliciet'. En dan krijg je wel eens situaties dat alles werkt, en lijkt te kloppen, maar door impliciete conversies ed. er toch een verschil ontstaat.

Code technisch klopt het natuurlijk niet, en zou er ':Number' moeten staan.

natascha82
%Europe/Berlin %794 %2010, 20:03
thanx allemaal! Het is helemaal gelukt! van die int was slordig van mij!