Avatar billede dr_tim Nybegynder
13. juli 2001 - 14:14 Der er 18 kommentarer og
1 løsning

HitTest Problemer!


http://www.escalator.nu/game/
(Se swf beskrivelse nederst i spørgsmålet)

Jeg eksperimenterer med at lave et \"spil\" i et isometrisk view (Set skråt oppefra).
Men når jeg bruger Flash 5\'s indbyggede colission-check, hitTest, får jeg problemer.
HitTest tjekker om 2 objekter overlapper hinanden, eller rettere, om 2 objekters Bounds (yderrammer) overlapper hinanden.

Så hvis et objekt er en cirkel eller en trekant, vil dens Bound altid være en rektangel.
Det vil sige hvis man laver et hitTest på 2 cirkel formede objekter, kan de kollidere inden de rent fysiskt kolliderer, p.g.a at deres firkantede (usynlige) outline kolliderer.

Og det er heri problemet er, da jeg i mit isometrisk view, overhoved ikke har nogle \"lige\" rektangeler.

Hvis jeg bare kunne rotate en rektangel, og bound\'en ville følge med, ville alt være godt.

Men det ser ud til at man skal kode sig ud af problemet, med omfattende og (tyngende) koordinat-checks.

Er der nogen der har en god idé til en løsning?

-----------
Swf beskrivelse:

Tag jer ikke af min beta-beta swf... den er bare på test-basis.
Tryk rundt om manden, for at gå i forskellige retninger.
Det hvide felt under manden er hans \"kolissions-felt\", og det andet hvide felt på banen er et andet \"kollisions-felt\" som skal lægges \"under\" objekter på banen.
Hvis man går hen mod feltet, ser man i nederste venstre hjørne, om han kolliderer eller ej (yes/no),
Og man ser tydeligt at det er objekternese Bounds og ikke objekterne selv, der kolliderer.

------

Avatar billede Slettet bruger
13. juli 2001 - 14:27 #1
Hvis du vil undgå at kode dig ud af det kunne du jo smutte under hvor gærdet er højest ;-)

Jeg tænkte på om du kunne lave din rektangel af flere små objekter, og sætte din HitTest på hverenkelt objekt. .. Altså forme et rektankel af bittesmå objekter med hitfelter, så kan du indkredse dit usynlige område væsenligt... - Det var bare et indfald, - kan du følge mig ??

Http://Diktator.dk
Avatar billede dr_tim Nybegynder
13. juli 2001 - 14:35 #2
> d!ktator
Jo, jeg har overvejet det, og kommer nok til at prøve det, men jeg tør slet ikke tænke på alle de tjeks man skal udføre på de mange små objekter der former eet, og er lidt bange for at man kommer til at stå \"inde i\" objekter.
Måske er der en god løsningen i det, hvis man tænker sig om...

Hvorfor fanden har de ikke lavet et \"shape\" kollisions tjek? :)

Fedt domænenavn iøvrigt :)
Avatar billede lingoman Nybegynder
13. juli 2001 - 14:47 #3
Jeg ville nok lave det lidt anderledes.

Først som 2D uden perspektiv men med standard hit-tests.
Derefter bruge det som et movieclip og forvrænge det så det giver det nødvendige perspektiv.

mvh Geo
Avatar billede Slettet bruger
13. juli 2001 - 14:48 #4
Hæ, hæ -Ja, det kræver lidt af et loop sideløbende at tjekke hvert objekt, men ikke umuligt...!

Du har ret, et ShapeHitTest Objekt vil være på sin plads.

Der må for fa\'en da være andre der har stødt panden mod samme mur !?

;)

Avatar billede Slettet bruger
13. juli 2001 - 14:51 #5
lingoman  -> lyder ikke tosset, men vil det virke ??

!! Men lad os nu antage at det var circler det skulle kolidere - hvordan vil du dreje den ??
Avatar billede euroman28 Nybegynder
13. juli 2001 - 14:53 #6
Jeg venter bare på det er færdigt så jeg kan komme igang med at spille
Avatar billede dr_tim Nybegynder
13. juli 2001 - 15:05 #7
>Lingoman
Et godt forslag, men jeg er ikke helt sikker på det funker...
Jeg er lige gået i gang med det her i forgårs, og jeg har lidt svärt ved at overskue konsekvenserne af den ändring..
Hvis i ser den box til venstre for det hvide felt, så kan se at jeg har begyndt at lave noget depth-tjek, så manden kommer til at stå på den rigtige side af objekter.
Så fandt jeg så ud af at for at \"swappe\" depths på manden, skulle movieclipsne have samme \"Parent\" movieclip, hvilket vil sige at manden og objekterne ligger i samme movieclip.

Ud fra din lösning kunne jeg så lave selve banen  og kollisionspunter i eet movieclip i 2d, og transformere det til det rigtige view, og så skulle have et andet movieclip hvor manden og objekterne (uden tranformering) beväger sig parallelt med banen...

Lyder det fornuftigt, eller?...


Avatar billede lingoman Nybegynder
13. juli 2001 - 15:10 #8
Jeg har ikke prøvet det i Flash, men...............

Circlerne vil automatisk følge forvrængningen og dermed blive til ellipser, perspektiv tro.

Inden 3d -Lingo blev standard i Director, havde jeg også brug for den samme effekt i Director 7.
Der blev all 3D objekter opbygget ved at forvrænge 2D rektangulare sprites med quad funktionen.

