Avatar billede nielyng Nybegynder
19. december 2003 - 20:50 Der er 4 kommentarer og
1 løsning

undgå det sorte, bliv på det hvide, og bevæg dimsen nedad..

Hej alle!

Nu har jeg bøvlet hele dagen med mit Script.. Jeg er ved at lave et projekt, hvor der er en dims (eller flere), der skal simulere at køre ned ad pister..

Jeg har lavet et reference-kort, hvor jeg tester på den position, som dimsen skal rykke hen til. Hvis den pixel, den vil bevæge sig hen til er sort skal den vælge en anden retning, hvis den er hvid skal den bevæge sig derhen, og kun nedad (vinkel = random(180))

Desværre, så virker det kun til dels.. En gang imellem, så bevæger dimsen sig ind i det sorte, og programmet crasher pga. en evighedslykke (der er sort hele vejen rundt).

Jeg har pt. lidt svært ved at løse problemet, så alle forsøg er MEGET velkomne!

JEg har lagt en Director fil her:

http://imv.au.dk/~nielyng/Problem/

så ALLE kan se hvordan setup'et er... Jeg har nok bare stirret mig blind på problemet, men KAN simpelthen ikke forstå, hvordan den kan bevæge sig ind i det sorte.. øv!

heeeeeelp!

Niels
Avatar billede nielyng Nybegynder
19. december 2003 - 20:51 #1
p.s: det er en Dir. mx-fil, men den burde kunne åbnes i andre versioner også!
Avatar billede nielyng Nybegynder
19. december 2003 - 20:53 #2
Til dem der ikke gidder hente filen, så ser kodens sådan her 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))
  tjekpos = point(mySprite.locH + sin((vinkel/180.0)*pi) - sprite(3).left, mySprite.locV+cos((vinkel/180.0)*pi)-sprite(3).top)
  put tjekpos
  put mysprite.loc
  put member("piste").image.getPixel(tjekpos)
  repeat while (member("piste").image.getPixel(tjekpos)=(rgb(0,0,0)))--som er sort
    vinkel = random(180)
    tjekpos = point(mySprite.locH + sin((vinkel/180.0)*pi) - sprite(3).left, mySprite.locV+cos((vinkel/180.0)*pi)-sprite(3).top)
   
    --  if nypos.intersects(sprite(3)) then
    --  vinkel = random (180)
    -- end if
  end repeat
 
 
  -- end if
 
  mySprite.locV=mySprite.locV+sin((vinkel/180.0)*pi)
  mySprite.locH=mySprite.locH+cos((vinkel/180.0)*pi)
  --mySprite.locV = mySprite.locv - 1
  --mysprite.locH = mySprite.locH - 1
end
Avatar billede nielyng Nybegynder
19. december 2003 - 21:49 #3
ok.... jeg spammer for vildt i dag..

Jeg har en formodning om, at mine begrænsede matematiske kundskaber kan være skyld i mine problemer.. Giver det problemer, at min mySprite kun skal flytte sig en enkelt pixel hver gang?

Jeg overvejer at implementere en anden løsning, hvor jeg vil undgå at regne med grader i forhold til en retning, men vælge retning ud fra, at der er 5 pixels man kan bevæge sig ind i. (dvs. random(5) så længe den pixel man vælger er sort.. når man så rykker ud af min lykke, så kan man flytte til en hvid pixel...

Andre løsningsforslag?
Avatar billede nielyng Nybegynder
20. december 2003 - 16:59 #4
ok.. Nu har jeg forsøgt begge muligheder, men koden er stadig buggy..

jeg ryger ind i et evighedsloop, der crasher Director.. wonder why?

Det gælder i øvrigt begge løsninger..
Avatar billede nielyng Nybegynder
20. december 2003 - 18:14 #5
Jeg fiksede problemet ved at tjekke 2 pixels i forvejen i stedet for 1.. det hænger sikkert sammen med min brug af cos og sin på en eller anden facon, der har med komma-tal at gøre.. anyway, så løste jeg selv problemet, og spiser mine 200 point igen.. :-)
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