Avatar billede baitianlong Nybegynder
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 !?!!?

Avatar billede 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;
}
Avatar billede baitianlong Nybegynder
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 !!!
Avatar billede lingoman Nybegynder
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
Avatar billede baitianlong Nybegynder
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;
Avatar billede lingoman Nybegynder
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
Avatar billede lingoman Nybegynder
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 :)
Avatar billede baitianlong Nybegynder
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;
Avatar billede Slettet bruger
18. april 2002 - 21:38 #8
Skal objektet samtidigt dreje sig i den retning der trykkes, eller skal den foreblive samme stilling ??
Avatar billede lingoman Nybegynder
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;
  }
}
}
Avatar billede lingoman Nybegynder
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;
  }
}
}
Avatar billede baitianlong Nybegynder
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 ???????????
Avatar billede lingoman Nybegynder
18. april 2002 - 21:45 #12
Der skal også stå

speed = 5; lige efter onClipEvent(load) {
Avatar billede barklund Nybegynder
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)?
Avatar billede lingoman Nybegynder
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
Avatar billede lingoman Nybegynder
18. april 2002 - 21:49 #15
rettelse>> build 30
Avatar billede 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);
    }
   
}
Avatar billede baitianlong Nybegynder
18. april 2002 - 21:49 #17
Du har vist ret Barklund (sorry Lingoman)... Den duer kun når værdierne bliver højere !
Avatar billede lingoman Nybegynder
18. april 2002 - 21:51 #18
legende.dk
vilken player version er der tale om ?
Avatar billede baitianlong Nybegynder
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
Avatar billede lingoman Nybegynder
18. april 2002 - 21:55 #20
Ellers tak, jeg vil ikke have nogen :)
Avatar billede Slettet bruger
18. april 2002 - 21:57 #21
Det vil jeg heller ikke - behold dem selv!
Avatar billede barklund Nybegynder
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
Avatar billede barklund Nybegynder
18. april 2002 - 21:59 #23
Damn... glemte at opdatere... pizz os! :o(
Avatar billede baitianlong Nybegynder
18. april 2002 - 22:00 #24
Det vil Barklund (have points)...

Se evt. http://www.eksperten.dk/spm/145782

(o; Du skal bare svare.
Avatar billede barklund Nybegynder
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!!!
Avatar billede baitianlong Nybegynder
18. april 2002 - 22:07 #26
Bedøm selv på:

http://www.legende.dk/Movie1.html

Barklund vs. Diktator
Avatar billede Slettet bruger
18. april 2002 - 22:12 #27
Jeg ville nu ikke stille op mod Barklund hvis det endeligt skulle være ;-)
Avatar billede baitianlong Nybegynder
18. april 2002 - 22:18 #28
Nej, det er blot en sjov lille flash med begge jeres scripts.
Avatar billede baitianlong Nybegynder
19. april 2002 - 23:24 #29
Nå, men så mange tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester