Java-Gaming.org    
Featured games (81)
games approved by the League of Dukes
Games in Showcase (492)
Games in Android Showcase (112)
games submitted by our members
Games in WIP (556)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
   Home   Help   Search   Login   Register   
  Show Posts
Pages: [1] 2 3
1  Java Game APIs & Engines / Java 2D / Re: Graphics2D and AffineTransform Questions on: 2011-10-14 22:00:29
Which tool tips?

I'm using JInternalFrames so whatever happens to be default to Swing and that component.
2  Java Game APIs & Engines / Java 2D / Re: Graphics2D and AffineTransform Questions on: 2011-10-14 17:44:43
I really hate to bring an old post back from the dead but I just wanted to give an update about this. It may help others.

In the end, the above changes did not help me. I still ran into the issue.

I could not figure it out to save my life. Then I had a friend of mine use my game and he said that when a tool tip appeared on the Close icon on a window, he noticed the slow down. So I tested this out and sure enough, the tool tips were causing the slow down! I was really surprised. I turned the tool tips off and then the problem went away.

I'm not really sure why the tool tips were causing issues with drawing but the problem is gone now and I am very pleased.

Maybe this is useful for someone else out there that are seeing weird slow downs.
3  Java Game APIs & Engines / Java 2D / Re: Graphics2D and AffineTransform Questions on: 2011-05-02 02:15:59
Glad you were able to solve your problem Smiley

EDIT:
Here is something about that flag: http://download.oracle.com/javase/1.5.0/docs/guide/2d/flags.html#ddforcevram
Keeping an image in VRAM is quite expensive if you draw it a lot, so it is best to not have that flag Smiley

Thanks for the link (and reply). I suspect that my video card was eventually filling up with memory because I was drawing SO many of them (Every 50 MS 15,000 images where checked and depending on what zoom I was at, it could range from 20 images to 9,000 being drawn) and it probably was starting to have issues from that. Just a guess.

I will check out your link you included. I am surely certain it will be useful to me.

Thanks again for your guys help.

EDIT (I love to edit posts): I have given you both appreciation.  Grin Cool
4  Java Game APIs & Engines / Java 2D / Re: Graphics2D and AffineTransform Questions on: 2011-05-01 15:43:01
I decided to make a new post instead of editing my last one because it contains so much information.

I put in the code to ensure the right buffered image and it did not have any impact.

I kept that code in and then removed -Dsun.java2d.ddforcevram. I am currently playing the game without any issue and it has passed the point where it "usually" occurs. I don't know if this is just a fluke (I'm sure it'll happen now that I said it isn't...you know how these things work!) or something but I will have to keep trying it.

I am googling ddforcevram to see if I can learn more on its specifics and see if this is an issue. But, feel free to provide information Smiley

Thanks.

EDIT:
I did not encounter the issue (hurra!) and ended up quitting - this was the longest I have been able to play without the performance degradation. Here is the Java2D trace and the GC report:
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  
737872 calls to D3DDrawLine
80 calls to D3DCopyArea
659 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(FourByteAbgr, SrcOverNoEa, IntArgbPre)
2549575 calls to sun.java2d.d3d.D3DMaskFill::MaskFill(OpaqueColor, SrcNoEa, "D3D Surface")
2750151 calls to D3DDrawGlyphs
1 call to sun.java2d.loops.Blit::Blit(ByteIndexed, SrcNoEa, IntArgbPre)
66916 calls to sun.java2d.loops.MaskFill::MaskFill(AnyColor, Src, IntArgbPre)
64 calls to sun.java2d.loops.Blit::Blit(ThreeByteBgr, SrcNoEa, IntArgbPre)
466 calls to sun.java2d.d3d.D3DSwToTextureBlit::Blit(IntArgbPre, SrcNoEa, "D3D Texture")
1 call to sun.java2d.d3d.D3DSwToTextureBlit::Blit(ByteIndexed, SrcNoEa, "D3D Texture")
6724 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgbPre, SrcOver, IntArgbPre)
659 calls to sun.java2d.loops.Blit::Blit(FourByteAbgr, SrcNoEa, IntArgb)
321708 calls to sun.java2d.d3d.D3DTextureToSurfaceBlit::Blit("D3D Texture", AnyAlpha, "D3D Surface")
6724 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, SrcOverNoEa, IntArgbPre)
659 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgb, SrcOver, IntArgbPre)
2714445 calls to D3DFillAAParallelogram
607091 calls to D3DFillRect
393209 calls to D3DDrawRect
578482 calls to sun.java2d.d3d.D3DRTTSurfaceToSurfaceBlit::Blit("D3D Surface (render-to-texture)", AnyAlpha, "D3D Surface")
22568154 calls to sun.java2d.d3d.D3DTextureToSurfaceScale::ScaledBlit("D3D Texture", AnyAlpha, "D3D Surface")
255622 calls to D3DDrawAAParallelogram
1 call to sun.java2d.d3d.D3DSwToTextureBlit::Blit(IntArgb, SrcNoEa, "D3D Texture")
659 calls to sun.java2d.loops.MaskBlit$General::MaskBlit(FourByteAbgr, SrcOverNoEa, IntArgbPre)
355730 calls to sun.java2d.d3d.D3DTextureToSurfaceTransform::TransformBlit("D3D Texture", AnyAlpha, "D3D Surface")
33915652 total calls to 24 different primitives

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
Heap
 def new generation   total 129024K, used 109940K [0x04590000, 0x0d190000, 0x14590000)
  eden space 114688K,  95% used [0x04590000, 0x0b0e93e8, 0x0b590000)
  from space 14336K,   0% used [0x0b590000, 0x0b593f10, 0x0c390000)
  to   space 14336K,   0% used [0x0c390000, 0x0c390000, 0x0d190000)
 tenured generation   total 286576K, used 235254K [0x14590000, 0x25d6c000, 0x34590000)
   the space 286576K,  82% used [0x14590000, 0x22b4d9c8, 0x22b4da00, 0x25d6c000)
 compacting perm gen  total 12288K, used 3139K [0x34590000, 0x35190000, 0x38590000)
   the space 12288K,  25% used [0x34590000, 0x348a0c30, 0x348a0e00, 0x35190000)
    ro space 10240K,  54% used [0x38590000, 0x38b0e770, 0x38b0e800, 0x38f90000)
    rw space 12288K,  55% used [0x38f90000, 0x39634ac8, 0x39634c00, 0x39b90000)
