8
\$\begingroup\$

I am making a space-themed shooter game, and I need to render many "lasers" at the same time. I am using the library Slick2D, a wrapper around lwjgl. Unfortunately, when there are a lot of these "lasers" on the screen at one time, the game drops from its usual 60 FPS to around 30 or even 20.

Things I've noticed:

  • Not calling drawSelf = no lag
  • Not calling .fill = no lag
  • As is = lag as stated in title

public void drawSelf(Graphics g){
    int[] pos = tr.toSlick(blast.getPosition());
    g.setColor(Color.green);
    Circle circle = new Circle(pos[0], pos[1], tr.xscale/2);
    g.fill(circle);
}

public int[] toSlick(float x, float y){
    int [] output = new int[2];
    output[0] = (int)(x*xscale+width/2);
    output[1] = (int)(-1*y*yscale+height/2);
    return output;
}

tr is the coordinate transformer object (I'm using jbox2d physics, but that's not impacting anything), and blast is the "Body".

Can I have some suggestions on making this code faster or am I stuck because of Slick's internals?

\$\endgroup\$
2
  • 1
    \$\begingroup\$ What happens if you remove the .fill() call? \$\endgroup\$ Commented Aug 21, 2015 at 4:48
  • \$\begingroup\$ @200_success hmm, I have not tried that. I will update my question when I do. \$\endgroup\$
    – Blue
    Commented Aug 21, 2015 at 11:09

1 Answer 1

3
\$\begingroup\$

By looking at documentation, I found another method that is faster at drawing many circles.

I replaced last 2 lines in drawSelf with:

g.fillOval(pos[0],pos[1],tr.xscale,tr.yscale);

and I got a lot less lag. Turns out it did have to do with internals.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.