Toon posts:

[DirectorMX] rare while loop

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik snap er helemaal niets meer van....
Momenteel ben ik met een spelletje bezig, een schietspelletje...
Bij dat spelletje mogen er maximaal 4 kogels in het scherm zichtbaar zijn.

Nu heb ik de volgende code daarop bedacht:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  if geschoten < 4 then
    if keypressed(space) then -- schieten
      i = 0
      repeat while i < 3 
        put "begin loop", i
        if kogels[i] = 0 then
          kogels[i] = 1 -- geschoten
          geschoten = geschoten + 1
          teller = i + 7 -- 6 sprites verder dan teller in kogel.
          sprite(teller).loch = sprite(6).loch + 10
          sprite(teller).locv = sprite(6).locv 
          put i, kogels[i]
          set i = 3
        end if
        put i
        i = i + 1     
      end repeat
    end if  
  end if


kortom zolang i < 3 dan word de eerste kogel die nog vrij is (die is 0) en die schiet die weg. Omdat er dan geschoten is zet ik i op 3 (later word ie vanzelf 4) en zou die dus moeten stoppen...
echter omdat ik nogsteeds meer 1 keer kon schieten heb ik wat debug dingetjes tussen gezet (de putjes) en wat zie ik. Als ik 1 keer op de spatie druk krijg ik als output het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-- "begin loop" 0
-- 0 1.0000
-- 3
-- "begin loop" 0
-- 0
-- "begin loop" 1
-- 1 1.0000
-- 3
-- "begin loop" 0
-- 0
-- "begin loop" 1
-- 1
-- "begin loop" 2
-- 2 1.0000
-- 3



hij schiet er dus 3 tegelijk weg en let dus heel niet op dat ik die i al verhoogt heb in de if naar 3

wat doe ik fout????

edit: iets duidelijke output met source verandering

[ Voor 14% gewijzigd door Verwijderd op 30-12-2003 13:41 ]


Verwijderd

Topicstarter
Ok, ik heb het probleem gevonden.... nu de oplossing nog.....

als je de spatiebalk langer dan 1 miliseconde (ongeveer) inhoud, dan denkt director fijn dat je nog een keer drukt!!!

nu nog een manier vinden om het keypressed tijdelijk uit te schakelen

Verwijderd

Topicstarter
niemand die hier de oplossing voor weet???
er moet toch een soort instelling zijn dat ie maar 1 aanslag per ... pakt...

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
dit zit in een HEEL oude game van me:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
on exitFrame
  if p1 then
    if not keypressed("s") then sprite(1).width = sprite(1).width + 1
  end if
  if p2 then
    if not keypressed("l") then sprite(2).width = sprite(2).width + 1
  end if
  if keypressed("s") then 
    p1 = true 
  else 
    p1 = false
  end if
  if keypressed("l") then 
    p2 = true 
  else 
    p2 = false
  end if
  if sprite(1).width = the stage.rect.width then reset("Player 1 Wins")
  if sprite(2).width = the stage.rect.width then reset("Player 2 Wins")  
  
end


zo moet je echt wel de hele key up AND down doen voordat iets doet.

edit: dit is eigenlijk het hele spel ;).

[ Voor 17% gewijzigd door hobbit_be op 31-12-2003 15:56 ]