Java-Gaming.org    
Featured games (81)
games approved by the League of Dukes
Games in Showcase (487)
Games in Android Showcase (110)
games submitted by our members
Games in WIP (552)
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  
  Cannot get only 1 box to move. Java 1.7 + LWJGL 2.9.1 in NetBeans  (Read 487 times)
0 Members and 1 Guest are viewing this topic.
Offline Stoofus

Junior Newbie





« Posted 2014-01-22 16:38:00 »

I am going through several tutorials and managed to create a display with 2 rendered squares. The problem I have is that when I move one square, the other moves at the same time. I only want one of the squares to move. I did a search here and used Google, but could not locate an article on this specific issue. Below is the code I am using, any ideas? I know I have to add a timer (ticks) and more, but I am trying to get a prototype done.

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  
100  
101  
102  
103  
104  
105  
106  
107  
108  
109  
110  
111  
112  
113  
114  
115  
116  
117  
118  
119  
120  
121  
122  
123  
124  
125  
126  
127  
128  
129  
130  
131  
132  
133  
134  
135  
136  
137  
138  
139  
140  
141  
142  
143  
144  
145  
146  
147  
148  
149  
150  
151  
152  
153  
154  
155  
156  
157  
158  
159  
160  
161  
162  
163  
164  
165  
166  
167  
168  
169  
170  
171  
172  
173  
174  
175  
176  
177  
178  
179  
180  
181  
182  
183  
184  
185  
186  
187  
188  
189  
190  
191  
192  
193  
194  
195  
196  
197  
198  
199  
200  
201  
202  
203  
204  
205  
206  
207  
208  
209  
210  
211  
212  
213  
214  
215  
216  
217  
218  
219  
220  
221  
222  
223  
224  
225  
226  
227  
228  
229  
230  
231  
232  
233  
234  
235  
236  
237  
238  
239  
240  
241  
242  
243  
244  
245  
246  
247  
248  
249  
250  
251  
252  
253  
254  
255  
256  
257  
258  
259  
260  
261  
262  
263  
264  
265  
266  
267  
268  
269  
270  
271  
272  
273  
274  
275  
276  
277  
278  
279  
280  
281  
282  
283  
284  
285  
286  
287  
288  
289  
290  
291  
292  
293  
294  
295  
296  
297  
298  
299  
300  
301  
302  
303  
304  
305  
306  
307  
308  
309  
310  
311  
312  
313  
314  
315  
316  
317  
318  
319  
320  
321  
322  
323  
324  
325  
326  
327  
328  
329  
330  
package worldofadventure;

/**
 *
 * @author Stoofus
 */


// Start imports
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.util.glu.GLU.*;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;

// End imports

// Start class Main
public class Main
{

    /**
     * @param args the command line arguments
     */

   
    // Start variables
   static String TITLE = "World of Adventure - PreAlpha version 0.0.1";
    static int S_WIDTH = 800; // Screen Width
   static int S_HEIGHT = 600; // Screen Height
   static final Logger LOGGER = Logger.getLogger( Main.class.getName() );
    int squareSize; // Size of the square
   int squareX; // Horizontal location of the square
   int squareY; // Vertical location of the square
   int squareZ; // Depth of the square relative to the viewer
   
    int rectSize; // Size of rectangle
   int rectX; // Horizontal location of rectangle
   int rectY; // Vertical location of rectangle
   int rectZ; // Depth of rectangle relative to the viewer
   // End variables
   
    // Add a log handler and create a log file
   static
    {
        try
        {
            LOGGER.addHandler( new FileHandler("errors.log", true));
        }
        catch( IOException ex )
        {
            LOGGER.log( Level.WARNING, ex.toString(), ex );
        }
    } // End log handler
   
    // Start main program
   public static void main(String[] args)
    {
        // Start the main GUI
       mainGUI myGUI = new mainGUI(); // Create myGUI object
       myGUI.setTitle( TITLE ); // Set title
       myGUI.setVisible( true ); // Set visable to true
       
    } // End main program
   
