Java-Gaming.org    
Featured games (79)
games approved by the League of Dukes
Games in Showcase (477)
Games in Android Showcase (107)
games submitted by our members
Games in WIP (535)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Starting out with Java2D/AWT  (Read 1359 times)
0 Members and 1 Guest are viewing this topic.
Offline ido

Junior Member





« Posted 2009-05-30 10:46:34 »

Hi,
I am trying to improve my knowledge of Java2D, and I started with a trivial example that for now is just drawing a line on a black background and exits when the user presses escape.

The code can be found here.

Yet even with this simple exaple I'm getting some strange problems:

1. It doesn't react on every key press - I normally have to press quite a few time until it registers a keypress. I've run it through a debugger and it indeed only enters the processKeyEvent function after several key-presses.
2. The window is bigger than the picture, even though they are both defined to be the same size. this problem was because of a silly typo Sad

Any idea what I've done wrong? 

-Ido.

Offline ido

Junior Member





« Reply #1 - Posted 2009-05-30 14:29:48 »

I've made several mistakes in that example, but I think I've now corrected all of them, tell me what you think:
New version.

Offline Darrin

Junior Member


Projects: 1



« Reply #2 - Posted 2009-05-30 14:53:52 »

Usually I just add a key listener to the jframe and then override the three functions, the one for escaping the app is usually keypressed.  Or perhaps even easier.. 

public class Example extends JFrame implements KeyListener{

Not sure I've seen it set up as you have.

check out....  http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html

    public void keyTyped(KeyEvent e) {
        displayInfo(e, "KEY TYPED: ");
    }

    /** Handle the key pressed event from the text field. */
    public void keyPressed(KeyEvent e) {
        displayInfo(e, "KEY PRESSED: ");
    }

    /** Handle the key released event from the text field. */
    public void keyReleased(KeyEvent e) {
        displayInfo(e, "KEY RELEASED: ");
    }

Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline ido

Junior Member





« Reply #3 - Posted 2009-05-30 14:58:23 »

As far as I know the 2 are the same, at least that's what the documentation says.

My current code works well now.

Offline Mike

JGO Ninja


Medals: 71
Projects: 1
Exp: 5 years


Java guru wanabee


« Reply #4 - Posted 2009-05-30 15:56:19 »

As far as I know the 2 are the same, at least that's what the documentation says.

My current code works well now.

Yep, it's the same, you're doing it "the old way" which is fine as well. Listeners can be very handy though and it's easy to implement. It also prohibits a lot of issues one normally can make while treating the events directly.

If you come from a C++ background it'll take some getting used to but once you do it'll be really easy.

My current game, Minecraft meets Farmville and goes online Smiley
State of Fortune | Discussion thread @ JGO
Offline irreversible_kev

Junior Member





« Reply #5 - Posted 2009-05-30 18:47:37 »

Imagine you have two threads:
1) AWT Thread (which deals with mouse and key events) and
2) Main Thread.

And imagine that this is what happens when you run your program:

Main Thread: new Example().mainLoop();
Main Thread: mainLoop();
Main Thread: while( !keys[KevEvent.VK_ESCAPE] ) { ... }; // keys[KevEvent.VK_ESCAPE] is false, so continue looping.
Main Thread: while( !keys[KevEvent.VK_ESCAPE] ) { ... }; // keys[KevEvent.VK_ESCAPE] is false, so continue looping.
Main Thread: while( !keys[KevEvent.VK_ESCAPE] ) { ... }; // keys[KevEvent.VK_ESCAPE] is false, so continue looping.

Now imagine that the escape key is pressed:
AWT Thread: processKeyEvent(KeyEvent e) -> e.getID() is KeyEvent.KEY_PRESSED -> keys[KevEvent.VK_ESCAPE] is now true.
AWT Thread: processKeyEvent(KeyEvent e) -> e.getID() is KeyEvent.KEY_RELEASED -> keys[KevEvent.VK_ESCAPE] is now false.

Main Thread: while( !keys[KevEvent.VK_ESCAPE] ) { ... }; // keys[KevEvent.VK_ESCAPE] is false, so continue looping.
Main Thread: while( !keys[KevEvent.VK_ESCAPE] ) { ... }; // keys[KevEvent.VK_ESCAPE] is false, so continue looping.
Main Thread: while( !keys[KevEvent.VK_ESCAPE] ) { ... }; // keys[KevEvent.VK_ESCAPE] is false, so continue looping.

Basically I am saying the code you have might have unpredictable results due to threading issues.

After a KEY_PRESSED event, IF mainLoop() is not called before the subsequent KEY_RELEASED event then mainLoop() will never see keys[KevEvent.VK_ESCAPE] as true.
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

E.R. Fleming (15 views)
2014-07-29 03:07:13

E.R. Fleming (5 views)
2014-07-29 03:06:25

pw (39 views)
2014-07-24 01:59:36

Riven (39 views)
2014-07-23 21:16:32

Riven (26 views)
2014-07-23 21:07:15

Riven (28 views)
2014-07-23 20:56:16

ctomni231 (59 views)
2014-07-18 06:55:21

Zero Volt (50 views)
2014-07-17 23:47:54

danieldean (42 views)
2014-07-17 23:41:23

MustardPeter (44 views)
2014-07-16 23:30:00
HotSpot Options
by dleskov
2014-07-08 03:59:08

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:58:24

Java and Game Development Tutorials
by SwordsMiner
2014-06-14 00:47:22

How do I start Java Game Development?
by ra4king
2014-05-17 11:13:37

HotSpot Options
by Roquen
2014-05-15 09:59:54

HotSpot Options
by Roquen
2014-05-06 15:03:10

Escape Analysis
by Roquen
2014-04-29 22:16:43

Experimental Toys
by Roquen
2014-04-28 13:24:22
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!