2014-01-02 2 views
-1

Это мой первый пост, размещенный здесь. Я искал решение, но пока не повезло. Я довольно новичок в кодировании, поэтому заранее извиняюсь за ужасное программирование faux pas, так или иначе я использую java и slick2d, и я кодирую игру.slick2d image java.lang.NullPointerException

Проблема в том, что я запускаю программу и пытаюсь нарисовать врага, она дает мне исключение NullPointerException, я знаю, что это не связано с образом изображения, поскольку я пробовал его с другими изображениями которые работают отлично. Я думаю, что проблема заключается в том, что она не распознает значение изображения, но я пробовал все, что мог, чтобы исправить это, и пока не повезло. Я уверен, что есть очень простое решение, и у меня были проблемы с этим, поэтому я просто задавался вопросом, может ли кто-нибудь дать мне руку. Во всяком случае вот код. Заранее спасибо.

package javagame; 


import java.util.ArrayList; 

import javax.swing.Timer; 

import org.newdawn.slick.*; 
import org.newdawn.slick.openal.Audio; 
import org.newdawn.slick.openal.AudioLoader; 
import org.newdawn.slick.state.*; 


public class Play extends BasicGameState{ 
     int time = 0; 
     int roomNo = 0; 
     Image interfaceBackground, spriteImage, background, enemyImage, projectileImageLeft, projectileImageRight, projectileImageUp, projectileImageDown, health0, health1, health2, health3, health4, health5, health6, health7, health8, health9, health10; 
     Audio projectileSound; 
     Sprite pChar = new Sprite(spriteImage, 400f, 400f); 
     Sprite enemy = new Enemy(enemyImage, 0f, 0f); 
     ArrayList<Enemy> enemyList = new ArrayList<Enemy>(); 
     //Enemy skeleton = new Enemy(skeletonImage, 200, 200, 50, 50); 

     public Play(int state) { 
     } 
     @Override 
     public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{ 
       projectileImageLeft = new Image("res/projectile2.png"); 
       projectileImageRight = new Image("res/projectile3.png"); 
       projectileImageUp = new Image("res/projectile1.png"); 
       projectileImageDown = new Image("res/projectile4.png"); 
       interfaceBackground = new Image("res/interfaceBackground.png"); 
       health0 = new Image("res/HP0.png"); 
       health1 = new Image("res/HP1.png"); 
       health2 = new Image("res/HP2.png"); 
       health3 = new Image("res/HP3.png"); 
       health4 = new Image("res/HP4.png"); 
       health5 = new Image("res/HP5.png"); 
       health6 = new Image("res/HP6.png"); 
       health7 = new Image("res/HP7.png"); 
       health8 = new Image("res/HP8.png"); 
       health9 = new Image("res/HP9.png"); 
       health10 = new Image("res/HP10.png"); 
       enemyImage = new Image("res/skeleton.png"); 
       spriteImage = new Image("res/sprite2.png"); 
       background = new Image("res/background.png"); 
       background.setFilter(Image.FILTER_NEAREST); 
       spriteImage.setFilter(Image.FILTER_NEAREST); 
       projectileImageLeft.setFilter(Image.FILTER_NEAREST); 
       projectileImageRight.setFilter(Image.FILTER_NEAREST); 
       projectileImageUp.setFilter(Image.FILTER_NEAREST); 
       projectileImageDown.setFilter(Image.FILTER_NEAREST); 
       interfaceBackground.setFilter(Image.FILTER_NEAREST); 
       enemyImage.setFilter(Image.FILTER_NEAREST); 

       } 

     public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException{ 
       Input input= gc.getInput(); 
       if(input.isKeyDown(Input.KEY_W)){pChar.MoveUp(spriteImage);} 
       if(input.isKeyDown(Input.KEY_S)){pChar.MoveDown(spriteImage);} 
       if(input.isKeyDown(Input.KEY_A)){pChar.MoveLeft(spriteImage);} 
       if(input.isKeyDown(Input.KEY_D)){pChar.MoveRight(spriteImage);} 
       if(pChar.projectileCD > 200){ 
       if(input.isKeyDown(Input.KEY_UP)){pChar.shootUp(projectileImageUp);} 
       else if(input.isKeyDown(Input.KEY_DOWN)){pChar.shootDown(projectileImageDown);} 
       else if(input.isKeyDown(Input.KEY_LEFT)){pChar.shootLeft(projectileImageLeft);} 
       else if(input.isKeyDown(Input.KEY_RIGHT)){pChar.shootRight(projectileImageRight);} 
       } 
       pChar.update(); 
       enemy.update(); 
       enemy.generate(); 
       if(pChar.Health < 1){ 
         sbg.enterState(3); 
       } 
       time += 1; 
       roomNo = pChar.roomNo; 
       for(Enemy enem: enemyList){ 
         enem.update(); 

       } 

     } 
     public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{ 
       background.draw(0, 100, 800, 500); 
       spriteImage.draw(pChar.getxPos(), pChar.getyPos(), 120f, 80f); 
       pChar.draw(); 
       enemy.draw(); 
       interfaceBackground.draw(0,0,800,100); 
       g.setColor(Color.black); 
       g.drawString("Time:" + time/50, 50, 30); 
       g.drawString("Room Number:" +roomNo, 300, 30); 
       switch(pChar.Health){ 
       case 0: 
         health0.draw(600, 20, 150, 65); 
         break; 
       case 1: 
         health1.draw(600, 20, 150, 65); 
         break; 
       case 2: 
         health2.draw(600, 20, 150, 65); 
         break; 
       case 3: 
         health3.draw(600, 20, 150, 65); 
         break; 
       case 4: 
         health4.draw(600, 20, 150, 65); 
         break; 
       case 5: 
         health5.draw(600, 20, 150, 65); 
         break; 
       case 6: 
         health6.draw(600, 20, 150, 65); 
         break; 
       case 7: 
         health7.draw(600, 20, 150, 65); 
         break; 
       case 8: 
         health8.draw(600, 20, 150, 65); 
         break; 
       case 9: 
         health9.draw(600, 20, 150, 65); 
         break; 
       case 10: 
         health10.draw(600, 20, 150, 65); 
         break; 
       } 
       } 



@Override 
     public int getID(){ 
       return 1; 
     } 
} 
//Sprite 
package javagame; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.Random; 

