Avatar billede earp Nybegynder
13. april 2002 - 02:16 Der er 17 kommentarer og
1 løsning

hitTest..

Jeg tror aldrig at jeg har brugt så lang tid på et stykke programmering som dette.

Det hele handler om at jeg har et spil hvilket indeholder nogle firkanter (tiles) hvor det er muligt at flytte sig rundt hvor man har lyst til. Men nu er jeg så igang med at lave en 'låsemekanisme' og den har jeg brugt meget tid på, men stadig er jeg ikke komme frem til et godt resultat.

Dette er funktionen der tjekker om feltet er låst og hvis det er det er det ikke muligt at gå hen på feltet (eller sådan skulle det være).

function check_closed(key) {

if (key == "down") {
_y += 2;
}
if (key == "up") {
_y -= 2;
}
if (key == "left") {
_x -= 2;
}
if (key == "right") {
_x += 2;
}

i = 1;

while(i < 57) {
   
locked = eval("_root.locked" add i);

if(this.area.hitTest(_root["maptile" add i])) {

if(locked == "yes") {

feltvar = eval("maptile" add i);

if (_root["maptile" add i].hitTest(getBounds(_root).xMax, _y, true)) {
_x -= 2;
}
if (_root["maptile" add i].hitTest(getBounds(_root).xMin, _y, true)) {
_x += 2;
}
if (_root["maptile" add i].hitTest(_x,  getBounds(_root).yMax, true)) {
_y -= 2;
}
if (_root["maptile" add i].hitTest(_x, getBounds(_root).yMin, true)) {
_y += 2;

}

}
}

i++;
}


}

}

Men som i kan se på nedenstående links er der nogensteder man bare kan gå ind i de låste felter (de lidt mørkere tiles).

http://agge.net/test/v.0.0.1.html

Nogen der ved hvordan jeg løser dette problem??
Avatar billede hoejrup Nybegynder
13. april 2002 - 10:52 #1
Du kan kun anvende this. i et onClipEvent.

function check_closed (key) {
    if (key == "down") {
        _y += 2;
    }
    if (key == "up") {
        _y -= 2;
    }
    if (key == "left") {
        _x -= 2;
    }
    if (key == "right") {
        _x += 2;
    }
    i = 1;
    while (i<57) {
        locked = eval("_root.locked" add i);
        if (this.hitTest(_root["maptile" add i]) && locked == "yes") {
            feltvar = eval("maptile" add i);
            if (_root["maptile" add i].hitTest(getBounds(_root).xMax, _y, true)) {
                _x -= 2;
            }
            if (_root["maptile" add i].hitTest(getBounds(_root).xMin, _y, true)) {
                _x += 2;
            }
            if (_root["maptile" add i].hitTest(_x, getBounds(_root).yMax, true)) {
                _y -= 2;
            }
            if (_root["maptile" add i].hitTest(_x, getBounds(_root).yMin, true)) {
                _y += 2;
            }
        }
        i++;
    }
}

/per
Avatar billede earp Nybegynder
13. april 2002 - 11:18 #2
Det er også onClipEvent ..

Hvis jeg postede hele koden ville det fylde rigeligt.


Jeg tror det er noget med disse det går galt:

if (_root["maptile" add i].hitTest(getBounds(_root).xMax, _y, true)) {
                _x -= 2;
            }
            if (_root["maptile" add i].hitTest(getBounds(_root).xMin, _y, true)) {
                _x += 2;
            }
            if (_root["maptile" add i].hitTest(_x, getBounds(_root).yMax, true)) {
                _y -= 2;
            }
            if (_root["maptile" add i].hitTest(_x, getBounds(_root).yMin, true)) {
                _y += 2;
            }

men jeg er ikke så kendt med de nye funktioner i flash MX.
Avatar billede hoejrup Nybegynder
13. april 2002 - 11:50 #3
Har du læst beskrivelsen af getBounds:

http://www.macromedia.com/support/flash/action_scripts/objects/movieclipgetbounds.html