5  Java Game APIs & Engines / Java 2D / Re: Graphics2D and AffineTransform Questions on: 2011-05-01 14:53:39
Thanks for your replies.

I got lucky and was able to reproduce the problem. This resulted in some data.

But first, a couple additional notes:
1. I am running on Windows 7 64 bit with the latest JRE from Oracle:
java.runtime.version=1.6.0_25-b06.
Here is the VM version:
java.vm.version=20.0-b11

I have an ATI 5770 HD card.

2. I am running with the following flags on:
-Dsun.java2d.translaccel=true
-Dsun.java2d.accthreshold=0
-Dsun.java2d.ddforcevram
-Dsun.java2d.d3d=true
-Dsun.java2d.ddscale=true

Maybe I have a bad combination of settings here. My knowledge in this area is little and I am learning as I go along. I am trying to accelerate as much as possible. I have NO Volatile Images because I am drawing on a JPanel.

I have checked to see if my images are hw accelerated and the method returns true. I do really get amazing performance when things go correctly. There are times where I can draw 600+ translucent images with a 0 MS draw time (Yes, I am using nano time for my benchmarking)!! This is fantastical.

3. I am creating the BufferedImages with the following code:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
public static BufferedImage loadBufferedImage(String imageFile)
   {
      BufferedImage bufferedImage;
      try
      {
         Image image = ImageIO.read(new File(imageFile));
         GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
         GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
         bufferedImage = gc.createCompatibleImage(image.getWidth(null), image.getHeight(null), Transparency.TRANSLUCENT);
         
         Graphics2D g2d = (Graphics2D)bufferedImage.createGraphics();

         g2d.drawImage(image, 0, 0, null);
         g2d.dispose();
         return bufferedImage;
      }
      catch (IOException e)
      {
         e.printStackTrace();
      }
   
      return null;
   }


So it is very similar to what you have (though it looks like you are doing a convert if it is not a compatible image). 99% of my images have partial transparency. There are some images, namely, icons for the user interface that do not but I use the same method to load them. Would this cause the problem?



As mentioned at the beginning of the reply, I did get some more data. The program runs fine and then "something happens". Then the performance goes down the tubes. The funny thing is, it happens at the same point within in the program even if I reload new images from disk. For example, every 500th image seems to take an extra 100 MS to rotate, draw, and rotate. But all of the ones before and after it, take less than 1 MS. I have not acquired more data yet to see if this is how it behaves each time the performance goes down. Maybe this was a one time instance and there are other times that multiple images take additional times. I had an idea where I would detect long rotate, draw and rotate times and remove the image from the list to be drawn. Then I would see if my performance went back up to normal.

Here are some numbers I acquired:

drawImage only:
Scale of 0.4f:
1  
2  
3  
graphicLocations: before(9472): : 4 MS.
graphicLocations(drawn: 149. Transform checks: 0): after: 24 MS.     (This took 20 MS to draw: 24-4=20)
(I drew 149 out of 9472 images)


rotate, drawImage, rotate:
Scale of 1.0f:
1  
2  
3  
graphicLocations: before(9472): : 4 MS.
graphicLocations(drawn: 44. Transform checks: 0): after: 138 MS.    (This took 134 MS to draw: 138-4=134)
(I drew 44 out of 9472 images)


Note: I was not able to get the behavior at the same scale because the game will only rotate if you are zoomed in close enough to see it. But the evidence looks fairly strong.

Here are some numbers when everything is working fine:

rotate, drawImage, rotate:
Scale of 1.0f:
1  
2  
graphicLocations: before(9472): : 0 MS.
graphicLocations(drawn: 23. Transform checks: 0): after: 0 MS.


drawImage only:
Scale of 0.05f:
1  
2  
graphicLocations: before(9870): : 0 MS.
graphicLocations(drawn: 6672. Transform checks: 0): after: 9 MS.     !!!!! 9 MS to draw over 6000 images.


I looked at the GC and this is the report when execution stops:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
Heap
 def new generation   total 127936K, used 45871K [0x04590000, 0x0d060000, 0x14590000)
  eden space 113728K,  35% used [0x04590000, 0x06cfe700, 0x0b4a0000)
  from space 14208K,  38% used [0x0c280000, 0x0c7dd6e8, 0x0d060000)
  to   space 14208K,   0% used [0x0b4a0000, 0x0b4a0000, 0x0c280000)
 tenured generation   total 284228K, used 223198K [0x14590000, 0x25b21000, 0x34590000)
   the space 284228K,  78% used [0x14590000, 0x21f87888, 0x21f87a00, 0x25b21000)
 compacting perm gen  total 12288K, used 2821K [0x34590000, 0x35190000, 0x38590000)
   the space 12288K,  22% used [0x34590000, 0x348517f0, 0x34851800, 0x35190000)
    ro space 10240K,  54% used [0x38590000, 0x38b0e770, 0x38b0e800, 0x38f90000)
    rw space 12288K,  55% used [0x38f90000, 0x39634ac8, 0x39634c00, 0x39b90000)


It seems the GC collects around 100 MB per collection (it seems to be around 1-2 seconds). The amount it collects goes up slightly (maybe 5-10MB) when things start to go bad.

