私はゲームを作ってるんだ、と私は、次の主要なクラスビューからキーが押されたことをコントローラに通知しますか?
メインコントローラクラスがあります。私は、コードをこのように整理しました
public class MasterRenderer extends Canvas implements KeyListener {
private static final long serialVersionUID = 1L;
public static final int WIDTH = 640;
public static final int HEIGHT = WIDTH * 3/4;
public static final String TITLE = "The legend of Finn";
private JFrame frame;
private BufferStrategy bs;
private Graphics g;
private PlayerRenderer playerR;
private MapRenderer mapR;
private TerrainRenderer terrainR;
public MasterRenderer() {
setPreferredSize(new Dimension(WIDTH, HEIGHT));
frame = new JFrame();
addKeyListener(this);
frame.setTitle(TITLE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(this);
frame.setResizable(false);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
requestFocus();
}
public void render() {
bs = getBufferStrategy();
if (bs == null) {
createBufferStrategy(3);
return;
}
g = bs.getDrawGraphics();
g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());
playerR.render(g);
mapR.render(g);
terrainR.render(g);
bs.show();
g.dispose();
}
public void setMapRenderer(MapRenderer mapR) {
this.mapR = mapR;
}
public void setPlayerRenderer(PlayerRenderer playerR) {
this.playerR = playerR;
}
public void setTerrainRenderer(TerrainRenderer terrainR) {
this.terrainR = terrainR;
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int i=e.getKeyCode();
System.out.println("Key pressed!!");
}
@Override
public void keyReleased(KeyEvent e) {
}
}
:
public class Manager implements Runnable {
private boolean running;
private Thread thread;
private MasterRenderer window;
private PlayerCharacter player;
private Map map;
public Manager() {
window = new MasterRenderer();
player = new PlayerCharacter(0, 0, Entity.FACING_DOWN, "Pepe", 0, 1, 2);
map = new Map();
}
public void initialize() {
window.setPlayerRenderer(new PlayerRenderer(player));
window.setMapRenderer(new MapRenderer(map));
window.setTerrainRenderer(new TerrainRenderer(new Terrain(0, 0, Entity.FACING_DOWN, "arbol", false)));
running = true;
thread = new Thread(this);
thread.start();
}
public void run() {
long timer = System.currentTimeMillis();
long lastTime = System.nanoTime();
final double ns = 1000000000.0/60.0;
double delta = 0;
int frames = 0;
int ticks = 0;
while (running) {
long now = System.nanoTime();
delta += (now - lastTime)/ns;
lastTime = now;
while (delta >= 1) {
tick(delta);
ticks++;
delta--;
frames++;
render();
}
if (System.currentTimeMillis() - timer > 1000) {
timer += 1000;
System.out.println("Frames: " + frames + "\tTicks: " + ticks);
frames = ticks = 0;
}
}
}
public void tick(double delta) {
}
public void render() {
window.render();
}
public static void main(String[] args) {
Manager manager = new Manager();
manager.initialize();
}
}
メインビュークラスをなぜなら、私は本当にMVCに固執しようとしているからです(しかも、managerクラスにkeyListenerを置くことは、今、バットの痛みです)。 MasterRendererがキーを登録したときにManagerに通知する簡単な方法はありますか?
私の記事を見て、[レトロスネークゲーム](http://java-articles.info/articles/?p=768)、Aの例を見てMVCパターンを使用するSwingアプリケーションであり、キーボード入力にもKey Bindingsを使用します。 –
....................こんにちは? –