18. april 2002 - 18:09
Der er
28 kommentarer og 1 løsning
Script, der sender et objekt hen hvor der klikkes.
Hej. Er der en dygtig as'er, der kan hjælpe mig med et script, der sender et objekt hen hvor musen klikker på baggrunden. noget hen ad: på baggrunden laver jeg eksempelvis et mc, der fylder det hele og skriver: onClipEvent(mouseDown) { var_x=_root._xmouse; var_y=_root._ymouse; } onClipEvent(enterFrame) { if(var_x != getProperty(_root.objekt, _x)) { if(var_x < getProperty(_root.objekt, _x)) { setProperty(_root.objekt, _x, _x+5); } else {setProperty(_root.objekt, _x-5); } if(var_y != getProperty(_root.objekt, _y)) { if(var_y < getProperty(_root.objekt, _y)) { setProperty(_root.objekt, _y, _y+5); } else {setProperty(_root.objekt, _y-5); } } Og sådan kunne jeg blive ved... Men det kan garanteret gøres meget nemmere. Lad mig høre hvordan !?!!?
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Slettet bruger
18. april 2002 - 18:21
#1
Du kan vel bare gøre sådan; onClipEvent (mouseDown) { _root.myObject._x=_root._xmouse; _root.myObject._y=_root._ymouse; }
18. april 2002 - 18:38
#2
Nej, for som du kan se i mit "script", er ideen at den skal bevæge sig derhen over en række frames. Ikke bare hoppe derhen !!!
18. april 2002 - 19:47
#3
skal den bevæge sig hen til det klikkede punkt ved konstant hastighed eller med noget easing ? mvh geo
18. april 2002 - 19:53
#4
Der behøver ikke være "easing". Men hastigheden skal være konstant, uanset afstanden, dvs. den skal tilpasse antal frames herefter, eller som jeg er inde på ovenfor, ...gå lige langt i hver frame indtil den når målet/muse-klik-positionen, så skal den stå stille indtil, der klikkes et nyt sted. Den kan du klare på 10 linier, geo ! (o;
18. april 2002 - 20:12
#5
onClipEvent(mouseDown) { target_x = =_root._xmouse; target_y = =_root._ymouse; moveObject = true; } onClipEvent(enterFrame) { if (moveObject) { speed = 5; distance_x = target_x - this._x; distance_y = target_y - this._y; //find ny _x if (Math.abs(distance_x)< speed ) { this._x = target_x; done_x = true; } else { direction_x = distance_x / Math.abs(distance_x); this._x += speed*direction_x; } //find ny _y if (Math.abs(distance_y)< speed ) { this._y = target_y; done_y = true; } else { direction_y = distance_y / Math.abs(distance_y); this._y += speed*direction_y; } //tjek om vi er færdige if ( done_x && done_y ) { moveObject = false; } } } mvh geo
18. april 2002 - 20:19
#6
Hvis man bruger cos() og sinus() funktioner kan man også få den til at bevæge sig i en lige linje til destinationen, men idéen er den samme :)
18. april 2002 - 20:52
#7
Den er ikke helt god ! Den kan ikke lide dine = tegn med mellemrum øverst. Jeg har skiftet dem ud med et enkelt (= must be followed by operand). Desuden kører dette script på skrå, så længe den "kan" og derefter ligeud !!!!! Du må i gang med cosinus, hvis du gider. /o;
Slettet bruger
18. april 2002 - 21:38
#8
Skal objektet samtidigt dreje sig i den retning der trykkes, eller skal den foreblive samme stilling ??
18. april 2002 - 21:39
#9
onClipEvent(load) { function distance(x1,y1,x2,y2) { x = x2 - x1; y = y2 - y1; radius = Math.pow(Math.pow(x,2) + Math.pow(y,2),1/2 ); return radius; } } onClipEvent(mouseDown) { target_x = _root._xmouse; target_y = _root._ymouse; afstand = distance(this._x,this._y,target_x,target_y); steps = afstand/speed; _xStep = (target_x - this._x)/ steps; _yStep = (target_y - this._y)/ steps; moveObject = true; } onClipEvent(enterFrame) { if (moveObject) { nyAfstand = distance(this._x,target_x,this._y,target_y); //find ny _x, _y if ( nyAfstand < speed ) { this._x = target_x; this._y = target_y; moveObject = false; } else { this._x += _xStep; this._y += _yStep; } } }
18. april 2002 - 21:42
#10
ups! onClipEvent(load) { function distance(x1,y1,x2,y2) { x = x2 - x1; y = y2 - y1; radius = Math.pow(Math.pow(x,2) + Math.pow(y,2),1/2 ); return radius; } } onClipEvent(mouseDown) { target_x = _root._xmouse; target_y = _root._ymouse; afstand = distance(this._x,this._y,target_x,target_y); steps = afstand/speed; _xStep = (target_x - this._x)/ steps; _yStep = (target_y - this._y)/ steps; moveObject = true; } onClipEvent(enterFrame) { if (moveObject) { nyAfstand = distance(this._x,this._y,target_x,target_y); //find ny _x, _y if ( nyAfstand < speed ) { this._x = target_x; this._y = target_y; moveObject = false; } else { this._x += _xStep; this._y += _yStep; } } }
18. april 2002 - 21:44
#11
Samme stilling. Det må være noget i retning af (90-Math.atan2(lodret_afstand, vandret_afstand)) er vinklen den skal bevæge sig efter, indtil den er der ???????????
18. april 2002 - 21:45
#12
Der skal også stå speed = 5; lige efter onClipEvent(load) {
18. april 2002 - 21:45
#13
Math.pow() virker ikke på negative tal... hvorfor ikke bare bruge x*x i stedet for Math.pow(x,2)?
18. april 2002 - 21:48
#14
Math.pow() har en bug i Flash 5 player build 3 men burde virke nu. Jo, man kan da også skrive x*x + y*y
18. april 2002 - 21:49
#15
rettelse>> build 30
Slettet bruger
18. april 2002 - 21:49
#16
Eller - onClipEvent (load) { destination_x = _x; destination_y = _y; move = 6; } onClipEvent (mouseDown) { destination_x = _root._xmouse; destination_y = _root._ymouse; } onClipEvent (enterFrame) { fromX = destination_x; fromY = destination_y; temp_x = _x-fromX; temp_y = _y-fromY; strTarget = -Math.atan2(temp_x, temp_y); if (Math.sqrt((temp_x*temp_x)+(temp_y*temp_y))>move) { _y -= move*Math.cos(strTarget); _x += move*Math.sin(strTarget); } }
18. april 2002 - 21:49
#17
Du har vist ret Barklund (sorry Lingoman)... Den duer kun når værdierne bliver højere !
18. april 2002 - 21:51
#18
legende.dk vilken player version er der tale om ?
18. april 2002 - 21:53
#19
Det er flash 5. Diktators script virker perfekt. Tusind tak for hjælpen til jer alle 3 (o; Så skal der svares
18. april 2002 - 21:55
#20
Ellers tak, jeg vil ikke have nogen :)
Slettet bruger
18. april 2002 - 21:57
#21
Det vil jeg heller ikke - behold dem selv!
18. april 2002 - 21:58
#22
Jeg prøver lige: onClipEvent(load) { speed = 5; active = 0; } onClipEvent(mouseDown) { target_x = _root._xmouse; target_y = _root._ymouse; sign_x = (target_x-_x>0) ? 1 : -1; sign_y = (target_y-_y>0) ? 1 : -1; dir = Math.atan2(target_y-_y,target_x-_x); step_x = speed*Math.cos(dir) step_y = speed*Math.sin(dir) active = 1; } onClipEvent(enterFrame) { if (active) { if (sign_x*(_x+step_x) > sign_x*target_x || sign_y*(_x+step_y) > sign_y*target_y) { _x = target_x; _y = target_y; active = 0; } else { _x += step_x; _y += step_y; } } } Sådan rent ud af hovedet - virker det? /Barklund
18. april 2002 - 21:59
#23
Damn... glemte at opdatere... pizz os! :o(
18. april 2002 - 22:02
#25
Kun hvis mit script virker... Hvis ikke jeg kan skrive det i hånden i første forsøg, så er jeg faldet af på den og har ingen point fortjent!!!
Slettet bruger
18. april 2002 - 22:12
#27
Jeg ville nu ikke stille op mod Barklund hvis det endeligt skulle være ;-)
18. april 2002 - 22:18
#28
Nej, det er blot en sjov lille flash med begge jeres scripts.
19. april 2002 - 23:24
#29
Nå, men så mange tak for hjælpen.
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.