Here is the GC collection report for a short run when everything went fine:
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
Heap
 def new generation   total 123136K, used 54532K [0x04590000, 0x0cb20000, 0x14590000)
  eden space 109504K,  45% used [0x04590000, 0x07659e98, 0x0b080000)
  from space 13632K,  33% used [0x0bdd0000, 0x0c247500, 0x0cb20000)
  to   space 13632K,   0% used [0x0b080000, 0x0b080000, 0x0bdd0000)
 tenured generation   total 273416K, used 204071K [0x14590000, 0x25092000, 0x34590000)
   the space 273416K,  74% used [0x14590000, 0x20cd9db8, 0x20cd9e00, 0x25092000)
 compacting perm gen  total 12288K, used 1866K [0x34590000, 0x35190000, 0x38590000)
   the space 12288K,  15% used [0x34590000, 0x34762830, 0x34762a00, 0x35190000)
    ro space 10240K,  54% used [0x38590000, 0x38b0e770, 0x38b0e800, 0x38f90000)
    rw space 12288K,  55% used [0x38f90000, 0x39634ac8, 0x39634c00, 0x39b90000)



Finally, here are some Java2D traces:
Here is the trace for when everything went bad (I ran the program for around 10 minutes):
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  
7025 calls to D3DDrawLine
649 calls to sun.java2d.loops.Blit::Blit(FourByteAbgr, SrcNoEa, IntArgb)
1 call to sun.java2d.d3d.D3DSurfaceToGDIWindowSurfaceBlit::Blit("D3D Surface", AnyAlpha, "GDI")
990959 calls to sun.java2d.loops.MaskFill::MaskFill(AnyColor, Src, IntRgb)
11150 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, SrcOverNoEa, IntRgb)
11150 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgbPre, SrcOver, IntRgb)
20748 calls to sun.java2d.loops.FillRect::FillRect(AnyColor, SrcNoEa, AnyInt)
55583 calls to sun.java2d.d3d.D3DTextureToSurfaceTransform::TransformBlit("D3D Texture", AnyAlpha, "D3D Surface")
2082 calls to sun.java2d.loops.DrawGlyphList::DrawGlyphList(AnyColor, SrcNoEa, AnyInt)
432305 calls to D3DFillAAParallelogram
5062 calls to D3DDrawRect
6000 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgbPre, SrcOver, IntArgbPre)
78977 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit("D3D Surface (render-to-texture)", SrcNoEa, IntRgb)
1 call to sun.java2d.windows.GDIBlitLoops::Blit(IntRgb, SrcNoEa, "GDI")
78977 calls to sun.java2d.d3d.D3DSurfaceToSwBlit::Blit("D3D Surface", SrcNoEa, IntArgb)
261632 calls to sun.java2d.d3d.D3DMaskFill::MaskFill(OpaqueColor, SrcNoEa, "D3D Surface")
64 calls to sun.java2d.loops.Blit::Blit(ThreeByteBgr, SrcNoEa, IntArgbPre)
763031 calls to sun.java2d.loops.TransformHelper::TransformHelper(IntArgbPre, SrcNoEa, IntArgbPre)
7 calls to D3DCopyArea
78977 calls to sun.java2d.loops.MaskBlit$General::MaskBlit("D3D Surface (render-to-texture)", SrcNoEa, IntRgb)
10732 calls to sun.java2d.loops.DrawRect::DrawRect(AnyColor, SrcNoEa, AnyInt)
301365 calls to D3DDrawGlyphs
35578 calls to sun.java2d.loops.DrawGlyphListLCD::DrawGlyphListLCD(AnyColor, SrcNoEa, IntRgb)
78977 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgb, AnyAlpha, IntRgb)
1 call to sun.java2d.loops.Blit::Blit(ByteIndexed, SrcNoEa, IntArgbPre)
649 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(FourByteAbgr, SrcOverNoEa, IntArgbPre)
10488 calls to sun.java2d.d3d.D3DTextureToSurfaceBlit::Blit("D3D Texture", AnyAlpha, "D3D Surface")
66838 calls to sun.java2d.loops.MaskFill::MaskFill(AnyColor, Src, IntArgbPre)
649 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgb, SrcOver, IntArgbPre)
649 calls to sun.java2d.loops.MaskBlit$General::MaskBlit(FourByteAbgr, SrcOverNoEa, IntArgbPre)
3901 calls to sun.java2d.d3d.D3DSwToSurfaceBlit::Blit(IntRgb, AnyAlpha, "D3D Surface")
6000 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, SrcOverNoEa, IntArgbPre)
10595 calls to D3DFillRect
2400240 calls to sun.java2d.d3d.D3DTextureToSurfaceScale::ScaledBlit("D3D Texture", AnyAlpha, "D3D Surface")
70261 calls to sun.java2d.d3d.D3DRTTSurfaceToSurfaceBlit::Blit("D3D Surface (render-to-texture)", AnyAlpha, "D3D Surface")
1062 calls to sun.java2d.d3d.D3DSwToTextureBlit::Blit(IntArgbPre, SrcNoEa, "D3D Texture")
36437 calls to D3DDrawAAParallelogram
25771 calls to sun.java2d.loops.DrawLine::DrawLine(AnyColor, SrcNoEa, AnyInt)
5864573 total calls to 38 different primitives



