Gå til innhold

Flash cs5 og actionscript 3. Hvor finner jeg koden?


Anbefalte innlegg

Jeg skal lage et maze-spill. For å gjøre koden enklere vil jeg at alle veggene skal være et samlet objekt, slik at jeg bare trenger å hitteste mot dem en gang, og ikke hver for seg. Problemet er at flash setter hitboksen i et rektangel rundt alle veggene som helhet. Figuren kan altså ikke gå mellom veggene, bare på utsiden av alle sammen.

I dette eksempelet fra adobe har de klart å unngå dette. Men jeg finner ikke all koden de har brukt. Den eneste koden jeg kan se er i game1.as. Men der er det ikke skrevet noe om hvordan opponent skal oppføre seg, eller instansieringen av objektene de har brukt. Kan ikke skjønne annet enn at dette ligger en annen plass som er skjult for meg.

flash_as3_sample_game_11.zip

Lenke til kommentar
Videoannonse
Annonse

Jeg er en renspekka nybegynner når det kommer til flash og AS3, men prøver å hjelpe uansett!

 

Vet ikke om dette hjelper, men i koden henviser hittest til selve tegningen (maze.walls.-hittestkode-), og ikke selve symbolet Maze. Den henviser til der hvor alle tegningene/blueprintsene er laget. Jeg har ikke prøvd meg på dette selv, men dersom du selv prøver å henvise koden din til bare et symbol hvor du har tegnet en maze, vil hittest kun teste om den treffer innenfor ytterpunktene til det som ligger i mazen sine ytterpunkter. Altså, det vil ikke fungere slik du ønsker.

 

Beklager, sent på dagen, men jeg prøver så godt jeg kan med de få kunnskapene jeg har!

Lenke til kommentar

Ok. Du har i allefall forstått problemet mitt. Men det du sier om at maze.wall ikke er et symbol skjønner jeg ikke. Hvor i fla-filen er disse blueprintsene? Hvor kommer "wall" inn i bildet? Det samme gjelder for så vidt square, som heller ikke er instansiert.

Forøvrig så kan det glemmes det jeg sa om opponents bevegelse da jeg nå ser at det bare er en animasjon langs en guideline

Endret av Ringstadjr
Lenke til kommentar

Se der ja, jeg har nok blandet litt.. Skylder på en sen og fuktig lørdagskveld :whistle:

 

I koden (Game.as) ser jeg at det har blitt satt opp en hittest-funksjon som søker "maze.walls"

 

if( maze.walls.hitTestPoint(square.x,square.y+square.height,true) )

Her reffererer koden til walls inni maze.

 

I selve flash-fila (1_maze.fla) har det i maze-laget blitt plassert ut et symbol "maze" med instance-navnet maze. Dersom du dobbeltklikker på det symbolet, kommer du inn og ser et symbol som er plassert der som heter Pattern som har instance-navnet walls.

 

Tilbake i Game.as ser du at den refererer til det "ytterste" instance-navnet Maze, for så å søke etter instance-navnet Walls inne i Maze.

 

Det er vanskelig å forklare eller illustrere. Men jeg prøver å si til meg selv at du kan plassere flere like symbol ute i flash-lagene. Men for å kunne bruke koder med dem må du gi det aktuelle symbolet et unikt navn.

Det er som om noen foreldre får tvillinger, de gir de forskjellige navn av en grunn ;)

Lenke til kommentar

Ok. Nå er jeg mer med. Men jeg går ut i fra at å gi navn til en instans av et objekt i flash er det samme som å gjøre det med as3-kode.

Så vidt jeg kan skjønne må det jo da tilsvare

 

"

var maze = new Maze();

 

Og inni den klassen skrive

 

var walls = new Pattern();

addChild(walls);

"

 

I tillegg har de lagt et tilsvarde labyrint-shape under walls inne i maze-klassen. Pattern-klassen er også en shape.

 

Jeg lagde to kvadrater og satte dem et stykke fra hverandre og gjorde dem til et objekt. Hittesten fungerer ved bare et kvadrat, men når jeg skal gå mellom de to fungerer det ikke.

 

Hvorfor fungerer den ene metoden og ikke den andre?

Hvorfor fungerer dette og ikke det jeg har gjort?

 

Hvorfor dette skal gå skjønner jeg fremdeles ikke.

Lenke til kommentar

Jeg fant svaret. Problemet er ikke hva de har gjort i flash. Problemet er forskjellen på hitTestObject og hitTestPoint. Førstnevnte sjekker bounding box, mens sistnevnet kan sjekke boundingbox eller spesifikke punkter.

Da var saken egentlig ganske grei. I allefall til jeg møter på neste problem

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...