    // Start class startGame
   public void startGame()
    {
        Main main = null; // Create a null object
       try
        {
            // Print out mapped keys
           System.out.println( "Keys:" );
            System.out.println( "Q = Shrink" );
            System.out.println( "E = Grow" );
            System.out.println( "W = Up" );
            System.out.println( "S = Down" );
            System.out.println( "A = Left" );
            System.out.println( "D = Right" );
            System.out.println( "Esc = Exit" );
            main = new Main(); // Create an instance of the object
           main.create(); // Create the display
           main.run(); // Run the display
       }
        // Ooops, record what went wrong
       catch( Exception ex )
        {
            LOGGER.log( Level.SEVERE, ex.toString(), ex );
        }
        finally
        {
            if (main != null )
            {
                main.destroy(); // Destroy the instance of the object
           }
        }
    } // End class startGame
   
    // Start Main constructor
   public Main()
    {
        // Initialize variables
       squareSize = 100; // Initial size of square
       squareX = 55; // Initial X (Horizontal) position of square
       squareY = 50; // Initial Y (Vertical) position of square
       squareZ = 0; // Initial Z position of square
       
        rectSize = 100; // Initial size of rectangle
       rectX = 200; // Initial X (Horizontal) position of rectangle
       rectY = 50; // Initial vertical position of rectangle
       rectZ = 0; // Initial Z position of rectangle
   } // End Main constructor
   
    // Start class create
   public void create() throws LWJGLException
    {
        // Display
       // S_WIDTH = Display Width
       // S_HEIGHT = Display Heigh
       Display.setDisplayMode( new DisplayMode( S_WIDTH, S_HEIGHT ) );
        Display.setFullscreen( false );
        Display.setTitle( TITLE ); // Same title of mainGUI
       Display.create(); // Create the display object
       
        // Create keyboard
       Keyboard.create();
       
        // Create and ungrab mouse
       Mouse.setGrabbed( false );
        Mouse.create();
       
        // Initialize OpenGL
       initGL();
        resizeGL();
    } // End class create
   
    // Start class destroy
   // This method already checks if they have been created
   // before destroying them
   public void destroy()
    {
        Mouse.destroy();
        Keyboard.destroy();
        Display.destroy();
    } // End class destroy
   
    // Start class initGL
   // Creates the background
   public void initGL()
    {
        // 2D Initialization
       glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
        glDisable( GL_DEPTH_TEST );
        glDisable( GL_LIGHTING );
       
    } // End class initGL
   
    // Start class processKeyboard
   public void processKeyboard()
    {
        // Square's X axis
       if( Keyboard.isKeyDown( Keyboard.KEY_W ) )
        {
            // Move square up
           ++squareY;
        }
        if ( Keyboard.isKeyDown( Keyboard.KEY_S ) )
        {
            // Move square down
           --squareY;
        }
       
        // Square's Z axis
       if ( Keyboard.isKeyDown( Keyboard.KEY_A ) )
        {
            // Move square left
           --squareX;
        }
        if ( Keyboard.isKeyDown( Keyboard.KEY_D ) )
        {
            // Move square right
           ++squareX;
        }
       
        // Shrink or Grow square
       if ( Keyboard.isKeyDown( Keyboard.KEY_Q ) )
        {
            // Shrink square
           --squareSize;
        }
        if ( Keyboard.isKeyDown( Keyboard.KEY_E ) )
        {
            // Grow square
           ++squareSize;
        }
    } // End class processKeyboard
   
    // Start class processMouse
   public void processMouse()
    {
        // Enter mouse code here
   } // End class processMouse
   