Here is a short trace for when everything went fine:
(I didn't do much here so there are less calls overall)
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
6000 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(IntArgbPre, SrcOverNoEa, IntArgbPre)
590642 calls to sun.java2d.d3d.D3DTextureToSurfaceScale::ScaledBlit("D3D Texture", AnyAlpha, "D3D Surface")
154 calls to sun.java2d.d3d.D3DSwToTextureBlit::Blit(IntArgbPre, SrcNoEa, "D3D Texture")
14541 calls to D3DDrawGlyphs
262 calls to sun.java2d.d3d.D3DTextureToSurfaceBlit::Blit("D3D Texture", AnyAlpha, "D3D Surface")
635 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgb, SrcOver, IntArgbPre)
661 calls to sun.java2d.d3d.D3DTextureToSurfaceTransform::TransformBlit("D3D Texture", AnyAlpha, "D3D Surface")
3593 calls to sun.java2d.d3d.D3DRTTSurfaceToSurfaceBlit::Blit("D3D Surface (render-to-texture)", AnyAlpha, "D3D Surface")
635 calls to sun.java2d.loops.MaskBlit$General::MaskBlit(FourByteAbgr, SrcOverNoEa, IntArgbPre)
635 calls to sun.java2d.loops.Blit::Blit(FourByteAbgr, SrcNoEa, IntArgb)
21920 calls to D3DFillAAParallelogram
210 calls to D3DFillRect
1 call to D3DDrawRect
65580 calls to sun.java2d.loops.MaskFill::MaskFill(AnyColor, Src, IntArgbPre)
83878 calls to sun.java2d.d3d.D3DMaskFill::MaskFill(OpaqueColor, SrcNoEa, "D3D Surface")
1927 calls to D3DDrawAAParallelogram
6000 calls to sun.java2d.loops.MaskBlit::MaskBlit(IntArgbPre, SrcOver, IntArgbPre)
635 calls to sun.java2d.loops.Blit$GeneralMaskBlit::Blit(FourByteAbgr, SrcOverNoEa, IntArgbPre)
61 calls to sun.java2d.loops.Blit::Blit(ThreeByteBgr, SrcNoEa, IntArgbPre)
797970 total calls to 19 different primitives




Well that is all of the information I have now. It is a lot because I am trying to really track down this issue. I will put in the code to perform a convert on the buffered image to the correct transparency and see if that improves things.


Well, thanks for reading and I hope that you guys can find an error in the information I provided. I am going to continue working on this with the new buffered image code provided and try to get some additional data, etc.

Thanks again!
6  Java Game APIs & Engines / Java 2D / Graphics2D and AffineTransform Questions on: 2011-04-30 16:49:34
Hello,

I have a few questions:

1. Is it OK to set an AffineTransformation on a Graphics2D (with g2d.transform) and then use g2d.rotate()? Or should I modify the AffineTransformation object? If I should NOT use g2d.rotate in this case and I DID, would it have the potential to cause performance/corruption issues?

2. Is it OK to use the same BufferedImage multiple times during scaling/rotation?
For example, in my render loop:
g2d.transform(at); //at contains data for scaling and translation.   The scaling and translation can change as the user zooms/drags

//Now I want to rotate the image.
g2d.rotate(rotate, x1, y1);
//Draw the rotated image.
g2d.drawImage(bufferedImage, x2, y2, null);
//Restore the rotation
g2d.rotate(-rotate, x1, y1);

//Now do it again with the same image but some place else
g2d.rotate(rotate, x3, y3);
//Draw the rotated image.
g2d.drawImage(bufferedImage, x4, y4, null);
//Restore the rotation
g2d.rotate(-rotate, x3, y3);

This seems to work fine, but there are rare times when the performance degrades significantly. It is very hard to produce and I am trying to narrow down the reason why it is happening. I suspect I am doing something gravely wrong.

Edit1:
3. Does the AT/G2D modify the image data for scaling, translation, or rotation? I suspect my image data may be getting corrupt or something after awhile some times (it still looks fine on the screen though...)...which may result in longer draw times??
 Edit2:
I wrote some code to remove all of the images and reload new ones if the poor performance was detected. This had absolutely no impact on the drawing of the image - it still performed badly on the new ones.
 /Edit2
/Edit1



Thanks.
7  Java Game APIs & Engines / Java 2D / Re: Swing GUI Question on: 2008-02-03 01:01:52
Thanks for both of your replies. I will investigate this and then get back to ya!
8  Java Game APIs & Engines / Java 2D / Swing GUI Question on: 2008-02-02 01:37:29
Hello,

I am programming a game and using Swing as my GUI. I did some changes, so I can have a custom GUI. This is what I have done:

I have made the game map a JLabel on a JFrame. Then I have overridden the JLabel so that I can have movable windows, placed on top of this game map(that is a JLabel). This works fine, and all is well.

The problem is that I have to call the repaint of the game map 10 times a second (More on this later). What occurs is a repaint to all of the game label's children are done. So, my GUI gets repainted 10 times a second. This causes a great performance decrease and I am not too pleased with it.

Does anyone know how to only repaint what is on the game label and not the children (yet still make sure they render correctly)? I know there is a way to ignore repaints, but I believe that is only for hardware calls, and not software.

The performance decrease I speak of is my dual core CPU runs at 20-25% during repainting. I have done some modifications, so that if I do not need to draw (fast moving projectiles, these draw at 100 MS), I won't draw (there are no projectiles to draw). Character movement is done at 250 MS, so if I do not need to draw 10 times a second, I will draw at least 4 times. This keeps the CPU down to 8-12%, which is more acceptable.

From my investigations, it seems I am out of luck.

Thanks for any advice/help!

PS: I wanted to try this forum first before going to Sun's.
9  Discussions / General Discussions / Re: Pixel Artists on: 2007-11-07 19:56:24
This should belong in the Jobs Board of Volunteer Projects forum.

You're asking for someone who can do the art for your game for free? Smiley I doubt you'll find that person in here, since we're probably all programmers and not so much graphic artists, and we've most likely dried up that little pool of artists a long time ago.

