Dear visitor, welcome to RPG Studio - Make your World real. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Friday, April 10th 2009, 11:41am

Arbeiten mit Tastatur

Hallo,
kurz,
wie bring ich java bei auf meine Tastenanschläge zu reagieren?

lang,
ich hab irgendwie grad nen großes Problem. Ich hoffe ihr könt mir helfen :)
Also ich wollte eine Tastatursteuerung einsprich, sprich der User drückt h und irgendwas passiert, dazu hab ich mir nen KeyListener geschrieben.
Spoiler

Source 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
package de.rmxp.game8.frame;
 
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import de.rmxp.game8.addons.Pri;
import de.rmxp.game8.global.Global;
 
public class Tasten implements KeyListener {
 
	/**
	 * Taste gedrückt?
	 */
	public void keyPressed(KeyEvent e) {
		Pri.nt(e);
 
		//h gedrückt?
		if (e.getKeyCode() == KeyEvent.VK_H) {
			Global.game.getPlayer().moveMap(7);
		}
	}
 
	public void keyReleased(KeyEvent e) {}
 
	public void keyTyped(KeyEvent e) {}
 
}
highlight to read


Der Aufbau meines Programmes ist es, ich hab ein JFrame, der ein JDesktopPane und 2 JToolbar einbindet, und der JDesktopFrame hat verschiedene jInternalFrames. Erst hab ich die Tasten am jFrame angemeldet und dann bei desktoppane (addKeyListener(new Tasten()); ) und beides hat irgendwie nichts gebracht, sprich es wird nie ausgeführt, erkannt. :/
Jetzt ist meine Frage, wie muss ich das richtig anmelden damit das ausgeführt wird, oder muss ich es ganz anderes machen?

Gruß Sven
:information: YAams
:rainbow: Random Signatur
Bild





Weitere Informationen | Download
Mit Support für RGSS Project 1!
Bild

2

Friday, April 10th 2009, 12:58pm

Source 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
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
 
public class Keys implements KeyListener
{
    static boolean KEY_H;
 
    public void keyPressed(KeyEvent e) 
    {
       switch(e.getKeyCode())
       {
           case KeyEvent.VK_H:
               KEY_H = true;
               break;
       }
    }
 
    public void keyReleased(KeyEvent e) 
    {
        switch(e.getKeyCode())
       {
           case KeyEvent.VK_H:
               KEY_H = false;
               break;
       }
    }
 
    public void keyTyped(KeyEvent e){}
}


Dann gehst du in deine Klasse, welche dein Spiel anzeigt.

In den Konstruktor schreibst du folgendes:

Source code

1
addKeyListener(new Keys());


Dann brauchst du eigentlich noch eine methode die du bei jeden Neuzeichnen deines Spiels aufrufst und dort überprüfst ob eine Taste gedrückt ist oder nicht.

Dort kannst du auch eigentlich sofort reinschreiben was passieren soll.

Über Keys.KEY_H kannst du dann auf die variable überall zugreifen.

Ich hoffe ich habe geholfen ^^

MfG Lone

3

Friday, April 10th 2009, 5:53pm

Hallo,
danke ersmtla für die antwort, aber ich glaub du hast mich nicht verstanden. Also Tasten.class läuft (hab ich aus einer Demo rauskopiert.) aber in meinem Projekt wird das nie ausgeführt, sprich die haben nie den KeyFokus (meine These) und nu ist meine Frage, wo muss ich das teil hinzufügen, wer hat den keyfokus oder kann man rausfinden wer grad keyfokus hat?

(Trotzdem danke)

Gruß Sven
:information: YAams
:rainbow: Random Signatur
Bild





Weitere Informationen | Download
Mit Support für RGSS Project 1!
Bild

4

Friday, April 10th 2009, 7:03pm

Nur JFrame und JInternalFrame können Fokus bekommen , alles andere muss man mit der MEthode requestFocus() versuchen zu bekommen. Fokus ist wichtig für den KeyListener ^^
Gamedev-Nation.org - Die freundliche Spieleentwickler Community

I am sick of it to be a beta nerd. So I have decided to become a alpha!

5

Friday, April 10th 2009, 8:33pm

Hallo,
danke dem Tipp, dass nur JFrame und jInternalFrame es bekommen können ;) Das Problem war/ist, dass JInternalFrame automatisch den Keyforkus an sich nimmt, ihn aber nicht zurück gibt. Habs nun so gelöst, dass jFrame hört und jedes jInternalframe prüft, ob es das letzte ist und den fokus zurückgeben soll.

Gruß & Danke Sven
:information: YAams
:rainbow: Random Signatur
Bild





Weitere Informationen | Download
Mit Support für RGSS Project 1!
Bild

6

Friday, May 7th 2010, 2:01pm

Dank euch XD meins klappt jz auch, aber nur ned so ganz wie ichs gern hätte.
Ich möchte herausfinden ob die taste gedrückt ist und zwar gehalten oder einmal oda was auch immer, halt das die taste unten is.
dafür hab ich den code hier:
Spoiler

