Avatar billede nielyng Nybegynder
17. december 2003 - 20:41 Der er 6 kommentarer og
1 løsning

kollissioner og valg af retning for sprite..

Hej Alle!

Jeg har siddet og fedtet lidt med en collision-detection, som egentlig fungerer fint.. med en lille undtagelse..
Meningen er, at en dims skal bevæge sig nedad (vinkel<180), men ændre retning, når det rammer "væggene" på mit kort.

Problemet er nu, som det ser ud, at mySprite godtnok ændrer retning, når der er kollission, men tager derefter ikke hensyn til, og der er væg der hvor den flytter hen, hvorefter den i næste enterframe (hvor der igen bliver kaldt move) sættes en ny random vinkel.

Hvordan bygger jeg den ind i en loop, så den IKKE flytter sig, hvis det betyder, at den flytter sig ind i væggen? Den skal jo sådan set lave random, indtil den finder en retning, der får den ud af væggen igen?
mit Script ser således ud:

on move me
  if mySprite.intersects(sprite(3)) then
    --Den næste sætning skal bygges ind i en loop,
    --der tester på om den valgte retning er ok (=ikke sort)
    vinkel = random(180)

 
  end if
 
  mySprite.locV=mySprite.locV+sin((vinkel/180.0)*pi)
  mySprite.locH=mySprite.locH+cos((vinkel/180.0)*pi)
end

Håber spørgsmålet blev bare nogen lunde klart..
Avatar billede kanding Nybegynder
18. december 2003 - 09:02 #1
du skal finde ud af hvilken retning du er i gang med at flytte dig i ved at finde ud af om loch bliver større ved hvert ryk eller mindre. Det samme for locV.
Når du har den information, kan du så lave random tal inde for et kriterie der passer.
Avatar billede nielyng Nybegynder
18. december 2003 - 12:14 #2
Den retning jeg er i gang med at flytte har jeg i forvejen lagt i en variabel vinkel, og er retningen i grader.

Problemet er imidlertid, at det ikke er helt lige vægge, men at kortet, man bevæger sig rundt på minder mere om en slags "grotte".

min figur SKAL altid bevæge sig nedad eller vandret(dvs. vinkel<180), men aldrig ind i væggene.

Indtil videre fungerer det nogenlunde, bortset fra, at den jo ikke håndterer at den SKAL bevæge sig ud af væggen igen. 

Det kort, jeg bruger som reference er sort/hvid og selvfølgelig matte-ink. Kan jeg på nogen måde med Lingo tjekke om figurens nye potentielle position ligger inde i denne sprite? Jeg forsøgte med et point, men kan ikke lave point.intersects(Sprite(3))...
Avatar billede kanding Nybegynder
18. december 2003 - 12:31 #3
hmm... kan ikke lige forestille mig dit setup, men prøv med:

within funktionen
Avatar billede nielyng Nybegynder
18. december 2003 - 12:53 #4
ok, det vil jeg lige prøve.. ellers, så smider jeg lige et link til vores reference-map, så du kan se hvordan det ser ud..
Avatar billede nielyng Nybegynder
18. december 2003 - 17:43 #5
Nej, det virker stadig ikke helt.. den forstår heller ikke handleren within:

on move me
if mySprite.intersects(sprite(3)) thin
vinkel = random(180)
nypos = point(mysprite.locV + mySprite.locV+sin((vinkel/180.0)*pi), mysprite.locH + mySprite.locH=mySprite.locH+cos((vinkel/180.0)*pi))

repeat while (nypos.within(Sprite(3))
    vinkel = random(180)
    nypos = point(mysprite.locV + mySprite.locV+sin((vinkel/180.0)*pi),  mysprite.locH + mySprite.locH=mySprite.locH+cos((vinkel/180.0)*pi))
end repeat

hmm.... det er liiidt tricky, for den siger handler not found in object.. samme med intersects..

problemet er nok, at mit reference-kort er et stykke grafik, som jeg bruger til at teste på, om figuren intersecter med (altså kun det sorte område)..

for at give et indtryk af, hvad det er for et map, jeg bruger har jeg lagt det her:

http://imv.au.dk/~nielyng/piste.GIF

hmmm.. er der en måde, hvorpå jeg kan teste farven af mit reference-map på et point?

/Niles
Avatar billede nielyng Nybegynder
18. december 2003 - 18:45 #6
ok, det kan man gøre med getPixel()... tror jeg da...
Avatar billede nielyng Nybegynder
19. december 2003 - 20:42 #7
Ok... det virker nææææsten... men nu er jeg træt af at sidde med det her, så jeg åbner et nyt spørgsmål til 200 points til den, der kan fikse mit problem..
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
Kurser inden for grundlæggende programmering

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