Btw. it won't hurt having some concepts, some ideas about the art, and it's always attractive to artists to have some game actually working and running! If you're gonna pay, then you could go to some artists forums, I'm sure there are some there interested. I don't know of any, hopefully someone will give you a link or you can Google for some.

Thanks for your reply!

I have all intentions to pay these artists, nor did I have any intentions of getting an artist from this site because, as you said: we are all programmers. I was at first going to post an ad for artists in the job section but that wouldn't work as...we are all programmers! So I am instead posting up for some good sites! I can't seem to find any good ones. Maybe I am just googling for the wrong terms. I do have the game up and running and a lot of information but that wouldn't be helpful here to post up. Smiley

Thank you!
10  Discussions / General Discussions / Pixel Artists on: 2007-11-06 19:59:30
Hi guys,

I am making this post because I have ran into several dead ends in locating some pixel artists. My first attempt was to talk to all of my friends to see if they would help me out (for a reasonable amount of money, one guy wanted $50,000 a year for 100 characters, lols), but that did not work. My second attempt was to have my friends talk to their friends and see if they could find someone else. That failed! I then posted on several other message boards I am a member of and that turned up to be dry.

So, perhaps I can have some luck here:

does anyone know of any sites that have free lance pixel artists or if any pixel artists browser these boards would be interested in assisting me in making art for my 2D online MMO role playing game?

I found some sites for pixel art howto's but nothing for freelance artists.

If anyone is interested, please reply or send me an email at:
dayrinni@tempestseason.com

Thanks!!
day
11  Java Game APIs & Engines / Java 2D / Re: PaintComponent method on: 2007-09-19 05:33:03
paintComponent is only invoked when something happens that requires redrawing, such as things being dragged around, text changes, etc.

If you do not somehow manually call repaint(), then there is no explanation why it would have a framerate greater than 0. But how can you observe that the "call is done 20 times a second" without having called something that results in a repaint with that frequency?

I put a counter in the paint method that would increment everytime control entered and after 1 second, I'd display the counter and redo it. So, since it is being entered 20 times a second, I am getting 20 frames drawn. I do all my game drawing in this method. Maybe I have some old code I wrote buried deep down in the bowels of my problem.
12  Java Game APIs & Engines / Java 2D / Re: Reading Image Files on: 2007-09-17 04:12:58
I took the easy way out for this. I just had the game load up a series of images from disk based on a naming scheme and put them in the object and then cached them in memory. For example: big_tank_#, it'd loop until it didn't find anyone more pictures with the next #. I'm going to write an algorithm that handles the amount and replacement for the cached images so they do not take too much memory.
13  Java Game APIs & Engines / Java 2D / PaintComponent method on: 2007-09-17 04:04:46
I have a very fast question for you guys. I was going to go look at this on the Java site and docs but it seems to be down for me.

I have been looking at the FPS in my game and trying to see how well it goes, etc. I am getting 20 FPS with a swing GUI system [subclassed jlabel and do my drawing on that]. I thought that this was pretty slow, so its time to figure out why its taking so long. So to start off first, I removed all of the functionality from my paintComponent method except for the FPS calcuations. When I ran this new modification, my FPS went up by 1. This could be good or it could be bad. Good as in what I am doing for the game is not really processor heavy Smiley Bad: It seems that the call to this method is done 20 times a second. I was going to try and lock it at between 30 or 50 but since it's locked at 20 then....I suppose its ok.

Anyways - my question is: does swing call paint component methods at regular intervals? I'm sure this is on the docs but I can't get to them.

Thanks!

EDIT: My draw function takes between 0 - 45 MS to draw, with about +75% of them being 15/16 MS.

PS: Are there any good sites that have some information regarding the opengl pipeline for java? I haven't looked around much (haven't googled either but will after this post).
14  Game Development / Artificial Intelligence / Re: A* Pathfinding question on: 2007-08-24 17:26:32
If you are at the same source/dest then the paths will be the same unless the order of the lists change. You would probably want the clients to calculate the path and not the server, there's just no need to do it that way.

This is what I'm thinking...

I can have the client calculate the path and send it to the server. The server will check it to ensure it is not fake (going through walls, etc) and then tell all the other clients to generate the path. Then the server will tell the indicated character to move on the server. I have the server move all of the paths as well so that the clients can not do bogus things if they get out of synced. I send an update every 10 seconds. This sounds like a reasonable approach that won't suck up the CPU of the server but keep things synced as well as secure to a good extent.

By the way, thanks for replying - you've been most helpful Smiley
15  Game Development / Artificial Intelligence / Re: A* Pathfinding question on: 2007-08-24 06:05:58
Hello,

I have another question regarding this.

Given a map with a nice portion of walls so the path is a bit complex and all the costs of the nodes are 1, will A* come up with the same path every time (assume nothing changes except you want to calc another path)?

I'm trying to decide if I can afford the server to send the path to all the clients or have the clients do it themselves. It's really a bandwidth question.

Thanks!
16  Game Development / Artificial Intelligence / Re: A* Pathfinding question on: 2007-08-23 19:12:28
Your suggestion worked and now I have basic pathfinding!

Thanks a lot.

On a side note, this turned out to be a lot easier than I was thinking it would be. I've put this off for over a year. It only took me about 6 hours to do (which includes reading tutorials, forums and other web pages). Thanks again for your help.
17  Game Development / Artificial Intelligence / Re: A* Pathfinding question on: 2007-08-23 18:49:54
If the cost is 0 then every path is the shortest path. For an A* search you should also keep a closed list as well so that you don't add nodes you've already processed. Also out of curiosity what is the application? With edges of equal cost A* isn't always the best option - although coding it is easy.

Thanks for the reply. It's for a game I'm making. I'm just trying to get the thing to work in any way and then I will be adding onto it. I'll try adding the closed list.