Source 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
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
public class Input implements KeyListener {
  public void keyPressed(KeyEvent e){
      switch(e.getKeyCode()){
          case KeyEvent.VK_LEFT:
              Globals.KEY_LEFT=true;
              break;
          case KeyEvent.VK_UP:
              Globals.KEY_UP=true;
              break;
          case KeyEvent.VK_RIGHT:
              Globals.KEY_RIGHT=true;
              break;
          case KeyEvent.VK_DOWN:
              Globals.KEY_DOWN=true;
              break;
      }
  }
  public void keyReleased(KeyEvent e){
      switch(e.getKeyCode()){
          case KeyEvent.VK_SPACE:
              Globals.KEY_ACTION=true;
              break;
      }
  }
  public void keyTyped(KeyEvent e){}
}
highlight to read

und nach der abfrage, update, lass ich immer das durchlaufen:
Spoiler

Source code

1
2
3
4
5
6
7
8
  Globals(){}
  public static void update(){
    KEY_ACTION=false;
    KEY_DOWN=false;
    KEY_LEFT=false;
    KEY_RIGHT=false;
    KEY_UP=false;
  }
highlight to read

das problem nun ist mein char bewegt sich so:
| ... ||||||||||
aber ich häts gern ohne diese pause beim ersten drücken, halt so: |||||||||||||||

ich hatte das ganze schonma mit einer Libary zusammengesetzt, slick.
Dort funktionierten die bewegungnen ganz gut, und auch wenn ich KEY_LEFT auf true setzt dann bewegt der char sich |||||||||| und ned | ... ||||||
also muss es mit meinen Input script zusammenhängen, oda ned?
Danke im vorraus ^^

7

Friday, May 7th 2010, 2:15pm

Deine Update Funktion hat so keinen Sinn

Su müsste deine KeyListener Klasse aussehen:

Source 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
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
public class Input implements KeyListener {
  public void keyPressed(KeyEvent e){
      switch(e.getKeyCode()){
          case KeyEvent.VK_LEFT:
              Globals.KEY_LEFT=true;
              break;
          case KeyEvent.VK_UP:
              Globals.KEY_UP=true;
              break;
          case KeyEvent.VK_RIGHT:
              Globals.KEY_RIGHT=true;
              break;
          case KeyEvent.VK_DOWN:
              Globals.KEY_DOWN=true;
              break;
      }
  }
  public void keyReleased(KeyEvent e){
      switch(e.getKeyCode()){
          case KeyEvent.VK_LEFT:
              Globals.KEY_LEFT=false;
              break;
          case KeyEvent.VK_UP:
              Globals.KEY_UP=false;
              break;
          case KeyEvent.VK_RIGHT:
              Globals.KEY_RIGHT=false;
              break;
          case KeyEvent.VK_DOWN:
              Globals.KEY_DOWN=false;
              break;
      }
  }
  public void keyTyped(KeyEvent e){
      switch(e.getKeyCode()){
          case KeyEvent.VK_SPACE:
              Globals.KEY_ACTION=true;
              break;
  }
}

Source code

1
2
3
4
Globals(){}
  public static void update(){
    KEY_ACTION=false;
  }

8

Friday, May 7th 2010, 2:17pm

Supi klappt perfekt :) tyvm

Bananni

Gesperrter Nutzer

  • "Bananni" has been banned

Motto: Belive the hype!

  • Send private message

9

Wednesday, June 9th 2010, 2:30am

Source code

1
2
3
4
5
6
7
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
public class Input implements KeyListener {
  public void keyTyped(KeyEvent e){
      System.out.println(e.getKeyCode());
  }
}


Wenn ich die enter taste drücke gibt er aus: 0
genauso wie bei jeder anderen taste =/
Bei anderen funktionen wie taste halten oda loslasen gibt er mir jedoch immer den richtigen code aus.
Kann mir einer sagen wieso er das macht? XD
Bild
My Deviantart : )
Spoiler

StepSound Script:

Source 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#==================================
# Step Sound Script
#---------------------------------------------------
# @Autor Bananni
# @Date 07/08/2010
#==================================
class Game_Player
  # CONFIGS
  STEP_SOUND_VOLUME = 100
  STEP_SOUND_PITCH = 100
  STEP_SOUND_ARRAY=[
                    ["",0], # TERRAIN ID = 0
                    ["test.wav",10], # TERRAIN ID = 1
                    ["",0], # TERRAIN ID = 2
                    ["",0], # TERRAIN ID = 3
                    ["",0], # TERRAIN ID = 4
                    ["",0], # TERRAIN ID = 5
                    ["",0], # TERRAIN ID = 6
                    ["",0], # TERRAIN ID = 7
                    ["",0], # TERRAIN ID = 8
                    ["",0]  # TERRAIN ID = 9
                   ]
  # ENDE CONFIGS
  alias :increase_steps_banannis_shit :increase_steps
  alias :update_banannis_shit :update
  def increase_steps
    increase_steps_banannis_shit
    if @step_countdown == 0
      id = $game_map.terrain_tag(x, y)
      if STEP_SOUND_ARRAY[id][0] != ""
        Audio.se_play("Audio/SE/" + STEP_SOUND_ARRAY[id][0], STEP_SOUND_VOLUME, STEP_SOUND_PITCH)
        @step_countdown=STEP_SOUND_ARRAY[id][1]
      end
    end
  end
  def update
    update_banannis_shit
    if @step_countdown == nil
      @step_countdown=0
    end
    if @step_countdown != 0
      @step_countdown-=1
    end
  end
