Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

Java - Long Keypress

Pagina: 1
Acties:

  • ZpAz
  • Registratie: September 2005
  • Laatst online: 01:10
Hallo,

Ik gebruik de Robot class om key events te simuleren (ik lees de mac-motion sensor uit), en aan de hand van de tilt druk ik een bepaalde toets in (bv als ik mn mabcook naar links scheef houd, dan moet de linker knop in worden gedrukt).

Nu doe ik dit zo dat hij elke 100ms kijkt of de waarde van de sensor een bepaalde waarde aangeeft, en als deze kleiner is dan -40 dat hij dan de linker toets moet indrukken.

Dit werkt prima, maar..... in plaats van een 'continue' druk, drukt hij elke 100 ms de toets even in. Is het ook mogelijk om de toets continue in te laten drukken?

Sommige spellen registreren blijkbaar elke toetsaanslag, en gaan die op hun gemak verwerken. Totdat ze allemaal zijn geweest, hierdoor blijven sommige spelen bv (pong) steeds de paddle naar links bewegen, ook al staat het programma ondertussen al weer uit, of tilt ik ondertussen al een andere kant op.

De code dus die ik nu gebruik voor het indrukken van een toets:

Java:
1
keySim.keyPress(KeyEvent.VK_LEFT);


keySim is dus in dit geval een instantie van de Robot class.

Ik heb al wat zitten rondgooglen, en de documentatie over Robot gelezen, maar dit leverde niets op.

Claude: "Domain patterns emerge from iteration, not generation." - Tweakers Time Machine Extension | Chrome : FF


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je spreekt jezelf tegen:
Dit werkt prima, maar..... in plaats van een 'continue' druk, drukt hij elke 100 ms de toets even in. Is het ook mogelijk om de toets continue in te laten drukken?

Sommige spellen registreren blijkbaar elke toetsaanslag, en gaan die op hun gemak verwerken. Totdat ze allemaal zijn geweest, hierdoor blijven sommige spelen bv (pong) steeds de paddle naar links bewegen, ook al staat het programma ondertussen al weer uit, of tilt ik ondertussen al een andere kant op.
Je zegt dat hij kort ingedrukt wordt, maar vervolgens leg je uit dat de knop ingedrukt blijft. Dat laatste is ook logisch - de keyPress() genereert een key down event, en zonder key up event wordt de toets dus ook nooit losgelaten.

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.


  • ZpAz
  • Registratie: September 2005
  • Laatst online: 01:10
.oisyn schreef op vrijdag 08 augustus 2008 @ 01:12:
Je spreekt jezelf tegen:

[...]

Je zegt dat hij kort ingedrukt wordt, maar vervolgens leg je uit dat de knop ingedrukt blijft. Dat laatste is ook logisch - de keyPress() genereert een key down event, en zonder key up event wordt de toets dus ook nooit losgelaten.
Volgens mij klopt dit niet, want als ik hem bv elke 1000 laat drukken, en tilt weer terug zodat ie niet meer drukt. Gaat hij niet door met drukken.

Althans dat was mijn bevinding in notepad.

Maar ik zal er morgen nog eens naar kijken. Eerst slapen

Claude: "Domain patterns emerge from iteration, not generation." - Tweakers Time Machine Extension | Chrome : FF


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:04

.oisyn

Moderator Devschuur®

Demotivational Speaker

ZpAz schreef op vrijdag 08 augustus 2008 @ 01:28:
[...]


Volgens mij klopt dit niet, want als ik hem bv elke 1000 laat drukken, en tilt weer terug zodat ie niet meer drukt. Gaat hij niet door met drukken.

Althans dat was mijn bevinding in notepad.
Dat klopt, want dat werkt niet zoals een game. Notepad kijkt niet of een knop momenteel ingedrukt is. Wat er gebeurt als jij een knop ingedrukt houdt is dat er meerdere key down events worden gestuurd - eerst na een langere pauze (de typematic delay), en daarna na korte intervallen (de typematic rate). Dit vertaalt zich naar meerdere tekens die worden getypt als jij een knop ingedrukt houdt.

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.


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik dacht juist dat de KeyPress een KeyDown en KeyUp event genereerde.

Maar anders kan je toch ook zelf een KeyDown en op het moment dat de tilt weer onder je drempel komt een KeyUp?

[edit]
Ik zie in de documentatie idd een keyRelease functie, dus als je die aanroept op het moment dat je tilt onder je drempel komt lijkt het me te doen wat je wilt.
http://java.sun.com/j2se/...obot.html#keyRelease(int)

[ Voor 40% gewijzigd door Woy op 08-08-2008 12:23 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”