我正在尝试使用lwjgl / Java制作游戏,但是当涉及到关卡创建时,我在尝试将我的实体放入ArrayList时遇到了多个问题。我稍后将在txt文件中创建级别,而我会将它们存储在那里,但是现在这是我唯一的选择。 当我尝试运行游戏时,我得到一个NullPointerException。
public class Level {
int levels = 10;
Player player;
@SuppressWarnings("unchecked")
ArrayList<Entity>[] entities = (ArrayList<Entity>[]) new ArrayList[50];
Enemy[] enemies = new Enemy[20]; //This it later going to be added in the entities arrayList
//The reason its a normal array is so that it would work with collision detection
//Pre-init of the levels should be done here
public Level(){
player = new Player(90, 40);
for(int i = 0; i <= levels; i++)
createLevels(i);
}
//Collision check
public void update(){
//Checking collision against enemies
for(int i = 0; i <= levels; i++ ){
Utilities.util.isColliding(player, enemies[i]);
}
}
/* LEVEL CREATION
*
* The first thing that is going to be in the "level editor" text file
* is which level the items are going to be added to. Like so:
* - level 0
*
* The entity adding is later going to be added in a text file as so:
* - Group entity xPos yPos Width Height
* - enemies enemy 60 60, 200, 100
*
* The player postition is the first two numbers in txt file,
* Player is also the last item that should be added to entities
*/
public void createLevels(int level){
System.out.println("Level " + level + " is being created.");
if(level == 0){
addEntity(player, level);
addEnemy(new Wall(40, 40, 200, 322), level);
//Adding all enemies to entities
for(int i = 0; i <= enemies.length; i++){
entities[level].add(enemies[i]);
}
}
System.out.println("Level " + level + " was created!");
}
private void addEntity(Entity ent, int level){
entities[level].add(ent);
}
private void addEnemy(Enemy nmy, int level){
enemies[level] = nmy;
}
我已经有这个问题很长一段时间了,我很想得到一些帮助。我知道这可能是一个非常无聊的问题,但请帮助我!
这是NullPointerException
Exception in thread "main" java.lang.NullPointerException
at com.sontvedt.engine.Level.addEntity(Level.java:119)
at com.sontvedt.engine.Level.createLevels(Level.java:59)
at com.sontvedt.engine.Level.<init>(Level.java:27)
at com.sontvedt.engine.Game.<init>(Game.java:14)
at com.sontvedt.engine.Window.initGame(Window.java:42)
at com.sontvedt.engine.Window.init(Window.java:36)
at com.sontvedt.engine.Window.main(Window.java:24)
第119行是addEntity方法创建
答案 0 :(得分:0)
异常发生在以下行:
entities[level].add(ent);
因此,entities
为空,或entities[level]
为空。
entities
不能为空,因为它已在此处初始化:
ArrayList<Entity>[] entities = (ArrayList<Entity>[]) new ArrayList[50];
因此,唯一可能的原因是entities[level]
为空。代码中是否存在创建新ArrayList并存储在entities
数组中的某个位置?我找不到任何。