    // Start class render
   public void render()
    {
        glClear( GL_COLOR_BUFFER_BIT );
        glLoadIdentity();
       
        // Translate into view for square
       glTranslatef( squareX, squareY, 0.0f );
        glRotatef( squareZ, 0.0f, 0.0f, 1.0f );
        glTranslatef( -( squareSize >> 1 ), -( squareSize >> 1 ), 0.0f );
        glColor3f( 0.0f, 0.5f, 0.5f );
       
        // Square
       glBegin( GL_QUADS );
            glTexCoord2f( 0.0f, 0.0f ); glVertex2f( 0.0f, 0.0f );
            glTexCoord2f( 1.0f, 0.0f ); glVertex2f( squareSize, 0.0f );
            glTexCoord2f( 1.0f, 1.0f ); glVertex2f( squareSize, squareSize );
            glTexCoord2f( 0.0f, 1.0f ); glVertex2f( 0.0f, squareSize );
        glEnd();
       
        // Translate into view for rectangle
       glTranslatef( rectX, rectY, 0.0f );
        glRotatef( rectZ, 0.0f, 0.0f, 1.0f );
        glTranslatef( -( rectSize >> 1 ), -( rectSize >> 1 ), 0.0f );
        glColor3f( 0.0f, 0.5f, 0.5f );
       
        glBegin( GL_QUADS );
            glTexCoord2f( 0.0f, 0.0f ); glVertex2f( 0.0f, 0.0f );
            glTexCoord2f( 1.0f, 0.0f ); glVertex2f( rectSize, 0.0f );
            glTexCoord2f( 1.0f, 1.0f ); glVertex2f( rectSize, rectSize );
            glTexCoord2f( 0.0f, 1.0f ); glVertex2f( 0.0f, rectSize );
        glEnd();
       
    } // End class render
   
    // Start class resizeGL
   public void resizeGL()
    {
        // 2D Scene
       glViewport( 0,0, S_WIDTH, S_HEIGHT );
        glMatrixMode( GL_PROJECTION );
        glLoadIdentity();
        gluOrtho2D( 0.0f, S_WIDTH, 0.0f, S_HEIGHT );
        glPushMatrix();
        glMatrixMode( GL_MODELVIEW );
        glLoadIdentity();
        glPushMatrix();
    } // End class resizeGL
   
    // Start class run
   public void run()
    {
        while( !Display.isCloseRequested() &&
                !Keyboard.isKeyDown( Keyboard.KEY_ESCAPE ) )
        {
            if ( Display.isVisible() )
            {
                processKeyboard();
                processMouse();
                update();
                render();
            }
            else
            {
                if( Display.isDirty() )
                {
                    render();
                }
                try
                {
                    Thread.sleep( 100 );
                }
                catch( InterruptedException ex )
                {
                   
                }
            }
            Display.update();
            Display.sync( 60 );
        }
    } // End class run
   
    // Start class update
   public void update()
    {
       
        int squareEdge = (squareSize / 2 ); // Find the edge via its size
       int rectEdge = ( rectSize / 2 ); // Ditto
       
        // Don't go offscreen from bottom
       if ( squareY < 50 )
        {
            squareY = 50;
        }
        // Don't go offscreen from top
       if ( squareY > S_HEIGHT - squareEdge )
        {
            squareY = S_HEIGHT - squareEdge;
        }
        // Don't go offscreen from left
       if ( squareX < squareEdge)
        {
            squareX = squareEdge;
        }
        // Don't go offscreen from right
       if ( squareX > S_WIDTH - squareEdge )
        {
            squareX = S_WIDTH - squareEdge;
        }
       
        // Don't get too small to see
       if ( squareSize < 5 )
        {
            squareSize = 5;
        }
        // Don't get bigger than the screen
       if ( squareSize > S_HEIGHT )
        {
            squareSize = S_HEIGHT;
        }
    } // End class update
   
} // End class Main


Thanks to Troubleshoots for the code tag suggestion! I kept comments to assist with the troubleshooting.
Offline Troubleshoots

JGO Knight


Medals: 36
Exp: 7-9 months