Idéen er ganske enkel og lige til, så mon ikke det er et forsøg værd?

Hvis det virker har vi et nyt \'perspectiv\' på Flash.
Virker det ej, er vi alle en smule klogere!

geo
Avatar billede lingoman Nybegynder
13. juli 2001 - 15:17 #9
dr tim og d!ktator,

I øvrigt mener jeg ikke at spekulere i at lave om på dit spil, men blot at teste for hits in en anden mere enkel opsætning.

Virker hit-testet der, ville det nok have det ønskede resultat i dit flotte værk.

mvh geo
Avatar billede dr_tim Nybegynder
13. juli 2001 - 15:22 #10
Lingoman>
Du har ret, og det plejer jeg også at gøre...
Men nu er jeg allerede i gang med at teste det på selve \"spillet\" :)
Jeg tror faktisk det kommer til at virke...

mvh, dr tim
Avatar billede dr_tim Nybegynder
13. juli 2001 - 16:04 #11
Nå!
Nu har jeg lavet det...
OG DET VIRKER IKKE! #¤#\"%!
Det så ellers meget lovende ud, men selv om at en kasse er drejet 45 grader og resizet i dobbelt width, kommer der STADIG en pæn rektangulær Bound rundt om.... på den forkerte led, selvfølgelig...

Hm.....

Avatar billede lingoman Nybegynder
13. juli 2001 - 16:15 #12
Har du husket at specificere at den skal ignorere bounds og kun bruge  Shape?

a la  this.hitTest(_root.xmouse,_root.ymouse,true)

her testes med mouse x,y, og den sidste parameter = true sørger for at Shape bliver testet.

mvh Geo
Avatar billede dr_tim Nybegynder
13. juli 2001 - 16:17 #13
>Geo

Hmm.... har godt bemärket det der shapflag, men kan ikke helt se hvordan jeg skal bruge den i min film...
Hvad bliver xmouse og ymouse brugt til i det tilfälde?
Avatar billede dr_tim Nybegynder
13. juli 2001 - 16:23 #14
>geo
this.hitTest(_root.xmouse,_root.ymouse,true)
Nu er det jo musen der bliver tjekket, men hvad skulle jeg bruge hvis det var et objekt mod et objekt...
Avatar billede lingoman Nybegynder
13. juli 2001 - 16:30 #15
Man kunne bruge target MC\'s centrum som _x,_y.
Avatar billede dr_tim Nybegynder
13. juli 2001 - 16:34 #16
>geo
Ja, det ville sikkert være ok på manden, men på større objekter ville det nok være uhensigtsmæssigt, eller hvad?...

Jeg forstår ikke helt der der shapeflag...
Er det simpelthen et spørgsmål om at man kan vælge at den bruger objektets default bound, eller at man selv kan definere et nyt et ud fra x og y (Hvilket ville være lige så nyttesløst i det her tilfælde).

Du har ellers snart fortjent dine points, Geo! :)

Avatar billede lingoman Nybegynder
13. juli 2001 - 17:13 #17
Du har 2 mulige syntakser for hit-testet.

Det ene er  1.)    mc.hitTest(targetMC)  og som vi kender kun bruger de forhadte rektangulare BOUNDS af movieClippet.

Det andet er 2.)  mc.hitTest(x, y, ShapeFlag)

Når ShapeFlag = 1 betyder det at der testes om (x,y) befinder sig indenfor movieClippets Shape, og Bounds bliver blot ignoreret.

Et eksempel er en \"cirkel\" movieClip. Vi ved jo at der følger en usynlig kasse med (BOUNDS) som lige netop indeholder cirklen (Shape).

Vi kan derfor vælge om vi vil have at et hit skal registreres når punktet (x,y) kun er indenfor Cirklen (ShapeFlag = 1),
eller allerede når punkt (x,y) er indenfor Kassen (BOUNDS) (Shapelag = 0)

Så svaret er at ShapeFlag = true/false bestemmer om det er den synlige movieClip del eller movieClippets default bounds der chekkes for et hit med punkt (x,y)

mvh Geo
Avatar billede lingoman Nybegynder
13. juli 2001 - 20:03 #18
Kommentar til
\"                    Ja, det ville sikkert være ok på manden, men på større objekter ville det nok være uhensigtsmæssigt, eller hvad?...\"

Vi kan gøre det hensigtsmæssigt!

Nu antager jeg at manden fks. ikke må gå ind i de kubiske kasser på gulvet.
Så kan vi bruge føddernes midtpunkt som punkt (x,y). Alle de kubiske kasser har jo en bund, hvis shape vi kan chekke for hits med ShapeFlag = 1.

Eller mere realistiskt kan vi da checke et punkt på højre og et punkt på ventre fod hver for sig for hits med kassebundens shape.

Vi kan gøre det endnu nemmere ved at lave højre ,ventre fod\'s  storetæer som movieClips inden i mandens movieClip. Så kan vi jo hente store tåens koordinater blot ved at spørge dem (Tæerne altså). Derefter fodres disse koordinater til hit-Test med kassenbundens movieClip med ShapeFlag = 1

Jeg håber at du kan bruge det til dit spil!

mvh Geo
Avatar billede lingoman Nybegynder
16. juli 2001 - 12:22 #19
Hej dr. Tim,

Takker for dine points!

Hvad har du besluttet dig at gøre mht. hit-Testet ?

mvh Geo
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