import org.newdawn.slick.Image; 
import org.newdawn.slick.SlickException; 
import org.newdawn.slick.tests.xml.Entity; 

public class Sprite{ 
     ArrayList<Projectile> projectileList = new ArrayList<Projectile>(); 
     ArrayList<Enemy> enemyList = new ArrayList<Enemy>(); 
     protected static float xPos = 400f, yPos = 400f; 
    private static float Speed = 3.5f, ProjectileSpeed = 8f; 
     static int AttackSpeed = 6, Health = 10; 
     private int Damage = 0; 
     int projectileCD = 100, roomNo = 1; 
     Image SpriteImage, ProjectileImage, EnemyImage; 
     Random number = new Random(); 

     public Sprite(Image spriteImage, float x, float y) { 
       SpriteImage = spriteImage;    
     } 
     public static float getSpeed(){ 
       return Speed; 
     } 
     public static float getProjectileSpeed(){ 
       return ProjectileSpeed; 
     } 
     public static int getHealth(){ 
       return Health; 
     } 
     public static int getAttack(){ 
       return AttackSpeed; 
     } 
     public int getDamage(){ 
       return Damage; 
     } 
     public float getxPos(){ 
       return xPos; 
     } 
     public float getyPos(){ 
       return yPos; 
     } 
     public void MoveLeft(Image spriteImage){ 
       if (xPos < 50){} 
       else{xPos -= Speed;} 
     } 
     public void MoveRight(Image spriteImage){ 
       if(xPos > 670){} 
       else if(((yPos > 290)&&(yPos < 380))&&(xPos>669)){ 
           roomNo++; 
           xPos += 150; 
           //next room 
           } 
       else{xPos += Speed;} 
     } 
     public void MoveUp(Image spriteImage){ 
       if(yPos < 150){} 
       else{yPos -= Speed;} 
     } 
     public void MoveDown(Image spriteImage){ 
       if(yPos > 420){} 
       else {yPos += Speed;} 
     } 
     public void shootUp(Image projectileImage){ 
       projectileList.add(new Projectile(projectileImage, xPos + 15, yPos, 0f, -8f)); 
       projectileCD = 0; 
       Health = Health -1; 
     } 
     public void shootDown(Image projectileImage){ 
       projectileList.add(new Projectile(projectileImage, xPos + 35, yPos + 60, 0f, 8f)); 
       projectileCD = 0; 
     } 
     public void shootLeft(Image projectileImage){ 
       projectileList.add(new Projectile(projectileImage, xPos , yPos + 30, -8f, 0f)); 
       projectileCD = 0; 
     } 
     public void shootRight(Image projectileImage){ 
       projectileList.add(new Projectile(projectileImage, xPos + 60, yPos + 30, 8f, 0f)); 
       projectileCD = 0; 
     } 
     public void draw(){ 
       for(Projectile proj: projectileList){ 
         proj.draw(); 
       } 
       for(Enemy enem: enemyList){ 
         enem.draw(); 
       } 
     } 
       public void update(){ 
         projectileCD = projectileCD + AttackSpeed; 
         for(Projectile proj: projectileList){ 
           proj.move(); 
           /*if(proj.xPos > 670){ 
             projectileList.remove(this); 
           } 
           else if(proj.xPos < 80){ 
             projectileList.remove(this); 
           } 
           else if(proj.yPos > 420){ 
             projectileList.remove(this); 
             } 
           else if(proj.yPos < 80){ 
             projectileList.remove(this); 
           }*/ 
         } 

       } 
       public void generate(){ 
         switch(number.nextInt(3)){ 
         case 1: 
           enemyList.add(new Enemy(SpriteImage, 100f, 100f)); 
           break; 
         case 2: 
           enemyList.add(new Enemy(ProjectileImage, 100f, 100f)); 
           break; 
         case 3: 
           enemyList.add(new Enemy(SpriteImage, 100f, 100f)); 
           break; 
         }  
       } 
     } 
//Enemy 
package javagame; 

import java.util.Random; 

import org.newdawn.slick.Image; 
import org.newdawn.slick.SlickException; 

public class Enemy extends Sprite{ 
     float xSpawn = 0, ySpawn = 0, Dx =0, Dy = 0, xPos = 0, yPos, Speed = 0; 
     int AttackSpeed = 0, Health = 0, Damage; 
     Image EnemyImage; 
     Random number = new Random(); 
     public Enemy(Image enemyImage, float x, float y) { 
       super(enemyImage, x, y); 
       EnemyImage = enemyImage; 
       AttackSpeed = number.nextInt(6); 
       Damage = number.nextInt(3); 
       Health = number.nextInt(4); 
       Speed = number.nextInt(4); 
     } 
     public void draw(){ 
       EnemyImage.draw(xPos, yPos); <---- This is where I get the error 
     } 
} 

(http://pastebin.com/PggQNWgi)

ответ

0

Вы не инстанцирован значение YPos. Вы устанавливаете xPos в 0, но не yPos, поэтому есть хорошая вероятность, что значение не существует.

+0

Изменил это сейчас, я возился с параметрами, и, я думаю, я забыл изменить его. к сожалению все еще не работает. – user3153895

Смежные вопросы