我正在尝试自学一些java,而我正在尝试编写一个“游戏”。 到目前为止,我有一个可控制的圈子......
这是我到目前为止所做的:
窗口级
import java.applet.Applet;
import java.awt.Graphics;
public class Window extends GameIntern{
public void init(){
setSize(854,480);
Thread th = new Thread(this);
th.start();
offscreen = createImage(854,480);
d = offscreen.getGraphics();
addKeyListener(this);
}
public void paint(Graphics g){
d.clearRect(0,0,854,480);
d.drawImage(background, 0, 0, this);
d.drawOval(x, y, 30, 30);
g.drawImage(offscreen,x,y,this);
}
public void update(Graphics g){
paint(g);
}
}
和游戏类
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class GameIntern extends Applet implements Runnable , KeyListener {
public int x,y;
public Image offscreen;
public Graphics d;
public boolean up,down,left,right;
public BufferedImage background , face;
public void run() {
x = 100;
y = 100;
try {
background = ImageIO.read(new File("background.png"));
} catch (IOException e1) {
e1.printStackTrace();
}
while(true){
if(left == true){
x-=3;
repaint();
}
if(right == true){
x+=3;
repaint();
}
if(up == true){
y-=3;
repaint();
}
if(down == true){
y+=3;
repaint();
}
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == 37){
left=true;
}
if(e.getKeyCode() == 38){
up=true;
}
if(e.getKeyCode() == 39){
right=true;
}
if(e.getKeyCode() == 40){
down=true;
}
}
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == 37){
left=false;
}
if(e.getKeyCode() == 38){
up=false;
}
if(e.getKeyCode() == 39){
right=false;
}
if(e.getKeyCode() == 40){
down=false;
}
}
public void keyTyped(KeyEvent e){}
}
现在我的问题。当我启动线程并通过箭头键移动时,背景也会移动。 为什么这样,我该如何解决这个问题? 我永远不会改变图像的x和y坐标。
感谢任何帮助或批评。
答案 0 :(得分:2)
当您进行实际绘图时,执行g.drawImage(offscreen,x,y,this);
。这会在x,y
的左上角绘制您的屏幕外图像(在您移动圆圈时已经调整过了)。
您需要使用g.drawImage(offscreen,0,0,this);
始终在同一位置绘制整个屏幕外图像。