Toon posts:

[GameCode] Toetsenbesturing

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig aan 'n topdown 2D arcade shooter.
Druk je left, loop je links
Druk je up+left, ga je 45 graden diagonaal omhoog & links

Mijn probleem:
Als de speler schuin loopt & de toetsen los laat, dan draait ie toch nog lekker ff horizontaal of verticaal, omdat een mens-achtige nou eenmaal niet die 2 toetsen exact tegelijk kan loslaten. Zo kun je dus niet diagonaal schieten, enzij je 't lopend doet. (Want 2 toetsen tegelijkertijd ingedrukt houden kan een mens-achtige nou eenmaal wat beter :))

Suggesties?

(Ik wil dus *niet* de FPS-manier van lopen gebruiken; left=links draaien, up=vooruit lopen)

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

hmm hoe heb je het precies in elkaar zitten? want het lijkt wel alsof hij niet eerst _alle_ keys afhandeld, en dan gaat berekenen...

het lijkt er namelijk op dat het zo gaat:

// key event (upkey los)
// verwerk key
// key event (leftkey los)
// verwerk key

dan zou je iets moeten verzinnen zodat het zo wordt:

// keyevent -> (un)registreer key
// keyevent -> (un)registreer key

// 1. begin
// verwerk keys
// teken stuff
// ff wachten (om een constante fps te krijgen oid..)
// loop -> 1

Verwijderd

Topicstarter
// ff wachten (om een constante fps te krijgen oid..)
Dat doe ik dus niet; ik geef de frame tijd (deltaTime) mee aan de Update functie; dus: x+=x*speed*deltaTime.

Hierdoor krijg ik een soort 'highres' systeem (wat op alle systemen even snel werkt); daardoor is de toetsafhandeling ook zo gevoelig. Ik kan ook geen counter maken, die bijvoorbeeld om de 100 ticks de toetsafhandeling verwerkt, omdat ik dus niet weet hoe snel 't systeem is waar ie op draait.

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

Op dinsdag 05 maart 2002 11:00 schreef daxx909 het volgende:

[..]

Dat doe ik dus niet; ik geef de frame tijd (deltaTime) mee aan de Update functie; dus: x+=x*speed*deltaTime.

Hierdoor krijg ik een soort 'highres' systeem (wat op alle systemen even snel werkt); daardoor is de toetsafhandeling ook zo gevoelig. Ik kan ook geen counter maken, die bijvoorbeeld om de 100 ticks de toetsafhandeling verwerkt, omdat ik dus niet weet hoe snel 't systeem is waar ie op draait.
met die pseudo code bedoelde ik het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
while(!stop) {
  _beginTime = currentTimeMillis();
  handleInput();
  movePlayers();
  moveEnemys();
  drawScene();
  _endTime = currentTimeMillis();
  try {
    Thread.sleep(500 - (_endTime - _beginTime));
  } catch(InterruptedException ie) {
  }
}

Hier krijg je dus ook een constante snelheid..., althands, dat is de bedoeling ;)

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class keys {
  static final int NOTHING = 0,
             UP = 1,
             DOWN = 2,
             LEFT = 4,
             RIGHT = 8;
}

public class game {
  int movement = 0;
 
  public void keyReleased(KeyEvent ke) {
    keyreg(ke,false)
  }

  public void keyPressed(KeyEvent ke) {
    keyreg(ke,true);
  }

  public void keyreg(KeyEvent ke,boolean Pressed) {
    if (ke.get(nogwat)==ke.VK_UP) {
    if (Pressed) {
      movement = movement || keys.UP;
    } else {
      movement = movement && keys.UP;
    }
    }
  }
}

zoiets moet het dus worden met de key-registratie.. heb de complete werkende versie thuis liggen, en weet zo ff niet 1,2,3 wat het precies moest zijn, maar dit moet je een idee geven hoe het ongeveer gaat...

Verwijderd

Topicstarter
Ik weet wel hoe ik die events kan binnenhalen; ik denk dat ik maar met een timer aan de slag moet ofzo, die iedere 5ms de toetsen pollt.

En dan zit ik er nog met het probleem, dat wanneer je links hebt ingedrukt en dan rechts drukt, je karakter stil staat.

Toch wel een van de meest essentiele dingen... keyboard controls. Kijk maares op http://sourceforge.net/projects/shredd (en dan rechtsmidden -> download om te zien wat ik bedoel.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 08:26

.oisyn

Moderator Devschuur®

Demotivational Speaker

ik weet niet zeker of ik je goed begrijp hoor, maar als dat niet zo is moet je het maar even zeggen

Je wilt dus je poppetje (wat klinkt dat kinderachtig :)) besturen met de pijltoetsen. Als je naar boven en naar links tegelijk ingedrukt houdt gaat ie dus ook naar linksboven. Maar je probleem is dat als je ze los laat dat je poppetje niet in die richting blijft kijken, omdat je vrijwel onmogelijk de 2 toetsen tegelijk los kunt laten?

Tja... ik denk dat je daarvoor de diagonaaltoetsen zult moeten gebruiken (7, 9, 3 en 1 zeg maar). Of bijhouden hoe lang het geleden is dat de toets is losgelaten, en als het binnen een bepaalde tijd is dan moet je m diagonaal zetten

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Bananeman
  • Registratie: Juli 2000
  • Niet online