Damn maths.


« Reply #1 - Posted 2014-01-22 16:47:04 »

Please wrap the code in ["code"] ... [/"code"] tags. It'll make it much easier for us to read.
Note: Remove the quotation marks.

Also, removing some of the comments might make it slightly easier to read.

Why are all OpenGL tutorials written in Brainf**k?
Offline zFollette

Junior Member


Exp: 2 years


I like jokes


« Reply #2 - Posted 2014-01-22 18:00:48 »

Instead of translating into view for each one, why not draw the square and rectangle at their coordinates?

Humor will keep you alive.
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Stoofus

Junior Newbie





« Reply #3 - Posted 2014-01-22 18:59:38 »

Thanks for the suggestion but when I comment out the translate code for both, it only shows 1 white unmovable square instead of 2 blue squares which would move in unison.
Offline Stoofus

Junior Newbie





« Reply #4 - Posted 2014-01-22 20:42:05 »

No one yet? Wink

I created a block class and extended that class. created two more blocks using the classes but still the same issue remains. Also, it seems that OpenGL (the way I am implementing it) is setting the X location relative to the last block.

How would I set it so that the blocks are in their absolute position? Also, any more ideas on the movement issue?

Thanks again!
Offline Troubleshoots

JGO Knight


Medals: 36
Exp: 7-9 months


Damn maths.


« Reply #5 - Posted 2014-01-22 21:45:19 »

The issue is with the rendering. OpenGL uses matrices for translating vertices. The translation, rotate and scale transformations all change the state of the modelview matrix; that is the combined model and view matrix which is used to hold transformations of the vertices relative to the camera. By that I mean, if you wanted the camera to be at (50, 0, 0) in the world, then you would call glTranslatef(-50f, 0f, 0f). That would change the state of the modelview matrix, meaning that all vertices are drawn at (-50f, 0f, 0f). This would be effectively moving the world instead of the camera, since the camera is at a fixed position, giving the same effect as if you were to move the camera +50f. These transformations however stack up, which is why they're not moving independently.

If you want all your transformations to occur from the origin, you need to do the inverse of them after drawing your vertices. So where you call
glTranslatef( squareX, squareY, 0.0f )
, you will then want to call
glTranslatef( -squareX, -squareY, 0.0f )
after you've drawn the square. This will effectively transform the matrix back to the origin. You do the same with scale and rotate operations.

The function
glLoadIdentity()
changes the state of the matrix back to the identity matrix; a matrix which in simple you can think of as a number 0; it effectively resets the matrix.

I've tried to explain all of this in laymans terms, but if you want to read more about the matrix transforms and if you want to see how the matrices are effected, read here. Don't worry if you're extremely confused by the way; as a beginner to OpenGL just 5 weeks ago I was too. At the moment you seem to be learning the fixed function pipeline which is version 1.1 to 1.5, and that is fine because it's a good way to get to know the basics, but the fixed function pipeline is very old and slow. The programmable pipeline begins at version 2.0 and is a lot more complicated, as you have to deal with all the matrices yourself, so for future reference when you want to progress to version 2.0, here's a good book to read and the LWJGL code for the chapters. Definitely bookmark it. Smiley

Oh and here's a really good tutorial series by SHC which mainly uses the fixed function pipeline, but is a nice introduction to LWJGL.

Why are all OpenGL tutorials written in Brainf**k?
Offline Danny02
« Reply #6 - Posted 2014-01-22 22:05:36 »

don't do the inverse operation, use the matrix push and pop functions before and after rendering a object.
Offline Stoofus

Junior Newbie





« Reply #7 - Posted 2014-01-23 12:55:59 »

Thank you for your suggestions! I will check out the links and try your suggestions today then will reply with the results.

While programming is not entirely new to me, using LWJGL with Java is. Smiley
Offline Stoofus

Junior Newbie





« Reply #8 - Posted 2014-01-23 13:18:49 »

