So I am trying to make a game in java that will display a grid of images as the background, for now it is just grass with the occasional rock as my images, and when it works I get a large display of a grid of 32 by 32 images like expected, but about two thirds of the time, Nothing in my panel appears!
I have eliminated alot of features for the sake of getting down to the problem, and When I run the code, even without repainting several times a second, it will still only sometimes work.
Main class
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
//Creating a new frame for the whole game and everything
JFrame frame = new JFrame("Lawlz this is my game");
frame.setSize(800,800);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setResizable(false);
//adding the game panel to the main frame
frame.add(new GameFrame());
}
}
Game Frame Class (where the pannel is made) THis is the code with nearly everything commented out. Even the animation and player class, yet it still will not display anything about half the time.
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Timer;
public class GameFrame extends JPanel {//implements ActionListener {
Timer mainTimer;
Player player;
Random rand = new Random();
Grid GameGrid = new Grid(25, 25);
int enemyCount = 5;
//Constructer!
public GameFrame()
{
setFocusable(true);
//player = new Player(100,100);
}
//Does all of the drawing for the game
public void paint(Graphics g)
{
//Sends to the JPanel class (super class)
super.paint(g);
//gets a graphics 2d object
Graphics2D g2d = (Graphics2D)g;
GameGrid.draw(g2d);
}
}
The GameGrid class, which basically holds lots of 'grid space' objects, each one basically just being an image. It is also responsible for, at this point, printing out most of everything that is drawn with the draw() method
import java.awt.Graphics2D;
import java.util.ArrayList;
public class Grid {
ArrayList<GridSpace> grid = new ArrayList<GridSpace>();
int width;
int height;
public Grid(int w, int h)
{
width = w;
height = h;
//Temporary for creating the x and y values by using the size of the images
int gw = new GridSpace(0,0).getGridImg().getWidth(null);
int gh = new GridSpace(0,0).getGridImg().getHeight(null);
for(int i = 0; i < h; i++)
{
for(int n = 0; n < w; n++)
{
grid.add(new GridSpace(n*gw,i*gh)); //GridSpace(n*ImageWidth, i*ImageHeight)
}
}
}
public void draw(Graphics2D g2d)
{
for(int i = 0; i < width; i++)
{
for(int n = 0; n < height; n++)
{
GridSpace tempSpace = GetGridSpaceByID(GetCoordinates(n,i)); //gets the GridSpace object for this corrdinate
g2d.drawImage(tempSpace.getGridImg(),tempSpace.x,tempSpace.y,null);
}
}
}
public void test(Graphics2D g2d)
{
GridSpace tempSpace = GetGridSpaceByID(GetCoordinates(0,0));
g2d.drawImage(tempSpace.getGridImg(),tempSpace.x,tempSpace.y,null);
}
public GridSpace GetGridSpaceByID(int n)
{
return grid.get(n);
}
public int GetCoordinates(int x, int y)
{
return x + y * width;
}
}
And finally, the GridSpace object which basically just stores an image
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.util.Random;
import javax.swing.ImageIcon;
public class GridSpace {
Random r = new Random();
ImageIcon ic;
int x = 0;
int y = 0;
public GridSpace(int x,int y)
{
this.x = x;
this.y = y;
//Stores an image for this grid space
//ic = new ImageIcon("C:\\Users\\Ben\\Desktop\\pic1.png");
if(r.nextInt(10) < 9)
{
ic = new ImageIcon("C:\\Users\\Ben\\Desktop\\Video Game\\grass1.jpg");
}
else
{
ic = new ImageIcon("C:\\Users\\Ben\\Desktop\\Video Game\\grass2.jpg");
}
}
public Image getGridImg()
{
//Image image = ic.getImage();
return ic.getImage();
}
}