Hallo mensen,
Ik zit met een probleem.
Ik wil dat vanuit de eerste klasse van mijn applet een method word opgestart in een thread. Dit lukt threadnaam.methodenaam();
nu staat er in de methode die ik aanroep dat er een variabele (kijkrichting) moet worden gewijzigt. (in de thread dus).
Mijn hele broncode ziet er zo uit:
vanuit de interne klasse ToetsenbordMan roep ik dus een methode aan in de thread willem (class pacman).
Nu wil ik dat deze methode:
de variabelen ook wijzigen. Dit heeft tot nu toe geen effect gehad op de lopende thread. Dat moet dus wel gebeuren. Ik wil dat na het aanroepen van zo'n methode de thread daar op reageert.
Ik zit met een probleem.
Ik wil dat vanuit de eerste klasse van mijn applet een method word opgestart in een thread. Dit lukt threadnaam.methodenaam();
nu staat er in de methode die ik aanroep dat er een variabele (kijkrichting) moet worden gewijzigt. (in de thread dus).
Mijn hele broncode ziet er zo uit:
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
| package packman;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Applet1 extends Applet {
private Pacman willem;
private Color blauw;
private Button start,stop;
public void init(){
start = new Button("Start");
start.addActionListener(new StartKnopHandler());
stop = new Button("Stop");
stop.addActionListener(new StopKnopHandler());
add(start);
add(stop);
}
class StartKnopHandler implements ActionListener {
public void actionPerformed(ActionEvent e){
willem = new Pacman(getGraphics(),Color.blue,true);
willem.start();
}
}
class StopKnopHandler implements ActionListener {
public void actionPerformed(ActionEvent e){
willem.stoppen();
}
}
class ToetsenbordMan extends KeyAdapter implements KeyListener {
public void keyPressed( KeyEvent e){
int toets = e.getKeyCode();
switch(toets){
case KeyEvent.VK_DOWN:
willem.kopDown();
break;
case KeyEvent.VK_UP:
willem.kopUp();
break;
case KeyEvent.VK_RIGHT:
willem.kopRechts();
break;
case KeyEvent.VK_LEFT:
willem.kopLinks();
break;
case KeyEvent.VK_PAGE_UP:
willem.speedUp();
break;
case KeyEvent.VK_PAGE_DOWN:
willem.speedDown();
break;
}
}
}
//einde normale applet
}
class Pacman extends Thread {
Graphics g;
Color kleur;
int x_pos, y_pos, snelheid;
boolean doorgaan;
public int kijkrichting;
public Pacman(Graphics g,Color kleur, boolean doorgaan){
this.g = g;
this.kleur = kleur;
this.doorgaan = doorgaan;
}
public void stoppen(){
doorgaan = false;
}
public void run(){
while(doorgaan){
teken(g, kleur, x_pos);
slaap(10);
verplaats(snelheid, kijkrichting,x_pos,y_pos);
}
}
public void verplaats(int snelheid, int kijkrichting, int x_pos, int y_pos){
int aantalStappen = 1+snelheid;
switch( kijkrichting ){
case 3://rechts
if(x_pos < 199-aantalStappen){
x_pos += aantalStappen;
}
break;
case 4://links
if(x_pos > 1+aantalStappen){
x_pos -= aantalStappen;
}
break;
}
return x_pos;
}
private void teken(Graphics g, Color kleur, int x){
g.setColor(kleur);
g.drawOval(x,10,100,100);
}
public void kopDown(){
kijkrichting = 1;
}
public void kopUp(){
kijkrichting = 2;
}
public void kopRechts(){
kijkrichting = 3;
}
public void kopLinks(){
kijkrichting = 4;
}
public void speedUp(){
if(snelheid < 10){
snelheid++;
}
}
public void speedDown(){
if(snelheid > 0){
snelheid--;
}
}
void slaap(int millisec){
try { Thread.sleep( millisec); }
catch( InterruptedException e){}
}
} |
vanuit de interne klasse ToetsenbordMan roep ik dus een methode aan in de thread willem (class pacman).
Nu wil ik dat deze methode:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| public void kopDown(){
kijkrichting = 1;
}
public void kopUp(){
kijkrichting = 2;
}
public void kopRechts(){
kijkrichting = 3;
}
public void kopLinks(){
kijkrichting = 4;
}
public void speedUp(){
if(snelheid < 10){
snelheid++;
}
}
public void speedDown(){
if(snelheid > 0){
snelheid--;
}
} |
de variabelen ook wijzigen. Dit heeft tot nu toe geen effect gehad op de lopende thread. Dat moet dus wel gebeuren. Ik wil dat na het aanroepen van zo'n methode de thread daar op reageert.