var temp= this.getBounds();

if (_root["maptile" add i].hitTest(temp.xMax, _y, true)) {
                _x -= 2;
            }
            if (_root["maptile" add i].hitTest(temp.xMin, _y, true)) {
                _x += 2;
            }
            if (_root["maptile" add i].hitTest(_x, temp.yMax, true)) {
                _y -= 2;
            }
            if (_root["maptile" add i].hitTest(_x, temp.yMin, true)) {
                _y += 2;
            }

/per
Avatar billede earp Nybegynder
13. april 2002 - 11:55 #4
Ja det har jeg. Men jeg kan stadig ikke se hvad fejlen i mit script skulle være.
Avatar billede hoejrup Nybegynder
13. april 2002 - 11:55 #5
Har du prøvet at lave en trace?

/per
Avatar billede hoejrup Nybegynder
13. april 2002 - 11:58 #6
Hvis du kun skal evaluerer din bounding box, så skal shape flag sættes til false

eks.

if (_root["maptile" add i].hitTest(_x, temp.yMin, false)) {
                _y += 2;
            }

/per
Avatar billede earp Nybegynder
13. april 2002 - 12:16 #7
Det gør ingen forskel om shapeflag er sat til true eller false.
Avatar billede earp Nybegynder
13. april 2002 - 12:33 #8
Hvis du har tid vil du så have .fla filen og se om du kan ordne det?
Avatar billede hoejrup Nybegynder
13. april 2002 - 12:54 #9
Prøv med

if (_root.maptile[i].hitTest(_x, temp.yMin, false)) {
_y += 2;
}

/per
Avatar billede hoejrup Nybegynder
13. april 2002 - 12:56 #10
Jeg anvender kun Flash 5 i øjeblikket, men jeg kan godt pakke min Flash MX trial ud.

Hvis det ikke lykkedes nu, så kan du sende den til info@kazoma.dk.

/per
Avatar billede hoejrup Nybegynder
13. april 2002 - 12:58 #11
Der er et eksempel her: http://www.flash5magic.com/pdfs/f5m_09.pdf

/per
Avatar billede hoejrup Nybegynder
13. april 2002 - 13:06 #12
Nej, det er skam rigtig nok:

if (_root["maptile" add i].hitTest(_x, temp.yMin, false)) {
                _y += 2;
}

Du skal huske at hitTest skal sidde på det object der flyttes sig.

if ( objectDerFlytterSig[i].hitTest(_root.stårFastObject) {
}


/per
Avatar billede earp Nybegynder
13. april 2002 - 13:08 #13
Det virkede slet ikke :((

Jeg sender den nu, det tager lige et stykke tid da den fylder en del (2,5 mb).
Avatar billede earp Nybegynder
13. april 2002 - 13:12 #14
Det er _root["maptile" add i] som står fast.

Hvordan vil du så skrue den sammen?
Avatar billede hoejrup Nybegynder
13. april 2002 - 13:15 #15
Prøv med

if (this.hitTest(_root["maptile" add i])) {
                _y += 2;
}

/per
Avatar billede earp Nybegynder
13. april 2002 - 13:29 #16
Nu virker det fandme!!

Jeg gjorde hvad du sagde og satte en variabel til at tjekke hvilken tast der blev holdt nede og nu virker det :)))

Kom med et svar og du skal ha nogle point :))

if (this.hitTest(_root["maptile" add i]) && key == "right") {
                _x -= 2;
            }
            if (this.hitTest(_root["maptile" add i]) && key == "left") {
                _x += 2;
            }
            if (this.hitTest(_root["maptile" add i]) && key == "down") {
                _y -= 2;
            }
            if (this.hitTest(_root["maptile" add i]) && key == "up") {
                _y += 2;
            }
Avatar billede hoejrup Nybegynder
13. april 2002 - 13:40 #17
Ok! Her er der et svar. :-)

/per
Avatar billede hoejrup Nybegynder
13. april 2002 - 13:41 #18
Det er bare alletiders at det virker nu.

/per
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