Java-Gaming.org
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
Featured games (78)
games approved by the League of Dukes
Games in Showcase (406)
games submitted by our members
Games in WIP (293)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Why does this flicker so much?  (Read 883 times)
0 Members and 1 Guest are viewing this topic.
Offline johtib

Senior Newbie





« Posted 2003-04-26 15:20:33 »

Hi!

This is my first try at writing a game in Java. I've tried to set up a buffering strategy for my JFrame and then have an animation thread call repaint on the frame every 20 milliseconds. The contents of the window flickers heavily (much more than if I use an BufferedImage as back buffer for example).

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
82  
83  
84  
85  
86  
87  
88  
89  
90  
91  
92  
93  
94  
95  
96  
97  
98  
99  
/*
 * Created on Apr 26, 2003
 */

package wizards;

import java.awt.Graphics;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;

import wizards.gui.AnimationThread;
import wizards.gui.ImageLibrary;
import wizards.map.Map;
import wizards.map.Scenery;

/**
 * @author Johan Tibell
 */

public class Wizards extends JFrame
{
      public static int MAP_WIDTH = 15;
      public static int MAP_HEIGHT = 15;
      public static int TILE_SIZE = 32;
     
      private Map map;
      private BufferStrategy strategy;
     
      public Wizards()
      {
            // Set the window's title.
           super("Wizards");
           
            // Set the application to exit on window closure.
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           
            // Some other code removed here!
           
            // Set the window's size.                                    
           setSize(MAP_WIDTH * TILE_SIZE, MAP_HEIGHT * TILE_SIZE);
            setVisible(true);

            // Create a double buffer.
           createBufferStrategy(2);
            strategy = getBufferStrategy();
           
            new AnimationThread(this).start();
      }
     
      public void paint(Graphics g)
      {
            super.paint(g);
            Graphics offscreenGraphics = strategy.getDrawGraphics();
            // Basically draws the same buffered image a couple of times.
           map.draw(offscreenGraphics);
            strategy.show();
      }
     
      /**
       * Entry point of application. Creates a window and starts the application.
       * @param args
       */

      public static void main(String[] args)
      {
            new Wizards();
      }
}

// ************************************************************************

/*
 * Created on Apr 26, 2003
 */

package wizards.gui;

import java.awt.Component;

/**
 * @author Johan Tibell
 */

public class AnimationThread extends Thread
{
      private Component target;
     
      public AnimationThread(Component target)
      {
            this.target = target;      
      }
     
      public void run()
      {
            while(Thread.currentThread() == this)
            {
                  target.repaint();
           
                  try      {
                        Thread.sleep(20);
                  } catch (InterruptedException e) {}
            }
      }
}
Offline jbanes

JGO Coder


Projects: 1


"Java Games? Incredible! Mr. Incredible, that is!"


« Reply #1 - Posted 2003-04-26 15:42:18 »

That's because you actually have to *use* the BufferStrategy  once you've created it. Change your code to do paint(strategy.getDrawGraphics()) instead of repaint() and you'll be fine.

Java Game Console Project
Last Journal Entry: 12/17/04
Offline johtib

Senior Newbie





« Reply #2 - Posted 2003-04-26 17:39:48 »

Thanks!

I actually added an render() method instead which I had my animation thread call. I'm experiencing some strange behaviour though. Sometimes I get a NullPointerException when starting the application. Can the createBufferStrategy() or getBufferStrategy() fail?

EDIT: After some testing I found that it was my buffer strategy which was a null reference. How's this possible?

- Johan
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
 
Try the Free Demo of Revenge of the Titans

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

The invasion has landed! On Mars! And you're there to beat 'em!
cubemaster21 (84 views)
2013-05-17 21:29:12

alaslipknot (92 views)
2013-05-16 21:24:48

gouessej (123 views)
2013-05-16 00:53:38

gouessej (117 views)
2013-05-16 00:17:58

theagentd (127 views)
2013-05-15 15:01:13

theagentd (114 views)
2013-05-15 15:00:54

StreetDoggy (158 views)
2013-05-14 15:56:26

kutucuk (180 views)
2013-05-12 17:10:36

kutucuk (180 views)
2013-05-12 15:36:09

UnluckyDevil (187 views)
2013-05-12 05:09:57
Complex number cookbook
by Roquen
2013-04-24 12:47:31

2D Dynamic Lighting
by Oskuro
2013-04-17 16:46:12

2D Dynamic Lighting
by Oskuro
2013-04-17 16:45:57

2D Dynamic Lighting
by Oskuro
2013-04-17 16:23:20

Noise (bandpassed white)
by Roquen
2013-04-05 17:36:01

Noise (bandpassed white)
by Roquen
2013-04-03 16:17:38

Java Data structures
by Roquen
2013-03-29 13:21:12

Topic Request
by kutucuk
2013-03-22 21:42:01
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!
Page created in 0.094 seconds with 20 queries.