end


Map Roots

Source 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
30
31
32
33
34
35
36
#==================================
# Map Names & Map Root
#---------------------------------------------------
# @Autor Bananni
# @Date 07/08/2010
#---------------------------------------------------
# Get Map Name:
#   $game_system.map_names[any_map_id]
# Get Map Root ID:
#   $game_system.parent_map(any_map_id)
#==================================
class Game_System
  attr_reader :map_names
  alias :wtf_bananni_alias_this_game_system_init :initialize
  def initialize
    wtf_bananni_alias_this_game_system_init
    read_map_names
  end
  def parent_map id=$game_map.map_id
    while true
      par=@map_parent[id]
      break if par == 0
      id=par
    end
    return @map_names[id]
  end
  def read_map_names
    map_infos = load_data("Data/MapInfos.rxdata")
    @map_names = Array.new
    @map_parent = Array.new
    for key in map_infos.keys
      @map_names[key] = map_infos[key].name
      @map_parent[key] = map_infos[key].parent_id
    end
  end
end

highlight to read

10

Wednesday, June 9th 2010, 10:20am

Hallo,
Doku lesen :p

Source code

1
2
3
4
5
6
7
8
getKeyCode
 
public int getKeyCode()
 
    Returns the integer keyCode associated with the key in this event.
 
    Returns:
        the integer code for an actual key on the keyboard. (For KEY_TYPED events, the keyCode is VK_UNDEFINED.)

http://java.sun.com/javase/6/docs/api/ja…etKeyCode%28%29

Einfach keyReleased nehmen. Oder Kai fragen ;)

Grüße Steve
:information: YAams
:rainbow: Random Signatur
Bild





Weitere Informationen | Download
Mit Support für RGSS Project 1!
Bild

Bananni

Gesperrter Nutzer

  • "Bananni" has been banned

Motto: Belive the hype!

  • Send private message

11

Wednesday, June 9th 2010, 1:26pm

Man ich muss ma zum optiker >_>
hab mir die doku rauf und runter gelesen und jedesma diese stelle ausgelassen x_X
ty, klappt ^^
Bild
My Deviantart : )
Spoiler

StepSound Script:

Source 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#==================================
# Step Sound Script
#---------------------------------------------------
# @Autor Bananni
# @Date 07/08/2010
#==================================
class Game_Player
  # CONFIGS
  STEP_SOUND_VOLUME = 100
  STEP_SOUND_PITCH = 100
  STEP_SOUND_ARRAY=[
                    ["",0], # TERRAIN ID = 0
                    ["test.wav",10], # TERRAIN ID = 1
                    ["",0], # TERRAIN ID = 2
                    ["",0], # TERRAIN ID = 3
                    ["",0], # TERRAIN ID = 4
                    ["",0], # TERRAIN ID = 5
                    ["",0], # TERRAIN ID = 6
                    ["",0], # TERRAIN ID = 7
                    ["",0], # TERRAIN ID = 8
                    ["",0]  # TERRAIN ID = 9
                   ]
  # ENDE CONFIGS
  alias :increase_steps_banannis_shit :increase_steps
  alias :update_banannis_shit :update
  def increase_steps
    increase_steps_banannis_shit
    if @step_countdown == 0
      id = $game_map.terrain_tag(x, y)
      if STEP_SOUND_ARRAY[id][0] != ""
        Audio.se_play("Audio/SE/" + STEP_SOUND_ARRAY[id][0], STEP_SOUND_VOLUME, STEP_SOUND_PITCH)
        @step_countdown=STEP_SOUND_ARRAY[id][1]
      end
    end
  end
  def update
    update_banannis_shit
    if @step_countdown == nil
      @step_countdown=0
    end
    if @step_countdown != 0
      @step_countdown-=1
    end
  end
end


Map Roots

Source 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
30
31
32
33
34
35
36
#==================================
# Map Names & Map Root
#---------------------------------------------------
# @Autor Bananni
# @Date 07/08/2010
#---------------------------------------------------
# Get Map Name:
#   $game_system.map_names[any_map_id]
# Get Map Root ID:
#   $game_system.parent_map(any_map_id)
#==================================
class Game_System
  attr_reader :map_names
  alias :wtf_bananni_alias_this_game_system_init :initialize
  def initialize
    wtf_bananni_alias_this_game_system_init
    read_map_names
  end
  def parent_map id=$game_map.map_id
    while true
      par=@map_parent[id]
      break if par == 0
      id=par
    end
    return @map_names[id]
  end
  def read_map_names
    map_infos = load_data("Data/MapInfos.rxdata")
    @map_names = Array.new
    @map_parent = Array.new
    for key in map_infos.keys
      @map_names[key] = map_infos[key].name
      @map_parent[key] = map_infos[key].parent_id
    end
  end
end

highlight to read

Similar threads

Social bookmarks