Problems using getKey() in Greenfoot

If you have two actors checking what the last key pressed was, you might run into a problem. The problem occurs because when Player 1 checks the key, he sets it to null. That means when Player 2 checks the key, it isn’t there any more. Imagine if Player 1 fires when you press “q” and Player 2 fires if you press “p”. You run the game and press “p”. Player 2 should fire but he doesn’t. What’s happened is that Player 1 made a call to getKey() first and in doing so reset the key to null. Then Player 2 made his call to getKey() and it returned null. You can check this is true by adding Player 2 to the world before Player 1. Now you will find that it’s Player 1 whose fire button doesn’t work and Player 2’s does.

The solution is to implement an act() method in your world class. Here you make your one single call to getKey() and you store the result in a static variable. Once this is done your actors can poll the value of this static variable and react to it without making their own calls to getKey().

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s