Avatar billede baitianlong Nybegynder
09. februar 2002 - 00:01 Der er 6 kommentarer og
1 løsning

Tilfældig bevægelse ?

Hvordan får jeg et objekt til at dukke op et tilfældigt sted, og derefter køre rundt på skærmen
(indenfor et bestemt område) i en tilfældig bevægelse.  Randomize ??????????
Avatar billede barklund Nybegynder
09. februar 2002 - 00:35 #1
Beskriv venligst den ønskede bevægelse...

Skal den hoppe til et tilfældigt sted hele tiden?
Skal den køre i cirkler?
Skal den køre i en retning og ændre denne med små tilfældige ryk?
Sinus?
Logaritme?
Eksponential?

/Barklund
Avatar billede baitianlong Nybegynder
09. februar 2002 - 01:09 #2
'Du kender jo  teknikken bag det lille spil jeg roder med.
Den skal køre ligesom den gør her:

http://www.legende.dk/realdeal    -  Tryk på play legende shooting game

Men den har jeg jo lavet med et guidelayer,
den skal "finde på" en ny bevægelse hver gang. Skal vi sige at den skal finde på et tilfældigt punkt på skærmen, og så køre der hen ! og gentage den funktion  !!
Avatar billede barklund Nybegynder
09. februar 2002 - 01:37 #3
Men den skal vel ikke bevæge sig direkte derhen? Det skal vel være "blødt" og med "runde former" (sådan kan vi lide dem... :o)

(Hvorfor skal man skyde kasser med udråbstegn?)

Hvis den blot skal bevæge sig til et punkt med konstant hastighed bruger vi den samme gode gamle konstruktionsmodel med et start_clip der skjules  og duplikeres... Lav et mc med dit target, kald dets instance for "target" og skriv:

onClipEvent(load) {
  if (_name eq "target") {
      _visible = 0;
  } else {
      speed = 5;
      movieWidth = 400;
      movieHeight = 200;
      w = _width/2;
      h = _height/2;
      var start_pos = random(4);
      _x = (start_pos == 0) ? -w :
            (start_pos == 1) ? w+Math.random(movieWidth-w) :
            (start_pos == 2) ? movieWidth+w :
            (start_pos == 3) ? w+Math.random(movieWidth-w) : null;
      _y = (start_pos == 0) ? h+Math.random(movieHeight-h) :
            (start_pos == 1) ? -h :
            (start_pos == 2) ? h+Math.random(movieHeight-h) :
            (start_pos == 3) ? movieHeight+h : null;
      function next() {
          next_x = w+Math.random(movieWidth-w);
          next_y = h+Math.random(movieHeight-h);
          var angle = Math.atan2(next_y-_y,next_x-_x);
          x_change = speed*Math.cos(angle);
          y_change = speed*Math.sin(angle);
          x_dir = (x_change > 0) ? 1 : -1;
          y_dir = (y_change > 0) ? 1 : -1;
      }
      next();
  }
}
onClipEvent(enterFrame) {
    if (_name eq "target") {
        if (!_root.my_target) {
            this.duplicateMovieClip("my_target",1);
        }
    } else {
        if (x_dir*_x < x_dir*next_x && y_dir*_y < y_dir*next_y) {
            _x += x_change;
            _y += y_change;
        } else {
            next();
        }
    }
}

Det minder meget om det andet script for kuglen, men ideen er jo lidt det samme med at udregne en slutposition og sigte efter denne - her skal den bare blive ved...

Virker det?
Avatar billede baitianlong Nybegynder
09. februar 2002 - 02:50 #4
Det går ikke helt godt.

Målet er væk ?!, men der er jo i forvejen noget script på målet.

onClipEvent(load) {
function hit() {
    sub_mc.gotoAndPlay("hit_" add ++hits);
    }
}

onClipEvent(enterFrame) {
if (hits == 4) {
    _root.gotoAndStop("frameLabel_2");
}
}

Men det skulle vel heller ikke gøre noget. Jeg emailer dig lige testspillet.
Avatar billede barklund Nybegynder
09. februar 2002 - 22:41 #5
Jeg er på vej på ferie og væk en uges tid - haster det, så smid det efter nogen andre i stedet... Men hvis din egen kode skal tilføjes mit script:

onClipEvent(load) {
  if (_name eq "target") {
      _visible = 0;
  } else {
      speed = 5;
      movieWidth = 400;
      movieHeight = 200;
      w = _width/2;
      h = _height/2;
      var start_pos = random(4);
      _x = (start_pos == 0) ? -w :
            (start_pos == 1) ? w+Math.random(movieWidth-w) :
            (start_pos == 2) ? movieWidth+w :
            (start_pos == 3) ? w+Math.random(movieWidth-w) : null;
      _y = (start_pos == 0) ? h+Math.random(movieHeight-h) :
            (start_pos == 1) ? -h :
            (start_pos == 2) ? h+Math.random(movieHeight-h) :
            (start_pos == 3) ? movieHeight+h : null;
      function next() {
          next_x = w+Math.random(movieWidth-w);
          next_y = h+Math.random(movieHeight-h);
          var angle = Math.atan2(next_y-_y,next_x-_x);
          x_change = speed*Math.cos(angle);
          y_change = speed*Math.sin(angle);
          x_dir = (x_change > 0) ? 1 : -1;
          y_dir = (y_change > 0) ? 1 : -1;
      }
      function hit() {
          sub_mc.gotoAndPlay("hit_" add ++hits);
      }
      next();
  }
}
onClipEvent(enterFrame) {
    if (_name eq "target") {
        if (typeof(_parent.my_target).toLowerCase() != "movieclip") {
            this.duplicateMovieClip("my_target",1);
        }
    } else {
        if (x_dir*_x < x_dir*next_x && y_dir*_y < y_dir*next_y) {
            _x += x_change;
            _y += y_change;
        } else {
            next();
        }
        if (hits == 4) {
            _root.gotoAndStop("frameLabel_2");
        }
    }
}

/Barklund
Avatar billede baitianlong Nybegynder
09. februar 2002 - 22:50 #6
Det kører ikke helt for mig det her. Men når du engang får tid, så prøv at kigge lidt på den fil jeg har sendt dig, og ganske enkelt put scriptet ind det rigtige sted.
-Jeg var nu ikke ude på at belemre dig.

-God ferie.

Med venlig hilsen
Avatar billede baitianlong Nybegynder
20. april 2002 - 17:38 #7
Håber det var en god ferie. Lukker lige spørgsmålet. -Det kom aldrig til at virke !!!. Vi må tage den en anden gang.
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