I'll let you know soon...
18  Game Development / Artificial Intelligence / Re: A* Pathfinding question on: 2007-08-23 17:46:26
Without looking at the code; change the cost to 1.

How would this change the affects? As they are all 1's so if I am at a current node with a current cost of 10 and then all the nodes around me are cost 1, they're all equal.

Thanks.
19  Game Development / Artificial Intelligence / A* Pathfinding question on: 2007-08-23 06:46:06
Hi,

I've been working on this for several hours now and it is time to head to bed. I decided to post up my current attempt at writing A* where the cost is 0 for all nodes.

Currently, when I run this, the solution (which is the open list), contains every single node that the algorithm looked at. I am going by this description of the algorithm:
http://ai-depot.com/Tutorial/PathFinding.html
Though either I am not understanding this properly or that example is flawed...

I know my algorithm is reaching the indicated node because it leaves a single node untouched...
So I need to know how to remove unwanted nodes from the list as I go.

Here is my code for the algorithm. If you require the entire program let me know.

The filled part tells the program to draw a filled rectangle as opposed to an outline of one.

Thanks for any assistance.

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  
public static void pathFind(PathWindow window)
   {

     
      Node startNode = window.getColumns().get(0).getNodeList().get(0);
      int cols = window.getColumns().size();
      int rows = window.getColumns().get(0).getNodeList().size();
      Node endNode = window.getColumns().get(cols-1).getNodeList().get(rows-1);
     
      LinkedList<Node> openList = new LinkedList<Node>();
     
      openList.add(startNode);
     
      while(openList.size() > 0)
      {
         Node currentNode = openList.poll();
         
         //currentNode.setFilled(true);
       
         //If we are at the end.
        if(currentNode.equals(endNode))
         {
            //Add the current node back in since we removed it above.
           openList.add(currentNode);
            break;
         }
         
         //Successors
       
         if(currentNode.getAboveNode() != null)
         {
            if(openList.contains(currentNode.getAboveNode()) == false)
            {
               openList.add(currentNode);
               openList.add(currentNode.getAboveNode());
            }
         }
         if(currentNode.getUnderNode() != null)
         {
            if(openList.contains(currentNode.getUnderNode()) == false)
            {
               openList.add(currentNode);
               openList.add(currentNode.getUnderNode());
            }
         }
         if(currentNode.getLeftNode() != null)
         {
            if(openList.contains(currentNode.getLeftNode()) == false)
            {
               openList.add(currentNode);
               openList.add(currentNode.getLeftNode());
            }
         }
         if(currentNode.getRightNode() != null)
         {
            if(openList.contains(currentNode.getRightNode()) == false)
            {
               openList.add(currentNode);
               openList.add(currentNode.getRightNode());
            }
         }
         
      }
     
      System.out.println("openlist is:\n" + openList);
     
      //set all these nodes to filled.
     for(int i = 0;i<openList.size();i++)
      {
         openList.get(i).setFilled(true);
      }
     
      window.repaint();
}
20  Java Game APIs & Engines / Java 2D / Re: AWT Drag Events Not Registering on: 2007-08-11 02:50:43
Well, I was playing around with things...I removed the debug statements I had in parts of my main code (not the demo) and the missing events stopped occuring. I put it back in and they reappeared...


So - does Java skip events if the processor/I/O is really busy or something?
21  Java Game APIs & Engines / Java 2D / Re: AWT Drag Events Not Registering on: 2007-08-11 01:33:50
Thanks for your reply.

I originally tried to use the mouse event and mouse listener concept, but I have far too many windows and components on the screen that I want to use drag and drop on. It turned out to be a big mess and was buggy. The above works 99% of the time WHEN it's getting the drag events. I guess I could subclass the event listener and use that instead, but, I don't think it would fix my problem - but it may.

Any other ideas or thoughts?

Edit: More on what I am trying to do: Get the global mouse position everytime it changes and if its dragging. I need the absolute coordinates regardless of where the cursor is.
22  Java Game APIs & Engines / Java 2D / AWT Drag Events Not Registering on: 2007-08-10 23:51:50
Note: I couldn't find a reasonable forum to post this here. I normally am active in this section so I choose here. You may move it if you wish Smiley. I also posted this on the Sun forums but it has garnered no replies.

Hi all,

