【发布时间】:2016-03-13 01:05:35
【问题描述】:
我正在使用以下代码尝试打印出一个数组并通过 xaxis 和 yaxis 的变量移动一个 BufferedPicture ( test )。
还有一个额外的类叫做“Screen”,但是应该和这个问题无关。
package main.main.start;
import javax.swing.JTextField;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferInt;
import java.io.File;
import java.io.IOException;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.KeyEventDispatcher;
import java.awt.KeyboardFocusManager;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import main.main.start.graphics.Screen;
public class start extends Canvas implements Runnable{
private static final long serialVersionUID = 1L;
public static int width = 320;
public static int height = width / 16 * 9;
public static int scale = 3;
public boolean up,left,right,down;
public BufferedImage keine,floor,wall,test;
public int xaxis,yaxis;{
xaxis = 50;
yaxis = 50;
}
private Thread thread;
private JFrame frame;
private BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB );
private int[] pixels = ((DataBufferInt)image.getRaster().getDataBuffer()).getData();
private boolean running = false;
private Screen screen;
public start (){
Dimension size = new Dimension(width*scale,height*scale);
setPreferredSize (size);
screen = new Screen(width, height);
frame = new JFrame();
}
public synchronized void start() {
running = true;
thread = new Thread(this, "Display");
thread.start();
}
public synchronized void stop(){
running = false;
try {
thread.join();
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
public void run(){
while(running == true){
//rendering&updating
//System.out.println("running...");
update();
render();
}
}
public void update() {
}
public void render() {
BufferStrategy bs = getBufferStrategy();
if(bs == null){
createBufferStrategy(3);
return;
}
screen.clear();
screen.render();
for(int i = 0; i < pixels.length; i++){
pixels[i] = screen.pixels[i];
}
Graphics g = bs.getDrawGraphics();
g.setColor(Color.BLUE);
g.fillRect(0,0,getWidth(), getHeight() );
g.drawImage(image, 0, 0, getWidth(),getHeight(),null);
//playercontrollerstart
//playercontrollerend
//map
int[][] map=
{
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10},
{10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10}
};
int rows = 20;
int cols = 20;
int i, j;
try {
keine = ImageIO.read(new File("keine.png"));
floor = ImageIO.read(new File("floor.png"));
wall = ImageIO.read(new File("wall.png"));
test = ImageIO.read(new File("test.png"));
} catch (IOException e) {
e.printStackTrace();
}
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
if(map[i][j] == 10){
g.drawImage(keine,i*32,j*32,this);
}
if(map[i][j] == 11){
g.drawImage(wall,i*32,j*32,this);
}
if(map[i][j] == 12){
g.drawImage(floor,i*32,j*32,this);
}
}
g.drawImage(test,xaxis,yaxis,this);
}
//mapend
g.dispose();
bs.show();
}
public static void main(String[] args) {
start game = new start();
game.frame.setResizable(false);
game.frame.setTitle("TestWindowName");
game.frame.add(game);
game.frame.pack();
game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.frame.setLocationRelativeTo(null);
game.frame.setVisible(true);
game.start();
}
然后是问题代码(从 } 到 //StartController 的代码没有中断
//StartController
public void keyPressed(KeyEvent q) {
if(q.getKeyCode() ==37){
left = true;
}
if(q.getKeyCode() ==38){
up = true;
}
if(q.getKeyCode() ==39){
right = true;
}
if(q.getKeyCode() ==40){
down = true;
}
}
public void keyReleased(KeyEvent q) {
if(q.getKeyCode() == 37){
left = false;
}
if(q.getKeyCode() == 38){
up = false;
}
if(q.getKeyCode() == 39){
right = false;
}
if(q.getKeyCode() == 40){
down = false;
}
}
//EndController
}
【问题讨论】:
标签: java debugging keylistener