Op dinsdag 05 maart 2002 14:12 schreef OiSyN het volgende:
Tja... ik denk dat je daarvoor de diagonaaltoetsen zult moeten gebruiken (7, 9, 3 en 1 zeg maar). Of bijhouden hoe lang het geleden is dat de toets is losgelaten, en als het binnen een bepaalde tijd is dan moet je m diagonaal zetten
Een vertraging dus, om te kijken of uiteindelijk géén toets wordt ingedrukt? Dus stel ik loop naar linksboven, en dan laat ik de cursor-omhoog en cursor-links toetsen los. Je zou na het loslaten van de cursor-omhoog toets een timer kunnen laten lopen, en als binnen een heel korte tijd ook cursor-links wordt losgelaten gebeurt er uiteindelijk helemaal niks, omdat de toetsen "neutraal" zijn. Het "poppetje" blijft dus diagonaal staan.

Kwestie van experimenteren denk ik. Als de timer te "strak" staat afgesteld krijg je het niet voor elkaar om diagonaal te blijven staan, is ie te losjes dan reageert je poppetje te sloom en raakt de speler gefrustreerd omdat ie daardoor niet secuur kan bewegen.

Motor-forum.nl


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 08:26

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op dinsdag 05 maart 2002 14:29 schreef Bananeman2002 het volgende:

[..]

Een vertraging dus
nee geen vertraging, maar een correctie na een bepaalde tijd. Ik bedoelde dus wat jij zojuist nog een keer hebt uitgelegd :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Bananeman
  • Registratie: Juli 2000
  • Niet online
Op dinsdag 05 maart 2002 14:35 schreef OiSyN het volgende:

[..]

nee geen vertraging, maar een correctie na een bepaalde tijd. Ik bedoelde dus wat jij zojuist nog een keer hebt uitgelegd :)
Hmm, nee, dan bedoelen wij toch wat anders. Een correctie zie ik niet zitten, want dan staat je poppetje eerst naar links te gapen en daarna alsnog diagonaal. Heel vreemd effect.

Ik bedoelde dus een heel korte vertraging. :)

Motor-forum.nl


Verwijderd

Topicstarter
want dan staat je poppetje eerst naar links te gapen
LOL! *D

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

entiteit, speler, anything! maar _GEEN_ poppetje!!! :)

  • Bananeman
  • Registratie: Juli 2000
  • Niet online
Op dinsdag 05 maart 2002 16:12 schreef Scorpion het volgende:
entiteit, speler, anything! maar _GEEN_ poppetje!!! :)
Entiteit = van alles, inclusief NPCs.
Speler = persoon achter het toetsenbord.

Kunnen we i.p.v. poppetje niet gesproken spreken van de Hero? (of Held, dan ;) )

Motor-forum.nl


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 08:26

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op dinsdag 05 maart 2002 14:37 schreef Bananeman2002 het volgende:

[..]

Hmm, nee, dan bedoelen wij toch wat anders. Een correctie zie ik niet zitten, want dan staat je poppetje eerst naar links te gapen en daarna alsnog diagonaal. Heel vreemd effect.

Ik bedoelde dus een heel korte vertraging. :)
ik bedoel ook een korte vertraging (als in minder dan een kwart seconde iig), en dan laat je m natuurlijk niet naar links of rechts kijken, maar diagonaal, en als blijkt dat er nog een knop is ingedrukt na die kwart seconde dan gaat die die kant op, zo niet: dan blijft ie diagonaal

daar zie je helemaal niets van :)
Op dinsdag 05 maart 2002 16:12 schreef Scorpion het volgende:
entiteit, speler, anything! maar _GEEN_ poppetje!!! :)
zie de reactie van bananeman
en een "anything" :? :P
Op dinsdag 05 maart 2002 16:20 schreef Bananeman2002 het volgende:

Kunnen we i.p.v. poppetje niet gesproken spreken van de Hero? (of Held, dan ;) )
:? :)

wat vinden jullie van: "je character" :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

Op dinsdag 05 maart 2002 17:34 schreef OiSyN het volgende:
[..]
wat vinden jullie van: "je character" :)
doe anders gewoon "sprite" :)

Verwijderd

Topicstarter
Sprite: da's ook zo onpersoonlijk! :) |:(

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11-09 08:26

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op dinsdag 05 maart 2002 17:59 schreef Scorpion het volgende:

[..]

doe anders gewoon "sprite" :)
nee want een sprite is niets meer dan een plaatje op je scherm. Das idd onpersoonlijk zoals daxx909 al zei :)

Het woord "character" heeft gewoon meer gevoel, dat die sprite op je beeldscherm ook gewoon meer is dan alleen een dom plaatje. Character heeft gewoon karakter :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Bananeman
  • Registratie: Juli 2000
  • Niet online
Op dinsdag 05 maart 2002 17:34 schreef OiSyN het volgende:

[..]

ik bedoel ook een korte vertraging (als in minder dan een kwart seconde iig), en dan laat je m natuurlijk niet naar links of rechts kijken, maar diagonaal, en als blijkt dat er nog een knop is ingedrukt na die kwart seconde dan gaat die die kant op, zo niet: dan blijft ie diagonaal

daar zie je helemaal niets van :)
Nu begrijpen we elkaar. ;)
Kunnen we i.p.v. poppetje niet gesproken spreken

:? :)
Tiepvaut ;)
wat vinden jullie van: "je character" :)
Of anders maar gewoon: The Dude, vrij naar The Big Lebowski >:)

Motor-forum.nl

Pagina: 1