I tried the inverse operation and it only rendered one square. Then I tried the matrix push and pop method, still drew all three squares and they moved in unison.

My rendering code for the push and pop method, which I am sure are called in the wrong spots:
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  
public void render()
    {
        glClear( GL_COLOR_BUFFER_BIT );
        glLoadIdentity();
       
        // Translate into view for square

        glTranslatef( squareX, squareY, 0.0f );
        glRotatef( squareZ, 0.0f, 0.0f, 1.0f );
        glTranslatef( -( squareSize >> 1 ), -( squareSize >> 1 ), 0.0f );
        glColor3f( 1.0f, 0.5f, 0.5f );

        glPushMatrix();
        glPopMatrix();
       
        // Square
       glBegin( GL_QUADS );
            glTexCoord2f( 0.0f, 0.0f ); glVertex2f( 0.0f, 0.0f );
            glTexCoord2f( 1.0f, 0.0f ); glVertex2f( squareSize, 0.0f );
            glTexCoord2f( 1.0f, 1.0f ); glVertex2f( squareSize, squareSize );
            glTexCoord2f( 0.0f, 1.0f ); glVertex2f( 0.0f, squareSize );
        glEnd();
       
        glPushMatrix();
        glPopMatrix();
       
        // Translate into view for myBlock
       glTranslatef( myBlock.getX(), myBlock.getY(), 0.0f );
        glRotatef( myBlock.getZ(), 0.0f, 0.0f, 1.0f );
        glTranslatef( -( myBlock.blockSize >> 1 ), -( myBlock.blockSize >> 1 ), 0.0f );
        glColor3f( 0.0f, 0.5f, 0.5f );
       
        glPushMatrix();
        glPopMatrix();
       
        // myBlock
       glBegin( GL_QUADS );
            glTexCoord2f( 0.0f, 0.0f ); glVertex2f( 0.0f, 0.0f );
            glTexCoord2f( 1.0f, 0.0f ); glVertex2f( myBlock.blockSize, 0.0f );
            glTexCoord2f( 1.0f, 1.0f ); glVertex2f( myBlock.blockSize, myBlock.blockSize );
            glTexCoord2f( 0.0f, 1.0f ); glVertex2f( 0.0f, myBlock.blockSize );
        glEnd();

        glPushMatrix();
        glPopMatrix();
       
        // Translate into view for myDirt

        glTranslatef( myDirt.getX(), myDirt.getY(), 0.0f );
        glRotatef( myDirt.getZ(), 0.0f, 0.0f, 1.0f );
        glTranslatef( -( myDirt.blockSize >> 1 ), -( myDirt.blockSize >> 1 ), 0.0f );
        glColor3f( 0.0f, 0.5f, 0.5f );
       
        glPushMatrix();
        glPopMatrix();
       
       
        // myDirt
       glBegin( GL_QUADS );
            glTexCoord2f( 0.0f, 0.0f ); glVertex2f( 0.0f, 0.0f );
            glTexCoord2f( 1.0f, 0.0f ); glVertex2f( myDirt.blockSize, 0.0f );
            glTexCoord2f( 1.0f, 1.0f ); glVertex2f( myDirt.blockSize, myDirt.blockSize );
            glTexCoord2f( 0.0f, 1.0f ); glVertex2f( 0.0f, myDirt.blockSize );
        glEnd();
       
        glPushMatrix();
        glPopMatrix();
       
    } // End class render


Upon further reading, it appears that when I move, it moves the camera, not the block. It would appear to move the block when it is the only thing drawn on the screen. But when there are more blocks on the screen, the perspective appears to change and all appear to move. Would it be safe to say that it is the camera I am moving and not the block? If so, I would need to modify the code to make it more apparent that it is the camera that is being moved and not the block.
Offline Danny02
« Reply #9 - Posted 2014-01-23 13:28:43 »

do a push before rendering and a pop after (push save matrix, pop load). So the other way around.
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Troubleshoots

