用Java渲染高水平

时间:2018-08-13 05:56:01

标签: java null 2d

我正在用Java开发2D横屏游戏。渲染的所有块和敌人均为32x32px。当我尝试设置太大的关卡时,游戏将无法处理它们,这将使其滞后很多。因此,我要解决此问题的方法是仅使摄影机渲染可见的块,并且只有摄影机+ 200-300px可见的块运行其tick方法。这可能会使游戏的滞后时间减少。

代码:

所有类型的对象都有一个自己的类,该类扩展了一个称为GameObject的类,该类为它们提供了所需的所有方法(刻度方法,渲染,碰撞等)。在称为Handler的类中,将GameObject制成一个LinkedList,如下所示:

public LinkedList<GameObject> object = new LinkedList<GameObject>();

LinkedList内的所有内容都是这样运行的...

public void tick()
    for(int i = 0; i < object.size(); i++){
             GameObject tempObject = object.get(i);

             tempObject.tick(object);    

             if(tempObject.getId() == ID.MovingBlock){
                 velX_MB = tempObject.velX;
                 velY_MB = tempObject.velY;
             }
         }
}

...并以如下方式呈现:

public void render(Graphics g){
     for(int i = 0; i < object.size(); i++){
         GameObject tempObject = object.get(i);

         tempObject.render(g); 
     }
 }

我已尝试通过执行以下操作来仅渲染摄像机内部的块:

private GameObject player;

    for(int i = 0; i < object.size(); i++){   //searching through GameObject LinkedList 
             if(object.get(i).getId() == ID.Player){ //if found player
                 player = object.get(i);
             }        
         }

在那之后,我检查了这些块是否与播放器足够接近,可以在render方法中进行渲染;如果是,则我将它们渲染,如下所示:

public void render(Graphics g){

     for(int i = 0; i < object.size(); i++){
         GameObject tempObject = object.get(i);

         if(tempObject.getX() <= player.getX() + Game.xsize + 200 && tempObject.getX() >= player.getX() - Game.xsize - 200){ //this row got error
            tempObject.render(g);  
         }

     }
 }

但是这没有用,它给了我一个NullPointerException错误,指向前面显示的代码中标记的行。完整的错误消息:

Exception in thread "Thread-12" java.lang.NullPointerException
at game.main.Handler.render(Handler.java:53)
at game.main.Game.render(Game.java:363)
at game.main.Game.run(Game.java:302)
at java.lang.Thread.run(Unknown Source)

那只是render方法,但是我想运行它们时会一样。

感谢您抽出宝贵的时间。

编辑:我修复了空错误,并在tick()和render()中添加了我的旧方法,但是它仍然非常滞后。

0 个答案:

没有答案