I have written up a small program (code is at the bottom) that uses the getToolkit().addAWTEventListener(new AWTEventListener() code. In it, it will listen for drag events. If it detects one, it will update a variable called currentPoint. Then I have a subclassed JPanel that everytime it paints, will display a rectangle at the current point.

I then run the program and drag my mouse around for maybe 30 seconds. Things work 100% correct. After that though, it seems the AWTEventListener begins missing the events and the currentpoint doesn't update. This means the block that is following my mouse stops as my mouse cursor moves away during the drag. The point updates about a second later. So for example: If I am moving along the x-axis, the block follows me until say (10, 5) and then stops. My mouse then continues to move and it gets to (15,5) and then the block updates and jumps to that point. During this period, the AWT listener does not receive any mouse events. These actions steadily get worse and worse as I run the program.

Does anyone have any idea what is occuring? I haven't given much thought but maybe the GC? You can also look at the output and there are no events processed during that time...

Thanks,
day

Code:
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  
 
package main;
 
import java.awt.AWTEvent;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.AWTEventListener;
import java.awt.event.MouseEvent;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
 
 
 
public class DragWindow extends JFrame
{
   private Point currentPoint = null;
   private PaintPanel paintPanel;
   private boolean dragging = false;
 
   public DragWindow()
   {
      super("Drag Test");
      paintPanel = new PaintPanel(this);
     
      this.getContentPane().add(paintPanel);
     
      try
      {
          final PrintWriter out
            = new PrintWriter(new BufferedWriter(new FileWriter("dragData.txt")));
         
         addWindowListener(new ExitListener(out));
         setSize(1280, 1024);
         setLocation(0, 0);
         setVisible(true);
         
         
         getToolkit().addAWTEventListener(new AWTEventListener()
            {
               public void eventDispatched ( AWTEvent e )
               {
 
                  Point point = ((MouseEvent)e).getPoint();
                  currentPoint = point;
                 
                  System.out.println("Parsed this: X: " + point.x + ". Y: " + point.y);
                 
                  out.write("Parsed this: X: " + point.x + ". Y: " + point.y + "\n");
                  out.flush();
                  if(e.getID() == MouseEvent.MOUSE_DRAGGED)
                  {
                     String data = "MOUSE_DRAGGED: Event: " + e.paramString();
                     System.out.println(data);
                     out.write(data);
                     out.flush();
                     dragging = true;
                 
                  }
                  else if(e.getID() == MouseEvent.MOUSE_RELEASED)
                  {
                     String data = "MOUSE_RELEASED: Event: " + e.paramString();
                     System.out.println(data);
                     out.write(data);
                     out.flush();
                     dragging = false;
                  }
                 
                  repaint();
               }
   
           
            }, AWTEvent.MOUSE_EVENT_MASK | AWTEvent.MOUSE_MOTION_EVENT_MASK
 
            );
      }
      catch (FileNotFoundException e1)
      {
         e1.printStackTrace();
      }
      catch (IOException e)
      {
         e.printStackTrace();
      }
     
     
   }
 
   /**
    * @return Returns the currentPoint.
    */

   public Point getCurrentPoint ()
   {
      return currentPoint;
   }
 
   /**
    * @param currentPoint The currentPoint to set.
    */

   public void setCurrentPoint ( Point currentPoint )
   {
      this.currentPoint = currentPoint;
   }
 
   /**
    * @return Returns the dragging.
    */

   public boolean isDragging ()
   {
      return dragging;
   }
 
   /**
    * @param dragging The dragging to set.
    */

   public void setDragging ( boolean dragging )
   {
      this.dragging = dragging;
   }
   
   
}
 
 
package main;
 
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
 
import javax.swing.JPanel;
 
public class PaintPanel extends JPanel
{
   DragWindow window;
   public PaintPanel ( DragWindow window )
   {
      this.window = window;
   }
   public void paintComponent(Graphics g)
   {
      super.paintComponents(g);
     
      Graphics2D g2d = (Graphics2D)g;
     
     
      if(window.getCurrentPoint() != null && window.isDragging())
      {
         Rectangle rectPoint = new Rectangle(window.getCurrentPoint().x, window.getCurrentPoint().y, 20, 20);
         g2d.fill(rectPoint);
      }
   }
}
 
package main;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.PrintWriter;
 
import javax.swing.JFrame;
 
/** A listener that you attach to the top-level Frame or JFrame of
 *  your application, so quitting the frame exits the application.
 *  1998 Marty Hall, http://www.apl.jhu.edu/~hall/java/
 */

 
public class ExitListener extends WindowAdapter
{
   private JFrame frame;
   private PrintWriter outi;
   
   public ExitListener(PrintWriter o)
   {
      outi = o;
   }
   
   /**
    * @return Returns the frame.
    */

   public JFrame getFrame ()
   {
      return frame;
   }
 
   /**
    * @param frame The frame to set.
    */

   public void setFrame ( JFrame frame )
   {
      this.frame = frame;
     
   }
 
   
   public void windowClosing(WindowEvent event)
   {
      outi.close();
      System.exit(0);  
   }
}
 

   
 
23  Discussions / Miscellaneous Topics / Re: Java's Security as a whole on: 2007-07-04 02:28:22
In case you haven't thought about it already, here are two things to keep in mind: memory-editing tools and pixel-clicking bots. I had to deal with both of those for a simple game with high scores.

The memory-editing tools (like tsearch and Cheat Engine) allowed anyone to give themselves any score they wanted, usually within 5 minutes or so, no decompiling necessary. I fixed this problem by keeping certain variables (score, level, etc) encrypted in memory.

The pixel-clicking bots are a whole different problem. I didn't even bother trying to detect bots because, for one, it would be difficult. Second, as far as I could tell, there was only one person who created a bot and he was actually a kind person who stopped using it. Of course, some game designs are more prone to this than others.



I was very careful to ensure that the server only was the sender of important data. It never ever takes data from the player and uses that to update itself. This wasn't the case with the thick client and is still with the thin client. The thin client now is purely a storage mechanism for the player. Though, I did not think of the pixel-clicking bots. Do you happen to have some sort of additional information about this handy? I'm going to google it and see what I can come up with.

If your game is a shooter or mmog, where the client has information that the user is not supposed
to have access to, you ultimately cannot win.  You can only delay and make it harder.   You should
install tripwires based on the idea that hackers will try easy things first, and if they don't seem to
raise any alarm bells, might be happy with their work.   One of my favorite tricks is to degrade, but
not shutdown, clients that trip your alarms.  They'll get frustrated and go home - probably badmouthing
your software all the way.


That's a great idea and I am going to do something like that in order to make it so they are more apt to get discouraged.

This thread has a lot of good information in it! Keep it coming!
24  Discussions / Miscellaneous Topics / Re: Java's Security as a whole on: 2007-07-03 02:33:19
You seem fairly rational overall, not just a paranoid ranting about someone "stealing your code".
-- SO what specifically are you concerned that bad guys will do if they can see too much of your
client?


Thanks for the kind words Smiley

My plan was to have a thick client so I can offload some of the processing from the server. I have limited funds and I'm not sure how good of a processor I have. So they would be able to see some pretty important code that was related to the game (server protocols, how the data was arranged specifically). Even if they do not steal my code, it could give them a potential to disrupt the game. I wanted to avoid that situation.

I was also thinking of several ways to stem the bogus command sending. One other thing was having the server send the client a special code or something that the client could process and then send back with every command. This would allow the server to ensure the data is correct. We can make the code linked to the current account. It could then change every say, 10 seconds. This would make it so the server and client will always be in a secure fashion. Of course, the hacker could intercept the commands and blah blah blah etc. It is just another wall to climb Smiley
25  Discussions / Miscellaneous Topics / Re: Java's Security as a whole on: 2007-07-01 03:11:48
Whatever you do, don't rely solely (or heavily) on this type of protection for anything where if someone were to manage to decompile the code that they would not be able to suddenly destroy your entire system, or steal other players money. Protection is a deterrent for amateurs, and a filter for the skilled.

Correct! I have a plan that I developed in the past day after learning of this for Java.

1.) Obfuscate my code that will be released.
2.) Change from a thick to a very thin client. Think like a MUD. This is turning out to be a project in its own. Even though it'll set me back for a week or so, the benefits out weigh the time it'll take to do.
3.) Add in server side functionality to ensure the data that it is receiving is 'secure'. One feature that I am going to do is if a connection sends X bogus commands in a row, they will be logged (IP address, connection times, what they tried to send, etc,  and disconnected.).
4.) A checksum verifier that will be execute upon connection to the server.

