Java 简单游戏的背景图像?
我一直在关注教程系列,并希望通过应用背景图像进行实验。不幸的是,当我通过Java 简单游戏的背景图像?,java,image,swing,background-image,Java,Image,Swing,Background Image,我一直在关注教程系列,并希望通过应用背景图像进行实验。不幸的是,当我通过paintComponent方法渲染它时,它会随着我的精灵一起移动(虽然是连续一个单位,而不是五个单位);当我通过paint方法渲染它时,我得到一个奇怪的、闪烁的框,它与JFrame的setBackground(color)属性中指定的颜色相匹配,并且它与精灵一起移动,与前一个实例相同(在paintComponent中) 我如何对图像进行编码,使其保持静态,就像背景一样 代码: public类JavaGame扩展JFrame
paintComponent
方法渲染它时,它会随着我的精灵一起移动(虽然是连续一个单位,而不是五个单位);当我通过paint方法渲染它时,我得到一个奇怪的、闪烁的框,它与JFrame
的setBackground(color)
属性中指定的颜色相匹配,并且它与精灵一起移动,与前一个实例相同(在paintComponent
中)
我如何对图像进行编码,使其保持静态,就像背景一样
代码:
public类JavaGame扩展JFrame{
int x,y;
私有镜像dbImage;
专用图形数据库;
影像鬼;
图像背景;
公共类AL扩展了KeyAdapter{
按下公共无效键(按键事件e){
int keyCode=e.getKeyCode();
if(keyCode==e.VK_左){
如果(x=235)
x=235;
其他的
x+=+5;
}
if(keyCode==e.VK\u UP){
如果(y=235)
y=235;
其他的
y+=+5;
}
}
公共无效密钥已释放(密钥事件e){
}
}
公共JavaGame(){
//加载图像
ImageIcon i=newImageIcon(“C:/Users/Taylor/workspace/javagame/src/ghost.png”);
ghost=i.getImage();
ImageIcon j=新的ImageIcon(“C:/Users/Taylor/workspace/Java game/src/bg.png”);
bg=j.getImage();
//游戏属性
addKeyListener(新AL());
setTitle(“Java游戏”);
设置大小(500500);
可设置大小(假);
setVisible(真);
挫折背景(颜色:灰色);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
x=150;
y=150;
}
公共空间涂料(图g){
g、 drawImage(bg,0,0,null);
dbImage=createImage(getWidth(),getHeight());
dbg=dbImage.getGraphics();
油漆组件(dbg);
g、 drawImage(dbImage,x,y,this);
}
公共组件(图形g){
g、 setColor(Color.WHITE);
g、 drawImage(鬼,x,y,this);
重新油漆();
}
公共静态void main(字符串[]args){
新JavaGame();
}
图片:
你是随机复制/粘贴代码的吗?这就是它看起来的样子。该代码有太多奇怪的方面,我没有将它们全部记录下来(可能是代码审查的好方面)。该示例使用异步方法加载图像(为了获得动画图像,制作动画)。使用
ImageIO.read(URL)
以同步方式加载静态图像
以下是一些简短的提示:
文件对象访问。请将它们添加到运行时类路径,然后通过URL访问它们
main()
的更改)super.paint(g);
(或paintComponent(g)
)paintComponent()
。将面板添加到框架import java.awt.*;
导入java.awt.event.*;
导入java.net.URL;
导入javax.swing.*;
公共类JavaGame扩展了JPanel{
int x,y;
私有镜像dbImage;
专用图形数据库;
影像鬼;
图像背景;
公共类AL扩展了KeyAdapter{
按下公共无效键(按键事件e){
int keyCode=e.getKeyCode();
if(keyCode==e.VK_左){
如果(x=235)
x=235;
其他的
x+=+5;
}
if(keyCode==e.VK\u UP){
如果(y=235)
y=235;
其他的
y+=+5;
}
}
公共无效密钥已释放(密钥事件e){
}
}
publicJavaGame()引发异常{
//加载图像
//ImageIcon i=新的ImageIcon(
//“C:/Users/Taylor/workspace/Java game/src/ghost.png”);
URL urlGhost=新URL(“http://1point1c.org/gif/thum/plnttm.gif");
ghost=Toolkit.getDefaultToolkit().createImage(urlGhost);
//ImageIcon j=新的ImageIcon(
//“C:/Users/Taylor/workspace/Java game/src/bg.png”);
URL urlBG=新URL(“http://pscode.org/media/stromlo2.jpg");
bg=Toolkit.getDefaultToolkit().createImage(urlBG);
设置聚焦(真);
//游戏属性
addKeyListener(新AL());
x=150;
y=150;
ActionListener al=新的ActionListener(){
已执行的公共无效行动(行动事件ae){
重新油漆();
}
};
定时器=新定时器(50,al);
timer.start();
}
公共组件(图形g){
超级组件(g);
g、 drawImage(bg,0,0,null);
//dbImage=createImage(getWidth(),getHeight());
//dbg=dbImage.getGraphics();
//油漆组件(dbg);
g、 drawImage(dbImage,x,y,this);
g、 setColor(Color.WHITE);
g、 drawImage(鬼,x,y,this);
//重新油漆();
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
试一试{
JFrame f=新的JFrame(“Java游戏”);
f、 设置大小(500500);
f、 可设置大小(假);
f、 setVisible(真);
f、 挫折背景(颜色:灰色);
f、 setContentPane(新JavaGame());
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}捕获(例外e){
e、 printStackTrace();
}
}
});
}
}
通常,在拍摄屏幕截图时,应编辑它们,使其仅包括
public class JavaGame extends JFrame{
int x, y;
private Image dbImage;
private Graphics dbg;
Image ghost;
Image bg;
public class AL extends KeyAdapter{
public void keyPressed(KeyEvent e){
int keyCode = e.getKeyCode();
if(keyCode == e.VK_LEFT){
if(x <= 8)
x = 8;
else
x += -5;
}
if(keyCode == e.VK_RIGHT){
if(x >= 235)
x = 235;
else
x += +5;
}
if(keyCode == e.VK_UP){
if(y <= 18)
y = 18;
else
y += -5;
}
if(keyCode == e.VK_DOWN){
if(y >= 235)
y = 235;
else
y += +5;
}
}
public void keyReleased(KeyEvent e){
}
}
public JavaGame(){
//Load images
ImageIcon i = new ImageIcon("C:/Users/Taylor/workspace/Java game/src/ghost.png");
ghost = i.getImage();
ImageIcon j = new ImageIcon("C:/Users/Taylor/workspace/Java game/src/bg.png");
bg = j.getImage();
//Game properties
addKeyListener(new AL());
setTitle("Java Game");
setSize(500, 500);
setResizable(false);
setVisible(true);
setBackground(Color.GRAY);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
x = 150;
y = 150;
}
public void paint(Graphics g){
g.drawImage(bg, 0, 0, null);
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, x, y, this);
}
public void paintComponent(Graphics g){
g.setColor(Color.WHITE);
g.drawImage(ghost, x, y, this);
repaint();
}
public static void main(String[] args) {
new JavaGame();
}
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import javax.swing.*;
public class JavaGame extends JPanel {
int x, y;
private Image dbImage;
private Graphics dbg;
Image ghost;
Image bg;
public class AL extends KeyAdapter {
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == e.VK_LEFT) {
if (x <= 8)
x = 8;
else
x += -5;
}
if (keyCode == e.VK_RIGHT) {
if (x >= 235)
x = 235;
else
x += +5;
}
if (keyCode == e.VK_UP) {
if (y <= 18)
y = 18;
else
y += -5;
}
if (keyCode == e.VK_DOWN) {
if (y >= 235)
y = 235;
else
y += +5;
}
}
public void keyReleased(KeyEvent e) {
}
}
public JavaGame() throws Exception {
// Load images
//ImageIcon i = new ImageIcon(
// "C:/Users/Taylor/workspace/Java game/src/ghost.png");
URL urlGhost = new URL("http://1point1c.org/gif/thum/plnttm.gif");
ghost = Toolkit.getDefaultToolkit().createImage(urlGhost);
//ImageIcon j = new ImageIcon(
// "C:/Users/Taylor/workspace/Java game/src/bg.png");
URL urlBG = new URL("http://pscode.org/media/stromlo2.jpg");
bg = Toolkit.getDefaultToolkit().createImage(urlBG);
setFocusable(true);
// Game properties
addKeyListener(new AL());
x = 150;
y = 150;
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
repaint();
}
};
Timer timer = new Timer(50,al);
timer.start();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(bg, 0, 0, null);
//dbImage = createImage(getWidth(), getHeight());
//dbg = dbImage.getGraphics();
//paintComponent(dbg);
g.drawImage(dbImage, x, y, this);
g.setColor(Color.WHITE);
g.drawImage(ghost, x, y, this);
//repaint();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
JFrame f = new JFrame("Java Game");
f.setSize(500, 500);
f.setResizable(false);
f.setVisible(true);
f.setBackground(Color.GRAY);
f.setContentPane(new JavaGame());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}