Lieber Besucher, herzlich willkommen bei: RPG Studio - Make your World real. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

Freitag, 10. April 2009, 11:41

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

Quellcode

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) {}
 
}
zum Lesen den Text mit der Maus markieren


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

Freitag, 10. April 2009, 12:58

Quellcode

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:

Quellcode

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

Freitag, 10. April 2009, 17:53

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

Freitag, 10. April 2009, 19:03

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

Freitag, 10. April 2009, 20:33

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

Freitag, 7. Mai 2010, 14:01

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

Quellcode

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){}
}
zum Lesen den Text mit der Maus markieren

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

Quellcode

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;
  }
zum Lesen den Text mit der Maus markieren

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

Freitag, 7. Mai 2010, 14:15

Deine Update Funktion hat so keinen Sinn

Su müsste deine KeyListener Klasse aussehen:

Quellcode

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;
  }
}

Quellcode

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

8

Freitag, 7. Mai 2010, 14:17

Supi klappt perfekt :) tyvm

Bananni

Gesperrter Nutzer

  • »Bananni« wurde gesperrt

Motto: Belive the hype!

  • Nachricht senden

9

Mittwoch, 9. Juni 2010, 02:30

Quellcode

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:

Quellcode

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

Quellcode

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

zum Lesen den Text mit der Maus markieren

10

Mittwoch, 9. Juni 2010, 10:20

Hallo,
Doku lesen :p

Quellcode

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« wurde gesperrt

Motto: Belive the hype!

  • Nachricht senden

11

Mittwoch, 9. Juni 2010, 13:26

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:

Quellcode

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

Quellcode

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

zum Lesen den Text mit der Maus markieren

Ähnliche Themen

Social Bookmarks