Я пытаюсь создать простую игру, в которой вы идете и выбираете палочки. Я отслеживаю весь графический вывод и анимацию с использованием массива 2D-пикселей. В clear()
, в котором я установил все пиксельные значения 0, это дает мне ArrayIndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException на двумерном пиксельном массиве
Выход:
Exception in thread "Display" java.lang.ArrayIndexOutOfBoundsException: 225
at com.game.sticks.Game.render(Game.java:105)
at com.game.sticks.Game.run(Game.java:82)
at java.lang.Thread.run(Unknown Source)
Основной код:
package com.game.sticks;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import com.game.sticks.Graphics.Screen;
import com.game.sticks.Player.Player;
public class Game extends Canvas implements Runnable{
private static final long serialVersionUID = 1L;
public static int width = 400;
public static int height = width/16 * 9;
public static int scale = 3;
public static String title = "Pickn' Sticks";
boolean running = false;
JFrame frame = new JFrame();
Thread thread;
private Stick stick;
private Player player;
public int[][] pixels = new int[width][height];
public BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
public Game() {
}
Game(int i) {
Dimension size = new Dimension(width * scale, height * scale);
setPreferredSize(size);
}
public synchronized void start() {
thread = new Thread(this,"Display");
stick = new Stick();
player = new Player();
running = true;
thread.start();
}
public synchronized void stop() {
running = false;
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Game game = new Game(1);
game.frame.setVisible(true);
game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
game.frame.add(game);
game.frame.pack();
game.frame.setLocationRelativeTo(null);
game.frame.setResizable(false);
game.frame.setTitle(title);
game.start();
}
public void run() {
setFocusable(true);
while (running) {
update();
render();
}
stop();
}
public void update() {
player.update();
System.out.println("updating");
}
public void render() {
BufferStrategy bs = getBufferStrategy();
if (bs == null) {
createBufferStrategy(3);
return;
}
clear();
for(int i = 0;i<width;i++) {
for(int i2 = 0;i2<height;i++) {
pixels[i][i2] = -4325345;
}
}
for(int x = 0;x < width;x++) {
for(int y = 0;y < height;y++) {
image.setRGB(x,y,pixels[x][y]);
}
}
System.out.println("rendering");
Graphics g = bs.getDrawGraphics();
g = bs.getDrawGraphics();
g.setColor(Color.green);
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
g.dispose();
bs.show();
}
private void clear() {
for(int i = 0; i<width; i++) {
for(int i2 = 0; i2<height; i++) {
pixels[i][i2] = 0;
}
}
}
}
Как бы я идти о фиксации этого исключения ?
Благодарим за это. Я копировал и вставлял вложенные петли, и, наверное, я просто сделал глупую ошибку. Теперь я буду следить за этим. – Bojofart
@Bojofart: Пожалуйста, отметьте это как принятый ответ, затем – nullpointer