gpt4 book ai didi

java - 为什么我的 "game"的背景会移动?

转载 作者:行者123 更新时间:2023-12-02 04:39:09 24 4
gpt4 key购买 nike

我正在尝试自学一些 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 坐标。

感谢任何帮助或批评。

最佳答案

当您进行实际绘图时,您会执行g.drawImage(offscreen,x,y,this);。这将在左上角的 x,y 处绘制屏幕外图像(当您移动圆圈时已对其进行了调整)。

您需要使用g.drawImage(offscreen,0,0,this);始终在同一位置绘制整个离屏图像。

关于java - 为什么我的 "game"的背景会移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30382691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com