Java-Gaming.org Hi !
Featured games (81)
games approved by the League of Dukes
Games in Showcase (513)
Games in Android Showcase (119)
games submitted by our members
Games in WIP (576)
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 1093 times)
0 Members and 1 Guest are viewing this topic.
Offline johtib

Senior Newbie





« Posted 2003-04-26 13: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 13: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 15: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.

 

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

The first screenshot will be displayed as a thumbnail.

Longarmx (38 views)
2014-10-17 03:59:02

Norakomi (28 views)
2014-10-16 15:22:06

Norakomi (24 views)
2014-10-16 15:20:20

lcass (28 views)
2014-10-15 16:18:58

TehJavaDev (53 views)
2014-10-14 00:39:48

TehJavaDev (54 views)
2014-10-14 00:35:47

TehJavaDev (43 views)
2014-10-14 00:32:37

BurntPizza (64 views)
2014-10-11 23:24:42

BurntPizza (36 views)
2014-10-11 23:10:45

BurntPizza (78 views)
2014-10-11 22:30:10
Understanding relations between setOrigin, setScale and setPosition in libGdx
by mbabuskov
2014-10-09 22:35:00

Definite guide to supporting multiple device resolutions on Android (2014)
by mbabuskov
2014-10-02 22:36:02

List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50

List of Learning Resources
by SilverTiger
2014-07-31 16:26:06
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
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!