I know that no matter what I do (besides not releasing) I cannot truly secure my code (I also realize my code isn't all that interesting, but there is no reason not to take the measures). The steps above will just make it harder to get ahold of things. Even if they do decompile the client, it will be utterly useless. I suppose I'll talk a bit more about my plan. I am going to pretty much make 'skeleton' classes in place of the real ones on the server. They will not have any execution code, nor will they have a complex structure (variables, polymorphism, etc). They will be very simple and straight forward. I realize with what I am trying to do, I can merely sending data to the client. The client just needs a good way to store it. So, in a way, this will help me actually have a more efficient program because I am not transmitting useless data to the server.

Well, I've rambled too much so I will not hit the post button!
26  Discussions / Miscellaneous Topics / Re: Java's Security as a whole on: 2007-06-30 19:53:55
Try ProGuard (free, open source, has an Ant task).

Thanks. I tried retroguard and got that going. I'll check out proguard.

I'm in the process of decoupling my server and client code from the networking framework I developed. This makes me feel better inside knowing I won't have to put the server code (and most of the processing) in a risker situation.

I appreciate the replies I have received on this topic.
27  Discussions / Miscellaneous Topics / Re: Java's Security as a whole on: 2007-06-30 14:02:10
>I am under the assumption that it is more difficult to crack, say, an exe file that has been compiled in C++ than a
>java jar or some class files.

Well, that assumption is wrong. Removing the average CD check takes a few minutes (crack generation included). You also don't need programming skills and the required knowledge fits on a postcard. Removing an equally simple protection in Java requires way more knowledge and time.

Btw I didn't mean java.security. I meant those things which make Java secure. Eg class loaders, bounding checks, immutable strings... that kind of thing. That's what comes to mind if you use a title like "Java's security as a whole".

I was thinking more than removing a CD crack. Those are relativity easy to do. I googled for exe decompilers and received a large amount of results, but I do not know how reliable they are to use. Do you happen to know? Maybe I was just ignorant and they say ignorant is bliss!

28  Discussions / Miscellaneous Topics / Re: Java's Security as a whole on: 2007-06-30 13:28:32
Thanks for the replies guys.

I realize that anything is crackable. It only takes time. What just bothers me is the ease of it. I am under the assumption that it is more difficult to crack, say, an exe file that has been compiled in C++ than a java jar or some class files. Perhaps I am just being ignorant and I have just not stumbled upon a series of decompilers for exe files. I have not looked. I discovered this event last night shortly before I was heading to bed so I did not have time to look around for that.

As my game will be online, I can spend some time to make the client as light as possible such that all the important stuff is located on the server. I am just paranoid. Which can be good and which can be bad Smiley

In terms of the name of this thread, I also realize that there is a subset of Java called Java Security (I work with Java Security in Industry). Perhaps I should of named it something different but I am talking about Java's Security not Java Security  Tongue Tongue Tongue Tongue ::tease::

An another note, has anyone used any code obfuscator's for Java? I am inclined to at least spend a little bit more effort to ensure it is not AS easy.

29  Discussions / Miscellaneous Topics / Java's Security as a whole on: 2007-06-30 03:56:16
Hi,

I have been recently investigating the fact that it appears to be quite easy to decompile .class files to attain source code. This scares me! So I have done a bit more research to find out some solutions to stop this.

1.) Encrypt the byte code and use a different class loader.
    This is flawed and will not work. This article is great: http://www.javaworld.com/javaworld/javaqa/2003-05/01-qa-0509-jcrypt.html
2.) Use an obfuscation tool.
     Just makes it harder...
3.) I have heard of a way to 'lock' the jar so that tools like winrar cannot open it. I do not know anything about that.

Those are the ones that I currently know of to protect the source code. It doesn't seem to hopeful to be honest. I find it very saddening that this is a possibility with java.

Does anyone else have any ways that they protect themselves against potential source code thefts?

I am going to post up some more information as I stumble across this. I feel this is an important aspect to java.

Thanks!
James
30  Java Game APIs & Engines / Java 2D / Re: Opinions on Exceptions on: 2007-06-19 21:56:30
Thanks a lot for the help guys.

PS: Been busy moving and working.
Pages: [1] 2 3
 

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

The first screenshot will be displayed as a thumbnail.

Nickropheliac (16 views)
2014-08-31 22:59:12

TehJavaDev (23 views)
2014-08-28 18:26:30

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

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

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

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

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

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

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

BurntPizza (49 views)
2014-08-09 21:09:32
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!