Я создаю класс Player
для своей игры, и мне нужен способ отслеживания элементов управления, но я хочу отследить клавиатуру отдельно от класса hitbox/rendering. Я код настройки для сохранения значения определенных ключей (W, A, S, D и ▲, ◄, ▼, ►) в переменных, в моем основной класс. Я хочу как-то указать на переменные в конструкторе и как-то их отследить.Как отслеживать значение переменной из другого класса
Один из способов решения проблемы - заменить переменную w
на player2.up
и т. Д., Поэтому мои методы отслеживания клавиатуры непосредственно редактируют объекты Player
, но это не так гибко. Я мог бы также передать вызывающий объект конструктору, но это еще менее гибко. На данный момент мне придется отследить клавиатуру из класса проигрывателя, но было бы здорово как-то ссылаться на переменные.
Я должен был пройти константы, поставляемые с интерфейсом KeyListener
в то же время, но вот код:
package learn_game_programming;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Player extends Rectangle {
private static final long serialVersionUID = 6027220656827265195L;
int upKey;
int downKey;
int leftKey;
int rightKey;
boolean up;
boolean down;
boolean left;
boolean right;
int ym;
int xm;
KeyboardTracker keyListener;
Component caller;
String name;
public Player() {
// TODO Auto-generated constructor stub
}
public Player(Rectangle r) {
super(r);
// TODO Auto-generated constructor stub
}
public Player(Point p) {
super(p);
// TODO Auto-generated constructor stub
}
public Player(Dimension d) {
super(d);
// TODO Auto-generated constructor stub
}
public Player(int width, int height) {
super(width, height);
// TODO Auto-generated constructor stub
}
public Player(Point p, Dimension d) {
super(p, d);
// TODO Auto-generated constructor stub
}
public Player(String name, int x, int y, int width, int height, int upKey, int downKey, int leftKey, int rightKey, Component caller) {
super(x, y, width, height);
this.upKey = upKey;
this.downKey = downKey;
this.leftKey = leftKey;
this.rightKey = rightKey;
this.keyListener = new KeyboardTracker();
this.caller = caller;
caller.addKeyListener(this.keyListener);
this.name = name;
}
private class KeyboardTracker implements KeyListener{
public void keyPressed(KeyEvent ke){
int key = ke.getKeyCode();
if(key == upKey){
up = true;
}
if(key == downKey){
down = true;
}
if(key == leftKey){
left = true;
}
if(key == rightKey){
right = true;
}
}
public void keyReleased(KeyEvent ke){
int key = ke.getKeyCode();
if(key == upKey){
up = false;
}
if(key == downKey){
down = false;
}
if(key == leftKey){
left = false;
}
if(key == rightKey){
right = false;
}
}
public void keyTyped(KeyEvent x){
}
@SuppressWarnings("unused")
public void actionPerformed(ActionEvent x){
}
}
public void tick(){
if(up){
ym = -4;
xm = 0;
}
if(down){
ym = 4;
xm = 0;
}
if(left){
xm = -4;
ym = 0;
}
if(right){
xm = 4;
ym = 0;
}
x += xm;
y += ym;
//System.out.println(x + ", " + y);
if(this.y <= 25) y = 25;
if(this.y >= caller.getHeight() - 10) y = caller.getHeight() - height;
if(this.x <= 0) x = 0;
if(this.x >= caller.getWidth() - 10) x = caller.getWidth() - height;
}
public void render(Graphics g){
g.drawString(name, (x + width/2) - g.getFontMetrics().stringWidth(name)/2, y);
g.fillOval(x , y, width, height);
}
}
Мы не можем комментировать код, не видя код. –
Это не проблема, но это слишком широкий вопрос без какого-либо кода в качестве контекста. – khelwood