Avatar billede baitianlong Nybegynder
01. september 2004 - 19:55 Der er 7 kommentarer og
1 løsning

gang i trigonometrien

Til de kloge matematikere, der er lidt mere nede med Cos, Sin osv. end mig (kom så)...

Jeg har et rumuhyre movieclip, som jeg duplikerer, så der er otte i en cirkel. Det har jeg fået fikset. Nu er problemet at de skal dreje rundt i en ring/cirkel, og den kan jeg ikke finde ud af. Mine forsøg får dem til at dreje rundt individuelt, ikke "som en gruppe".

Se dette billede: www.legende.dk/aliens.jpg

så ved du/i hvad jeg mener.

Jeg har dette script til at kopiere dem ud i cirklen:

onClipEvent(enterFrame) {
  if(_name == "alien1") {
      if(antal < 8 && getTimer() >= sidstetid + 250) {
    this.duplicateMovieClip("alien1_" + tal, tal);
    tal++;
    this._rotation += 360/8;
    this._x -= Math.cos((Math.PI/180) * this._rotation)*30;
    this._y -= Math.sin((Math.PI/180) * this._rotation)*30;
    antal++;
    sidstetid = getTimer();
      }
  } else...

Som den erfarne flasher kan se, har jeg endnu ikke bevæget mig væk fra Flash5 syntax (hvilket jeg har mistet meget respekt på), men det er jo blot et par linier i else, der skal skrives, så de drejer lystigt rundt i ring :)

Hva så der ?!
Avatar billede barklund Nybegynder
01. september 2004 - 23:24 #1
legende... gæt 2 gange, hvad jeg vil sige nu om dit script!

Men for at vende tilbage til dit spørgsmål - hvordan skal de dreje rundt? Skal de stå stille i cirklen og rotere om sig selv, skal de alle samme vende samme vej hele tiden men rotere om et centrum eller en kombination af disse?

Og kan vi ikke lave det om til en syntaks, der ikke er fra windows 3.1 dagene? :)

--
Morten Barklund
Avatar billede baitianlong Nybegynder
02. september 2004 - 14:31 #2
Yo, Barklund.

Altså de skal dreje rndt som hvis du tog mit billede her og drejede rundt, sådan at de hele tiden har skallen ind mod midten. Og så skal en eller to af dem "angribe" en gang imellem, men det er jo en anden historie. Jeg kunne bare putte dem ind i et mc mere og dreje det rundt, men så ryger ideen om at de skal angribe individuelt.

Det kunne også være smukt, hvis de gik lidt ind og ud (i pos og størrelse) mens de drejede rundt...

Håber du er nede med min forklaring :) Og hvis du absolut vil bruge alt det nymodens pjat, så er hele det lidt kiksede script her:

onClipEvent(load) {
    if(_name == "alien1") {
        _xscale = _yscale = 40;
        _y += 20;
        _visible = false;
        nr = 0; antal = 0; tal = 0;
        sidstetid = getTimer();
    } else {
        _xscale = _yscale = 40;
        vinkel = random(360);
        //_rotation = vinkel;
        speed = _root.levelfart;
        stepY = (Math.cos((Math.PI/180)*vinkel))*speed;
        stepX = (Math.sin((Math.PI/180)*vinkel))*speed;
    }
}
onClipEvent(enterFrame) {
    if(_name == "alien1") {
        if(antal < 8 && getTimer() >= sidstetid + 250) {
            this.duplicateMovieClip("alien1_" + tal, tal);
            tal++;
            this._rotation += 360/8;
            this._x -= Math.cos((Math.PI/180) * this._rotation)*30;
            this._y -= Math.sin((Math.PI/180) * this._rotation)*30;
            antal++;
            sidstetid = getTimer();
        }
    } else {
        //Det var her jeg ville sætte dem til at dreje rundt, som du kan se
        /*this._rotation += 360/8;
        this._x += Math.cos((Math.PI/180) * this._rotation)*30;
        this._y -= Math.sin((Math.PI/180) * this._rotation)*2;
       
        //Her er noget tidligere kode for, når de dør
        for(i = 1; i <= 10; i++) {
            if(this.hitTest(_root["skud" + i])) {
                this.play();
            }
        }
        //Her er noget tidligere kode for når de angriber
        _xscale = _yscale += 1;
        this._x += stepX;
        this._y -= stepY;
        if(this._x < -300 || this._x > 300 || this._y < -300 || this._y > 3000) removeMovieClip(this);*/
    }
}
   
Det er ikke så smukt, men du kan nok rette lidt op på det.
Avatar billede barklund Nybegynder
02. september 2004 - 15:00 #3
Du skal da til hver en tid putte dem ind i samme movieclip og rotere det. Alt andet ville da være spild af beregningskræfter. Og mens dette movieclip roterer, så kan movieclippene inden i godt bevæge sig, skalere og så videre - med mindre nogen af dem skal bryde rotationen undervejs?
Avatar billede baitianlong Nybegynder
02. september 2004 - 15:09 #4
de skal dreje rundt mens de venter. Men når een angriber, skal den forlade formationen / rotationen. Derfor skal det beregnes individuelt for dem.
Avatar billede barklund Nybegynder
02. september 2004 - 15:59 #5
Dem der bevæger sig ind mod midten - skal de ikke stadig dreje rundt om midten mens de bevæger sig indaf?
Avatar billede baitianlong Nybegynder
02. september 2004 - 16:27 #6
De er inde i midten, og så skal de forlade cirklen og angribe udaf. Men indtil een angriber skal de dreje rundt i cirkel og sådan lidt indad udad bevægelse. Se evt. her

www.legende.dk/rumspil.swf
Avatar billede baitianlong Nybegynder
02. september 2004 - 22:07 #7
For at koge det ned...

Du kan se jeg kopierer dem ud der øverst i enterFrame-scriptet. Derefter skal de dreje rundt i ring, så finder jeg ud af at få en til at angribe bagefter. Hvis du gider skrive de par linier, der skal få dem til at dreje rundt, ville det være smukt.
Avatar billede baitianlong Nybegynder
03. september 2004 - 17:41 #8
Nå men med lidt forsøg og tankekraft, lykkedes det mig at fikse det selv (på min smukke win 3.1 måde):

onClipEvent(enterFrame) {
    if(_name == "alien1") {
        if(antal < 8) {
            this.duplicateMovieClip("alien1_" + tal, tal);
            tal++;
            this._rotation += 360/8;
            this._x -= Math.cos((Math.PI/180) * this._rotation)*30;
            this._y -= Math.sin((Math.PI/180) * this._rotation)*30;
            antal++;
        } else if(antal >= 8) {
            _root.fyldt = true;
        }
    } else {
        if(_root.fyldt) {
            rotor += 7; if(rotor > 360) rotor -= 360;
            this._x =  - (40 * Math.sin((Math.PI/180)*rotor));
            this._y =  + (40 * Math.cos((Math.PI/180)*rotor));
            this._rotation = rotor;
        }
    }

Nu drejer de rundt som planlagt... :) Men tak, anyway
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