JGO Knight


Medals: 36
Exp: 7-9 months


Damn maths.


« Reply #10 - Posted 2014-01-23 13:32:23 »

The camera is fixed at (0, 0) in the window space. You can not move the camera.
You're using push and pop in the wrong way.

You have to wrap all the transformations and draw calls between push and pop. Push essentially creates a copy of the matrix for you to modify, then when you pop it, it means that it hasn't modified the existing matrix. This is designed to allow you to easily apply a uniform transformation for the camera. As I said in my previous reply, applying a uniform transformation for the camera is essentially uniformly transformation the world by the negative camera transformation, giving the perception that the camera has moved.

Edit: Just to try and be clear, when I say the world, I mean 'all the vertices that are to be drawn'. Again, the world can't move; it is just a theoretical undefined space. When you draw a vertex, you're drawing that relative to the origin which is (0, 0, 0), and the scale of each axis is essentially defined by glViewport(), else it goes from (-1, +1) on the X and Y axis in window space and (0, +1) on the Z axis. The scale of the viewport is defined relative to the camera definition, which for 2D is glOrtho. Therefore, when you specify the parameters of glOrtho(), that essentially tells OpenGL the standard position on the axis' which you can see. When you defined glViewport(), it specifies how those range of values should map to the screen, which allows OpenGL to calculate how to scale the axis' of the world, and how to map the vertices that you want to draw to the screen.

Why are all OpenGL tutorials written in Brainf**k?
Offline Stoofus

Junior Newbie





« Reply #11 - Posted 2014-01-23 13:46:32 »

Thanks Troubleshoots, that worked! Now I have a square that moves by itself and I can set absolute positioning for other blocks. Of course, hand building levels via code will not work, need to read up more about:

Level building in Java / LWJGL (OpenGL) and applying text to the rendering window.

I will be checking out the tutorials on here, and along with my prior programming knowledge, hopefully it won't be too long before I am linking you guys to a prototype.

Thanks again for your assistance and I welcome other suggestions in this thread for matrix manipulations.
Offline opiop65

JGO Kernel


Medals: 154
Projects: 7
Exp: 3 years


JumpButton Studios


« Reply #12 - Posted 2014-01-23 19:56:12 »

Level building isn't specific to LWJGL, so you won't find much specifically pertaining to that. What you need to look up is how to build a good parser, and choose what kind of files you'll use. XML? Just text files? Images? LWJGL is just a wrapper for OpenGL that just draws vertices to the screen, nothing more, so you won't find anything to do with level loading.

As for text rendering, look at Slick-Util. Its a nice utility library that you can easily draw text with in just a few lines of code.

Offline Stoofus

Junior Newbie





« Reply #13 - Posted 2014-01-23 20:16:25 »

I am following SHC's tutorial and I am learning a lot.

As for level building or loading, I am not quite there yet. Still need to be able to draw competently to the screen, even if it is a still background with one moving player.

Goal would be for the player to generate a character and move it around the screen. Hopefully, with a menu and a clean way to exit the game.

After that, maybe saving player state and loading a simple level.
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.

CopyableCougar4 (23 views)
2014-08-22 19:31:30

atombrot (34 views)
2014-08-19 09:29:53

Tekkerue (30 views)
2014-08-16 06:45:27

Tekkerue (28 views)
2014-08-16 06:22:17

Tekkerue (18 views)
2014-08-16 06:20:21

Tekkerue (27 views)
2014-08-16 06:12:11

Rayexar (65 views)
2014-08-11 02:49:23

BurntPizza (41 views)
2014-08-09 21:09:32

BurntPizza (31 views)
2014-08-08 02:01:56

Norakomi (41 views)
2014-08-06 19:49:38
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

List of Learning Resources
by SilverTiger
2014-07-31 11:54:12

HotSpot Options
by dleskov
2014-07-08 01:59:08
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!