我第一次尝试制作一个简单的基于tile的java游戏
我正在尝试制作我的第一个java小游戏,我想让它基于平铺。我正在尝试在JFrame上平铺一个块图像,并且已经编写了一些代码来适应我的环境。不幸的是,它没有真正工作,因为它不会绘制任何我想要的测试精灵,这就是我需要帮助的地方。我将发布我的代码: java:我想说这一切都是正确的我第一次尝试制作一个简单的基于tile的java游戏,java,Java,我正在尝试制作我的第一个java小游戏,我想让它基于平铺。我正在尝试在JFrame上平铺一个块图像,并且已经编写了一些代码来适应我的环境。不幸的是,它没有真正工作,因为它不会绘制任何我想要的测试精灵,这就是我需要帮助的地方。我将发布我的代码: java:我想说这一切都是正确的 import javax.swing.JFrame; public class frame extends JFrame { panel ng; public frame() {
import javax.swing.JFrame;
public class frame extends JFrame
{
panel ng;
public frame()
{
ng = new panel();
setSize(500,500);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
add(ng);
}
public static void main(String [] args)
{
frame n = new frame();
}
}
panel.java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;
public class panel extends JPanel implements Runnable
{
private Thread game;
private boolean running = false;
private Image dbImage;
private Graphics dbGraphics;
static final int Width = 50;
static final int Height = 50;
static final Dimension dim = new Dimension(Width,Height);
map nm;
public panel()
{
nm = new map("tester.txt");
setPreferredSize(new Dimension(75,75));
setFocusable(true);
requestFocus();
}
public void run()
{
while (running)
{
update();
render();
paintScreen();
}
}
private void update()
{
if (game != null && running == true)
{
}
}
private void render()
{
if (dbImage == null)
{
dbImage = createImage(Width, Height);
dbGraphics = dbImage.getGraphics();
}
dbGraphics.setColor(Color.WHITE);
dbGraphics.fillRect(0,0,Width,Height);
draw(dbGraphics);
}
private void paintScreen()
{
Graphics g;
try
{
g=this.getGraphics();
if(dbImage != null && g != null)
{
g.drawImage(dbImage,0,0,null);
}
}
catch(Exception e)
{
}
}
public void draw(Graphics g)
{
nm.draw(g);
}
private void startGame()
{
if(game == null || running == false)
{
game = new Thread(this);
game.start();
}
}
public void addNotify()
{
super.addNotify();
startGame();
}
public void stopGame()
{
if (running == true)
{
running = false;
}
}
}
java:这是我尝试分配精灵的地方…不确定我做错了什么。顺便说一句,我在地图构造器中使用的测试文本文件只是一个具有宽度、高度,然后是一组随机0和1的文件。0和1用于显示某些块应该去哪里
import java.awt.Graphics;
import java.awt.Image;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
public class map
{
private int[][] tileMap;
private int height;
private int width;
private Image BLOCK;
public map(String mapFile)
{
BLOCK = new ImageIcon("path to sprite").getImage();
int[] tileNums;
try
{
BufferedReader br = new BufferedReader(new FileReader(mapFile));
width=Integer.parseInt(br.readLine());
height=Integer.parseInt(br.readLine());
tileNums= new int[width];
tileMap=new int[width][height];
for(int row = 0; row < height; row++)
{
String line=br.readLine();
//what I'm trying to do here is make each int in grid into array by converting char to int
for(int i=0; i<=line.length();i++)
{
tileNums[i]=(line.charAt(i)-48);
}
for(int col = 0; col<width; col++)
{
tileMap[row][col]=tileNums[col];
}
}
}
catch(Exception e)
{
}
}
public void draw(Graphics g)
{
int ix=0;
int iy=0;
for(int row=0;row<height;row++)
{
for(int col=0;col<height;col++)
{
if(tileMap[row][col]==0)
{
g.drawImage(BLOCK, ix, iy, null);
ix=ix+16;
}
}
}
}
}
导入java.awt.Graphics;
导入java.awt.Image;
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
导入javax.imageio.imageio;
导入javax.swing.ImageIcon;
公共类地图
{
私有int[][]tileMap;
私人内部高度;
私有整数宽度;
私有图像块;
公共映射(字符串映射文件)
{
BLOCK=新图像图标(“精灵路径”).getImage();
int[]tilenms;
尝试
{
BufferedReader br=新的BufferedReader(新文件读取器(映射文件));
宽度=整数.parseInt(br.readLine());
高度=整数.parseInt(br.readLine());
tileNums=新整数[宽度];
tileMap=新整数[宽度][高度];
对于(int row=0;row 对于(int i=0;i您必须重写JPanel的paint方法,并在其中调用draw,将图形对象g传递给它。永远不要使用this.getGraphics()
!这可以返回null
,您对它所做的任何更改都将在下一个绘制周期中被覆盖!而是覆盖JPanel
的paintComponent
,并在其中执行所需的任何绘制操作。repaitmanager
将间接调用它作为重新粉刷周期的一部分。查看和了解更多详细信息。您也可以查看。您也可以查看“没问题”,很乐意提供帮助。