Toon posts:

[java] keylistener

Pagina: 1
Acties:
  • 174 views sinds 30-01-2008

Verwijderd

Topicstarter
Sinds een paar dagen ben ik nu zo af en toe bezig met een spel Snake te maken, het is vooral nu eerst testen van alles, kijken hoe het werkt en ben nog niet echt bezig met het spel. Ik ben een paar maanden geleden geslaagd voor het examen Java op de Open Universiteit, het is dus niet dat ik niks van Java weet, alleen wel heel erg weinig van Java games :) .

Ik heb het nu eindelijk voor elkaar gekregen om een blokje te bewegen (een snake bestaat in mijn spel uit meerdere blokjes) en wil nu met pijltoetsen de snake kunnen bewegen, leek mij heel simpel maar helaas..

De code ziet er verschrikkelijk uit, maar nogmaals het is allemaal in test-fase, uit proberen van de verschillende game-stappen :)

Hier is de code.
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package Snake;

import java.awt.*;
import java.awt.event.*;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.applet.*;

public class Applet1 extends Applet implements Runnable
{

  public int block = 15;
  public int block_x = 5;
  public int block_y = 5;
  TextField testField = new TextField();

  //Construct the applet
  public Applet1()
  {
  }

  //Initialize the applet
  public void init()
  {
    try
    {
      jbInit();
    }
    catch(Exception e) 
    {
      e.printStackTrace();
    }
  }

  //Component initialization
  private void jbInit() throws Exception
  {
    testField.setBounds(new Rectangle(80, 183, 110, 24));
    this.setLayout(null);
    this.setSize(new Dimension(300,300));
    this.add(testField, null);
    //this.addKeyListener(this);
  }

  //Get Applet information
  public String getAppletInfo()
  {
    return "Applet Information";
  }

  //Get parameter info
  public String[][] getParameterInfo()
  {
    return null;
  }

  public void start()
  {
    // define a new thread
    Thread th = new Thread (this);
    // start this thread
    th.start ();
  }

  public void stop()
  {
  }

  public void destroy()
  {
  }

  public void run ()
  {
    // lower ThreadPriority
    Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

    // run a long while (true) this means in our case "always"
    while (true)
    {
      block_x++;

      // repaint the applet
      repaint();

      try
      {
        // Stop thread for 20 milliseconds
        Thread.sleep (20);
      }
      catch (InterruptedException ex)
      {
        // do nothing
      }

      // set ThreadPriority to maximum value
      Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    }

  }

  public void actionPerformed ( ActionEvent e )
  {
    testField.setText("src:" . e.getSource);
  }

  public void paint (Graphics g)
  {
    // set color
    g.setColor (Color.red);

    // paint a filled colored circle
    g.fillRect(block_x, block_y, block, block);
  }
}


Wat ik dus graag wil is dat ik met de pijltjes het object kan bewegen, ik heb van alles geprobeerd (en weer verwijderd) maar het lukt me maar niet.

Ik ben trouwens met de cursus van de open universiteit nog niet bezig geweest met Swing, krijg ik bij de volgende cursus, dus ik weet nog niet hoe jFrame werkt (heb ik vaak gezien als er met keys worden gewerkt), maakt het wat uit een frame of applet ? Zo ja, wat precies ?

Bedankt voor het lezen :) en eventueel voor het antwoord.
- Johan

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Wat ik dus graag wil is dat ik met de pijltjes het object kan bewegen, ik heb van alles geprobeerd (en weer verwijderd) maar het lukt me maar niet.
Wat heb je precies geprobeerd? Dat scheelt misschien een hoop voor jou zinloze replies :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

Topicstarter
Ik heb o.a dit geprobeerd, maar gaf helemaal geen effect.

code:
1
2
3
4
5
6
7
8
9
10
11
public void keyTyped(KeyEvent e){}
public void keyPressed(KeyEvent e)
{   
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) 
        block_x = 1;    
    if (e.getKeyCode() == KeyEvent.VK_LEFT)  block_x = -1;
}
public void keyReleased(KeyEvent e){    
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) block_x = 0;   
    if (e.getKeyCode() == KeyEvent.VK_LEFT)  block_x = 0;
}

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
http://java.sun.com/docs/...g/events/keylistener.html vind je je oplossing wel.

Want er ontbreekt nu elk spoor van hoe het zou moeten :) Het model zit als volgt in elkaar:
Je hebt een observer en een observerable. De observerable is degene die in de gaten gehouden wordt, wat in jouw geval de applet is die keyEvents binnen krijgt. Je hangt er dan een observer aan, die observeert of jouw applets keyEvents binnen krijgt.

Deze observer is een KeyListener. KeyListener is een interface welke geïmplementeerd moet worden door een klasse welke als observer voor keyEvents wil spelen.

Dus als jij doet
Java:
1
2
3
4
5
6
7
public class Bla extends Applet {

  public void init( ) {
    
    addKeyListener( zus );
  }
}
Dan moet zus van het type KeyListener zijn.
Jij schrijft bij zus nu this op. Dwz dat je KeyListener je applet is. Daarom moet je je applet ook de KeyListener interface laten implementeren. Daarom werkt jou oplossing ook niet. Je Applet weet niet naar wie hij moet notificeren als er keyEvents binnen komen, dus roept die methodes van je ook niet aan :)

Vaak is het mooier om de keylistener een interne klasse te laten zijn.
Maarja, ik snap dat het nu nog vaag kan zijn, dus ik zou eerst even aan de gang gaan met die tutorial :)
Succes

[ Voor 7% gewijzigd door Glimi op 20-02-2003 13:49 ]


Verwijderd

Topicstarter
Thanx Glimi, maar hoe moet dit er dan uit komen te zien:
code:
1
public class Applet1 extends Applet implements Runnable


Want Runnable moet er in blijven maar er moet ook bij komen Keylistener geloof ik (of niet) ?

En dit werkt niet:
code:
1
2
public class Applet1 extends Applet implements Runnable 
implements Keylistener


En welke functies moet ik verder gebruiken en hoe ?

  • NDF82
  • Registratie: Januari 2002
  • Laatst online: 13-08 17:12

NDF82

Doomed Space Marine

Java:
1
2
3
4
5
public class Applet1 extends Applet implements Runnable, Keylistener {

    ...

}


staat in je java boek ;)

Pentium 233MHz MMX + Diamond Monster 3D 3DFX Voodoo II


Verwijderd

Topicstarter
Nee hoor, hoe kom je daar bij ?

Verwijderd

Topicstarter
Lekker hulpvaardig ben je NDF82, bedankt !

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
Tja, als dit het resultaat wordt....

Bepaalde mensen willen je helpen dmv het geven van tips, en dat apprecieer jij blijkbaar niet.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.