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 (553)
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 ... 7
1  Games Center / Android Showcase / Re: Pixel Rain - Retro Arcade Puzzle Game on: 2014-04-18 21:40:21
Updated

+Re-did how the "Standard" game mode and all future game modes will work. You will now be able to see the next
rain block that is going to spawn and you have full control to where that block spawns by pressing the corresponding
columns button.

+Added a mute button

===
I updated the graphics of the blocks, though I am kinda sad this hasn't gotten any feedback from anyone :\
2  Games Center / Android Showcase / Re: Pixel Rain - Retro Arcade Puzzle Game on: 2014-04-13 20:29:36
+NEW GAME MODE!
+NEW RAIN BLOCKS WITH ABILITIES


Today I will be uploading an update to the game that will give both the Lite and Paid versions a new "Standard" game mode. This game mode will feature rain that have the ability to turn solid if you do not break them fast enough. The only way to remove these rain blocks from the field once they turn solid is to blow them up with the new "Bomb Rain".

New Rain Blocks Summary
+Solid Rain: Act just like normal rain blocks, with the exception that they will turn solid if you do not break them quick enough.
+Bomb Rain: Have a countdown timer on the bomb, when the timer reaches 0, it destroys all nearby blocks. Bombs can be activated manually by touching them.
3  Games Center / Showcase / Re: Groundskeeper 2 on: 2014-04-10 07:51:59
Yet if I try to record the emulator is just immediately slows down to crap.

You could simply use Fraps and record it while its running on a desktop computer (assuming you have a desktop version like this game has).

Yeah I do have a desktop version, and open broadcaster is just like fraps, i just drag a window around the emulator just for w/e reason when I start to record the emulator decides to bog down and run extremely slow. Not sure why. But thanks for the info, wasn't sure if there was some android recording software that doesn't suck.
4  Games Center / Showcase / Re: Groundskeeper 2 on: 2014-04-10 06:17:05
I think the trick is not recording from a mobile device, but rather your desktop/dev build.

I tried to do that, recording over an Genymotion emulator (since they use your systems hardware and run fast) and it just slowed my game down immensely on the emulator and I have a pretty beefy rig. I was using open broadcaster software to record which is what I use to record gameplay at 60 fps on some current gen titles maxed.

Yet if I try to record the emulator is just immediately slows down to crap.
5  Games Center / Showcase / Re: Groundskeeper 2 on: 2014-04-09 20:28:22
This might be a dumb question, but how do you go about creating a video of your game running on your mobile device? I've been trying to make a video for mine but am unsure how to do it for mobile games. Every option I have tried records at a lousy 8 frames per second which gives terrible video.
6  Games Center / Android Showcase / Re: Pixel Rain - Retro Arcade Puzzle Game on: 2014-04-09 14:53:13
Lite Version now has access to 'Hard' difficulty and Global High Scores. The only different from the paid version at the moment is that the paid version grants access to the 'Insanity' difficulty. Future paid versions will also have other game types that are in the works.
7  Games Center / Android Showcase / Re: Pixel Rain - Retro Arcade Puzzle Game on: 2014-04-08 22:55:12
I moved the game to here since it's no longer a work in progress. The game is at a point I would consider completed, however I will be updating it and adding new features as I have the time to work on them. Would love to hear what you guys think Smiley
8  Games Center / Android Showcase / Pixel Rain - Retro Arcade Puzzle Game on: 2014-04-08 22:53:24
Does nobody have any feedback at all? Sad


Image Album: http://imgur.com/a/gUFpL

About the game
In Pixel Rain "Rain" blocks fall from the sky into 1 of 6 columns on the game board and over time stack higher and higher. The goal of the game is to shatter these Rain blocks to gain points, you get game over if either of the columns Rain stack reaches into the hazard zone. Rain can be chained together to create combos for massive points, the points you get for the combo size scales exponentially giving birth to a risk vs reward system. Should you risk your rain stacks getting too tall just to add one more to your combo? Or do you play it safe? In essence, this game is about creating the biggest score and combos you can before you get game over.

Features
  • 100% Ad Free
  • 4 different difficulties [Easy | Medium | Hard | Insanity]
  • Global Highscores

Upcoming
  • Achievements
  • More Game Modes (featuring added block behaviors)

How to play
  • Shatter blocks in combos to increase your score
  • Create bigger combos for bigger scores
  • Blocks must be in a combo of at least 2 to be shattered, with the exception of white blocks
  • White blocks can be broken out of a combo, use them to help manipulate the board

REMEMBER: This is a "Score Based" puzzle game. It may seem easy to stay on the board indefinitely, but thats probably because you are not creating bigger than size 2-3 combos which only reward small amounts of points. The strategy comes in creating big combos while staying relatively safe which gets very difficult on the higher difficulties.

Android [Lite] Download: https://play.google.com/store/apps/details?id=com.pixelrain

If you like the game enough to warrant trying out the full version with the added difficulties and global high scores, there's a link on the Play Store page to the full game.
9  Games Center / WIP games, tools & toy projects / Re: Pixel Rain - Puzzle Game on: 2014-04-08 03:47:48
There's now a version on the Play store.
https://play.google.com/store/apps/details?id=com.pixelrain

Would love to hear your guy's feedback Smiley
10  Games Center / WIP games, tools & toy projects / Pixel Rain - Puzzle Game on: 2014-04-07 05:22:58

Image Album: http://imgur.com/a/gUFpL

Earlier this week I started work on a new puzzle game idea I had and am far enough along that I feel I should start posting getting some feedback on what I currently have. The game is sort of a cross between Tetris and Bejeweled with my own added twist. I am planning to have a Paid and a free Lite version of the game upon completion, the Lite version will not feature any ad's it will just have reduced features/modes. (I hate ad's, they make games look ugly and this is my work of art Smiley )

About the game
In Pixel Rain "Rain" blocks fall from the sky into 1 of 6 columns on the game board and over time stack higher and higher. The goal of the game is to shatter these Rain blocks to gain points, you get game over if either of the columns Rain stack reaches into the hazard zone. Rain can be chained together to create combos for massive points, the points you get for the combo size scales exponentially giving birth to a risk vs reward system. Should you risk your rain stacks getting too tall just to add one more to your combo? Or do you play it safe? In essence, this game is about creating the biggest score you can before you get game over.

Features
Currently the game features 4 different difficulties, with added room for different gameplay modes in the future.

Features in the works
  • Local/Global Highscores
  • More game modes with rain blocks featuring new characteristics

What's left to do
  • End Game screen (currently if you lose, the game just restarts)
  • High Scores Screens
  • Global Highscores (Was going to use StackMob but they are going away now, suggestions?)
  • Update difficulties (make them harder/easier feedback needed)

How to play
  • Shatter blocks in combos to increase your score
  • Create bigger combos for bigger scores
  • Blocks must be in a combo of at least 2 to be shattered, with the exception of white blocks
  • White blocks can be broken out of a combo, use them to help manipulate the board

REMEMBER: This is a "Score Based" puzzle game. It may seem easy to stay on the board indefinitely, but thats probably because you are not creating bigger than size 2-3 combos which only reward small amounts of points. The strategy comes in creating big combos while staying relatively safe which gets very difficult on the higher difficulties.

Android Download: https://play.google.com/store/apps/details?id=com.pixelrain

Desktop Jar Download: http://shaneisrael.com/public/Pixel%20Rain/Pixel-Rain-Desktop.jar

Note: The desktop version doesn't play as well since click listener tends to act weird, so right now it uses the same input as the Android version which is just dragging the mouse over will cause a shatter.
11  Game Development / Newbie & Debugging Questions / [Android - LibGDX] Adding/Removing group from a stage is causing stutter lag? on: 2013-11-15 21:10:57
I did have this in performance tuning, but maybe it should go here?

Alright so I am currently working on an my first android game. In this game there are "Balloons" that the player can run into (2d game) to increase his score. Right now the game uses many other objects and particle effects and runs perfectly smooth. I even spawn random balloons (they come up the screen randomly) without issue.

I built a "Balloon Pattern" class which basically puts balloons into a Group and adds that group to the stage. These balloons come up the screen in a pattern rather than randomly (heart, arrow, line, etc). For whatever reason, whenever a new pattern is created the game stutter lags (tiny lag spike) as the pattern is being created. I am pooling my objects so there is minimum object creation, I tested my game on a very old android phone and it ran just as well as on my Nexus 4 (the same lag spike, but everything else is good) so it must be something i'm doing code wise and not necessarily a hardware issue.

This has plagued me for countless hours and I can't seem to come to a solution. This is my BalloonPattern class:

Note: This class references stage from my main gameloop, it does not create a second stage. There is only ever 1 stage in my game.
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  
public class BalloonPattern
{
   private Player player;
   private final Stage stage; //this stage is a reference to the main stage, not a new one.
 
   private int rows = 5; //all patterns must be 5 by 5
  private int cols = 5;
   
   /**
    * 1 = red balloon
    * 2 = blue balloon
    * 3 = yellow balloon
    */

   private int[][] line_center = {{0,0,1,0,0}, //middle line pattern
                       {0,0,1,0,0},
                        {0,0,1,0,0},
                        {0,0,1,0,0},
                        {0,0,1,0,0}};

   private int[][] diamond = {{0,0,1,0,0}, //diamond pattern
                       {0,1,0,1,0},
                        {1,0,2,0,1},
                        {0,1,0,1,0},
                        {0,0,1,0,0}};
   
   private int[][] heart = {{0,1,0,1,0}, //heart pattern
                       {1,1,1,1,1},
                        {1,1,2,1,1},
                        {0,1,1,1,0},
                        {0,0,1,0,0}};
   
   private int[][] upvote = {{0,0,1,0,0}, //upvote pattern
                       {0,1,1,1,0},
                        {1,1,1,1,1},
                        {0,0,1,0,0},
                        {0,0,1,0,0}};
   
   private int[][] scatter = {{0,1,0,1,0}, //scatter pattern
                       {1,0,1,0,1},
                        {0,1,0,1,0},
                        {1,0,1,0,1},
                        {0,1,0,1,0}};
   
   private int[][] sadface = {{0,0,0,0,0}, //sadface pattern
                       {0,2,0,2,0},
                        {0,0,0,0,0},
                        {0,1,1,1,0},
                        {1,0,0,0,1}};
   
   private int[][] TIE_fighter = {{1,0,0,0,1}, //TIE fighter pattern
                       {1,0,1,0,1},
                        {1,1,1,1,1},
                        {1,0,1,0,1},
                        {1,0,0,0,1}};
   
   private int[][] line_left = {{1,0,0,0,0}, //left column pattern
                       {1,0,0,0,0},
                        {1,0,0,0,0},
                        {1,0,0,0,0},
                        {1,0,0,0,0}};
   
   private int[][] line_right = {{0,0,0,0,1}, //right coloumn pattern
                       {0,0,0,0,1},
                        {0,0,0,0,1},
                        {0,0,0,0,1},
                        {0,0,0,0,1}};
   
   private int[][] wtf =    {{3,2,3,2,3},
                     {2,3,2,3,2},
                     {3,2,3,2,3},
                     {2,3,2,3,2},
                     {3,2,3,2,3}};

   private int[][] currentPattern;
   private HashMap<String, int[][]> patternMap;
   
   ArrayList<String> patternArray;
   
   public float x_loc;
   private float x_pattern; //the patterns x location
  private float y_pattern; //the patterns y location
  private float y_loc = 0;
   private float balloonWidth = 64;
   private float time = 0;
   private float spawnTime;
   
   private Group balloonGroup;
   SnapshotArray<Actor> balloons;
   
   public class RedBalloonPool extends Pool<Actor>{
      @Override
      protected RedBalloon newObject()
      {
         // TODO Auto-generated method stub
        return new RedBalloon(player, x_loc, y_loc, false);
      }
   }
   public class BlueBalloonPool extends Pool<Actor>{
      @Override
      protected BlueBalloon newObject()
      {
         // TODO Auto-generated method stub
        return new BlueBalloon(player, x_loc, y_loc, false);
      }
   }
   public class YellowBalloonPool extends Pool<Actor>{
      @Override
      protected YellowBalloon newObject()
      {
         // TODO Auto-generated method stub
        return new YellowBalloon(player, x_loc, y_loc, false);
      }
   }
   
   RedBalloonPool rbPool = new RedBalloonPool();
   BlueBalloonPool bbPool = new BlueBalloonPool();
   YellowBalloonPool ybPool = new YellowBalloonPool();
   
   /*
    * Thoughts: After the patten finishes, take a snapshot array, free the balloons to the pool.
    */

   
   /**
    *
    * @param p Reference to the {@link Player}
    * @param stage Reference to the parent {@link Stage}
    * @param time Interval in second before a new pattern is created
    */

   public BalloonPattern(Player p, Stage stage, float time)
   {
      this.player = p;
      this.stage = stage;
      spawnTime = time;
     
      patternMap = new HashMap<String, int[][]>();
     
      //add patterns to map
     patternMap.put("line",line_center);
      patternMap.put("line_right", line_right);
      patternMap.put("line_left", line_left);
      patternMap.put( "diamon",diamond);
      patternMap.put("heart",heart);
      patternMap.put("sadface",sadface);
      patternMap.put("upvote",upvote);
      patternMap.put("scatter",scatter);
      patternMap.put("TIE fighter",TIE_fighter);
      patternMap.put("wtf", wtf);
     
      patternArray = new ArrayList<String>(patternMap.keySet());
     
      /*
       * Add initial ballons to the pool
       */

     
      populatePools();
     
   }
   private void populatePools()
   {
      /*
       * This is an idea I had to give the pools some initial objects, so when the first pattern
       * is created, it wouldnt have lag. However, this did not help.
       */

      Balloon b;
      for(int i = 0; i < 15; i++)
      {
         if(i < 5) //add 5 blue and yellow ballons to the pool
        {
            b = bbPool.newObject();
            bbPool.free(b);
            b = ybPool.newObject();
            ybPool.free(b);
         }
         else //add 10 red balloons to the pool
        {
            b = rbPool.newObject();
            rbPool.free(b);
         }
      }
     
   }
   public void update()
   {
      time += Gdx.graphics.getDeltaTime();
      if(time > spawnTime)
      {
         x_pattern = MathUtils.random(Stratofall.WIDTH - (cols * balloonWidth));
         y_pattern = 0; //this will change depending on how many rows of the pattern contain a coin
       
         setPattern();
         time = 0;
      }
   }
   private void setPattern()
   {
      currentPattern = patternMap.get(patternArray.get(MathUtils.random(patternArray.size()-1)));
      createBalloons();
   }
   private void createBalloons()
   {
      Group temp = balloonGroup;
      /*
       * This method adds the old balloons to the pool to be re-used before creating the new group
       */

      freeBalloons(temp);
      /*
       * the size of our balloon is 64 so we need to make sure each balloon in the
       * group is offset by 64 and add them to the group.
       */

     
      balloonGroup = new Group();
      if(stage.getActors().contains(balloonGroup, true))
      {
         System.out.println("Does not contain a balloon group");
      }
      else
      {
         stage.getRoot().removeActor(temp); //remove the old balloon group
        stage.addActor(balloonGroup); //add the new balloon group
     }
     
      int[][] localArray = currentPattern; //the loop doesnt need to look up the pattern from memory
     
      /*
       * Creating a local array means that it doesnt need to look up the array
       * every loop from memory. Also, looping as done below is much faster than
       * using traditional for loops.
       *
       */

      Balloon balloon;
     
      for(int[] array:localArray)
      {
         x_loc = x_pattern;
         for(int num:array)
         {
            if(num == 1)
            {
               balloon = rbPool.newObject();
               balloon.allowReset(false);
               balloonGroup.addActor(balloon);
            }
            else if(num == 2)
            {
               balloon = bbPool.newObject();
               balloon.allowReset(false); //the balloon does not reset
              balloonGroup.addActor(balloon); //add the balloon to the group
           }
            else if(num == 3)
            {
               balloon = ybPool.newObject();
               balloon.allowReset(false);
               balloonGroup.addActor(balloon);
            }
            x_loc = x_loc + (balloonWidth);
         }
         y_loc = y_loc - (balloonWidth);
         y_pattern = y_loc;
      }
   }
   private void freeBalloons(Group balloonGroup)
   {
      /*
       * Before a new pattern is made, we free the balloons from the old
       * balloonGroup to be used in the new one.
       */

      if(balloonGroup != null)
      {
         balloons = balloonGroup.getChildren();
         if(balloons.size > 0) //there are balloons to free
        {
            for (Actor balloon : balloons)
            {
               /*
                * free each balloon to add to the pool
                */

               String name = balloon.getName();
               if(name.equals("red"))
               {
                  rbPool.free(balloon);
               }
               else if(name.equals("blue"))
               {
                  bbPool.free(balloon);
               }
               else if(name.equals("yellow"))
               {
                  ybPool.free(balloon);
               }
               else
                  System.out.println("ERROR: Balloon not added to pool!");
            }
         }
      }
     
   }
   public float getY()
   {
      return y_pattern;
   }
   public void setPattern(String pattern)
   {
      currentPattern = patternMap.get(pattern);
   }


Here is an example of how my BalloonPattern works in the game loop

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  
/**
 *
 * @author Shane All game objects and HUD are drawn and displayed here.
 */


public class GameScreen implements Screen
{
   FPSLogger fpsLogger = new FPSLogger();

   private ParticleEffect dustEffect;

   private Player player;
   private Music gameMusic;
   private Texture backgroundImage;
   private ScrollingLayer backgroundLayer;
   private GameHud hud;

   private float background_y = -2560; // starting position
  private float background_rate = .25f; // the rate at which the background
                                // progresses up the screen

   // private BalloonPattern balloonPattern;

   private Stage stage;
   private Group cloudGroup, cloudGroup2, balloonGroup;
   private CloudManager cloudManager;
   private CloudManager cloudManager2;
   private BalloonManager balloonManager;
   private BalloonPattern balloonPattern;

   public GameScreen()
   {
      player = new Player();
      hud = new GameHud(player); // create a new instance of hud referencing
                          // player

      // load images
     backgroundImage = Stratofall.assets.get("backgrounds/background.jpg",
            Texture.class);
      backgroundLayer = new ScrollingLayer(backgroundImage, .85f);

      // load sounds (should be background noises, other sounds should be
     // loaded within their respective classes)
     gameMusic = Stratofall.assets.get("sounds/background/game_music.ogg",
            Music.class);
      gameMusic.setLooping(true);

      // load effects
     dustEffect = new ParticleEffect();
      dustEffect.load(Gdx.files.internal("particles/effects/dust.p"),
            Gdx.files.internal("particles/effects"));
      dustEffect.setPosition(Stratofall.WIDTH / 2, Stratofall.HEIGHT / 2); // center
                                                           // of
                                                           // screen
                                                           // at
                                                           // the
                                                           // bottom
     dustEffect.start();

      stage = new Stage(Stratofall.WIDTH, Stratofall.HEIGHT);
      Gdx.input.setInputProcessor(stage);

      cloudGroup = new Group();
      cloudGroup2 = new Group();
      balloonGroup = new Group();
     
     
      cloudManager2 = new CloudManager(cloudGroup2, player);
      cloudManager = new CloudManager(cloudGroup, player);
         cloudManager.setMaxNormalClouds(4);
         cloudManager.setMaxLightningClouds(1);
         cloudManager2.setMaxNormalClouds(4);
         cloudManager2.setMaxLightningClouds(0);
      stage.addActor(backgroundLayer);
      stage.addActor(cloudGroup2);
      stage.addActor(player);
      balloonPattern = new BalloonPattern(player, stage, 12);
      stage.addActor(balloonGroup);
      stage.addActor(cloudGroup);
     
      balloonManager = new BalloonManager(balloonGroup, player);
      //balloonManager.setMaxRedBalloon(100);
     stage.addActor(hud);

   }

   @Override
   public void render(float delta)
   {
      Gdx.gl.glClearColor(0.9f, 0.9f, 0.9f, 0f);
      Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

      update();
      stage.act(delta);
      stage.draw();

      // fpsLogger.log();

      stage.getSpriteBatch().begin();
      dustEffect.draw(stage.getSpriteBatch(), delta);
      stage.getSpriteBatch().end();

   }

   private void update()
   {
      cloudManager.update();  //works perfectly, no noticeable lag
     cloudManager2.update(); //works perfectly, no noticeable lag
     balloonManager.update(); //works perfectly, no noticeable lag : balloonManager manages randomly spawned balloons. Nothing to do with BalloonPattern
     balloonPattern.update();


      if (player.getLives() == 0)
      {
         //System.gc();
        ((Game) Gdx.app.getApplicationListener())
               .setScreen(new FinalScoreScreen(player));
         dispose();
      }

      // keyboard input
     if (Gdx.input.isKeyPressed(Input.Keys.ESCAPE))
      {
         ((Game) Gdx.app.getApplicationListener())
               .setScreen(new MainMenuScreen());
         dispose();
      }

      if (Gdx.input.isKeyPressed(Input.Keys.F)) //testing purposes
     {
         ((Game) Gdx.app.getApplicationListener())
               .setScreen(new FinalScoreScreen(player));
         dispose();
      }

      if (Gdx.input.justTouched())
      {
         System.out.println(Gdx.input.getX() + ", "
               + (Gdx.graphics.getHeight() - Gdx.input.getY()));
      }
   }
}


Any ideas on why this might be happening to only my BalloonPatterns but nothing else? Possible fix?
12  Game Development / Performance Tuning / [Android - LibGDX] Adding/Removing group from a stage is causing stutter lag? on: 2013-11-13 08:30:52
Alright so I am currently working on an my first android game. In this game there are "Balloons" that the player can run into (2d game) to increase his score. Right now the game uses many other objects and particle effects and runs perfectly smooth. I even spawn random balloons (they come up the screen randomly) without issue.

I built a "Balloon Pattern" class which basically puts balloons into a Group and adds that group to the stage. These balloons come up the screen in a pattern rather than randomly (heart, arrow, line, etc). For whatever reason, whenever a new pattern is created the game stutter lags (tiny lag spike) as the pattern is being created. I am pooling my objects so there is minimum object creation, I tested my game on a very old android phone and it ran just as well as on my Nexus 4 (the same lag spike, but everything else is good) so it must be something i'm doing code wise and not necessarily a hardware issue.

This has plagued me for countless hours and I can't seem to come to a solution. This is my BalloonPattern class:

Note: This class references stage from my main gameloop, it does not create a second stage. There is only ever 1 stage in my game.
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  
public class BalloonPattern
{
   private Player player;
   private final Stage stage; //this stage is a reference to the main stage, not a new one.
 
   private int rows = 5; //all patterns must be 5 by 5
  private int cols = 5;
   
   /**
    * 1 = red balloon
    * 2 = blue balloon
    * 3 = yellow balloon
    */

   private int[][] line_center = {{0,0,1,0,0}, //middle line pattern
                       {0,0,1,0,0},
                        {0,0,1,0,0},
                        {0,0,1,0,0},
                        {0,0,1,0,0}};

   private int[][] diamond = {{0,0,1,0,0}, //diamond pattern
                       {0,1,0,1,0},
                        {1,0,2,0,1},
                        {0,1,0,1,0},
                        {0,0,1,0,0}};
   
   private int[][] heart = {{0,1,0,1,0}, //heart pattern
                       {1,1,1,1,1},
                        {1,1,2,1,1},
                        {0,1,1,1,0},
                        {0,0,1,0,0}};
   
   private int[][] upvote = {{0,0,1,0,0}, //upvote pattern
                       {0,1,1,1,0},
                        {1,1,1,1,1},
                        {0,0,1,0,0},
                        {0,0,1,0,0}};
   
   private int[][] scatter = {{0,1,0,1,0}, //scatter pattern
                       {1,0,1,0,1},
                        {0,1,0,1,0},
                        {1,0,1,0,1},
                        {0,1,0,1,0}};
   
   private int[][] sadface = {{0,0,0,0,0}, //sadface pattern
                       {0,2,0,2,0},
                        {0,0,0,0,0},
                        {0,1,1,1,0},
                        {1,0,0,0,1}};
   
   private int[][] TIE_fighter = {{1,0,0,0,1}, //TIE fighter pattern
                       {1,0,1,0,1},
                        {1,1,1,1,1},
                        {1,0,1,0,1},
                        {1,0,0,0,1}};
   
   private int[][] line_left = {{1,0,0,0,0}, //left column pattern
                       {1,0,0,0,0},
                        {1,0,0,0,0},
                        {1,0,0,0,0},
                        {1,0,0,0,0}};
   
   private int[][] line_right = {{0,0,0,0,1}, //right coloumn pattern
                       {0,0,0,0,1},
                        {0,0,0,0,1},
                        {0,0,0,0,1},
                        {0,0,0,0,1}};
   
   private int[][] wtf =    {{3,2,3,2,3},
                     {2,3,2,3,2},
                     {3,2,3,2,3},
                     {2,3,2,3,2},
                     {3,2,3,2,3}};

   private int[][] currentPattern;
   private HashMap<String, int[][]> patternMap;
   
   ArrayList<String> patternArray;
   
   public float x_loc;
   private float x_pattern; //the patterns x location
  private float y_pattern; //the patterns y location
  private float y_loc = 0;
   private float balloonWidth = 64;
   private float time = 0;
   private float spawnTime;
   
   private Group balloonGroup;
   SnapshotArray<Actor> balloons;
   
   public class RedBalloonPool extends Pool<Actor>{
      @Override
      protected RedBalloon newObject()
      {
         // TODO Auto-generated method stub
        return new RedBalloon(player, x_loc, y_loc, false);
      }
   }
   public class BlueBalloonPool extends Pool<Actor>{
      @Override
      protected BlueBalloon newObject()
      {
         // TODO Auto-generated method stub
        return new BlueBalloon(player, x_loc, y_loc, false);
      }
   }
   public class YellowBalloonPool extends Pool<Actor>{
      @Override
      protected YellowBalloon newObject()
      {
         // TODO Auto-generated method stub
        return new YellowBalloon(player, x_loc, y_loc, false);
      }
   }
   
   RedBalloonPool rbPool = new RedBalloonPool();
   BlueBalloonPool bbPool = new BlueBalloonPool();
   YellowBalloonPool ybPool = new YellowBalloonPool();
   
   /*
    * Thoughts: After the patten finishes, take a snapshot array, free the balloons to the pool.
    */

   
   /**
    *
    * @param p Reference to the {@link Player}
    * @param stage Reference to the parent {@link Stage}
    * @param time Interval in second before a new pattern is created
    */

   public BalloonPattern(Player p, Stage stage, float time)
   {
      this.player = p;
      this.stage = stage;
      spawnTime = time;
     
      patternMap = new HashMap<String, int[][]>();
     
      //add patterns to map
     patternMap.put("line",line_center);
      patternMap.put("line_right", line_right);
      patternMap.put("line_left", line_left);
      patternMap.put( "diamon",diamond);
      patternMap.put("heart",heart);
      patternMap.put("sadface",sadface);
      patternMap.put("upvote",upvote);
      patternMap.put("scatter",scatter);
      patternMap.put("TIE fighter",TIE_fighter);
      patternMap.put("wtf", wtf);
     
      patternArray = new ArrayList<String>(patternMap.keySet());
     
      /*
       * Add initial ballons to the pool
       */

     
      populatePools();
     
   }
   private void populatePools()
   {
      /*
       * This is an idea I had to give the pools some initial objects, so when the first pattern
       * is created, it wouldnt have lag. However, this did not help.
       */

      Balloon b;
      for(int i = 0; i < 15; i++)
      {
         if(i < 5) //add 5 blue and yellow ballons to the pool
        {
            b = bbPool.newObject();
            bbPool.free(b);
            b = ybPool.newObject();
            ybPool.free(b);
         }
         else //add 10 red balloons to the pool
        {
            b = rbPool.newObject();
            rbPool.free(b);
         }
      }
     
   }
   public void update()
   {
      time += Gdx.graphics.getDeltaTime();
      if(time > spawnTime)
      {
         x_pattern = MathUtils.random(Stratofall.WIDTH - (cols * balloonWidth));
         y_pattern = 0; //this will change depending on how many rows of the pattern contain a coin
       
         setPattern();
         time = 0;
      }
   }
   private void setPattern()
   {
      currentPattern = patternMap.get(patternArray.get(MathUtils.random(patternArray.size()-1)));
      createBalloons();
   }
   private void createBalloons()
   {
      Group temp = balloonGroup;
      /*
       * This method adds the old balloons to the pool to be re-used before creating the new group
       */

      freeBalloons(temp);
      /*
       * the size of our balloon is 64 so we need to make sure each balloon in the
       * group is offset by 64 and add them to the group.
       */

     
      balloonGroup = new Group();
      if(stage.getActors().contains(balloonGroup, true))
      {
         System.out.println("Does not contain a balloon group");
      }
      else
      {
         stage.getRoot().removeActor(temp); //remove the old balloon group
        stage.addActor(balloonGroup); //add the new balloon group
     }
     
      int[][] localArray = currentPattern; //the loop doesnt need to look up the pattern from memory
     
      /*
       * Creating a local array means that it doesnt need to look up the array
       * every loop from memory. Also, looping as done below is much faster than
       * using traditional for loops.
       *
       */

      Balloon balloon;
     
      for(int[] array:localArray)
      {
         x_loc = x_pattern;
         for(int num:array)
         {
            if(num == 1)
            {
               balloon = rbPool.newObject();
               balloon.allowReset(false);
               balloonGroup.addActor(balloon);
            }
            else if(num == 2)
            {
               balloon = bbPool.newObject();
               balloon.allowReset(false); //the balloon does not reset
              balloonGroup.addActor(balloon); //add the balloon to the group
           }
            else if(num == 3)
            {
               balloon = ybPool.newObject();
               balloon.allowReset(false);
               balloonGroup.addActor(balloon);
            }
            x_loc = x_loc + (balloonWidth);
         }
         y_loc = y_loc - (balloonWidth);
         y_pattern = y_loc;
      }
   }
   private void freeBalloons(Group balloonGroup)
   {
      /*
       * Before a new pattern is made, we free the balloons from the old
       * balloonGroup to be used in the new one.
       */

      if(balloonGroup != null)
      {
         balloons = balloonGroup.getChildren();
         if(balloons.size > 0) //there are balloons to free
        {
            for (Actor balloon : balloons)
            {
               /*
                * free each balloon to add to the pool
                */

               String name = balloon.getName();
               if(name.equals("red"))
               {
                  rbPool.free(balloon);
               }
               else if(name.equals("blue"))
               {
                  bbPool.free(balloon);
               }
               else if(name.equals("yellow"))
               {
                  ybPool.free(balloon);
               }
               else
                  System.out.println("ERROR: Balloon not added to pool!");
            }
         }
      }
     
   }
   public float getY()
   {
      return y_pattern;
   }
   public void setPattern(String pattern)
   {
      currentPattern = patternMap.get(pattern);
   }


Here is an example of how my BalloonPattern works in the game loop

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  
/**
 *
 * @author Shane All game objects and HUD are drawn and displayed here.
 */


public class GameScreen implements Screen
{
   FPSLogger fpsLogger = new FPSLogger();

   private ParticleEffect dustEffect;

   private Player player;
   private Music gameMusic;
   private Texture backgroundImage;
   private ScrollingLayer backgroundLayer;
   private GameHud hud;

   private float background_y = -2560; // starting position
  private float background_rate = .25f; // the rate at which the background
                                // progresses up the screen

   // private BalloonPattern balloonPattern;

   private Stage stage;
   private Group cloudGroup, cloudGroup2, balloonGroup;
   private CloudManager cloudManager;
   private CloudManager cloudManager2;
   private BalloonManager balloonManager;
   private BalloonPattern balloonPattern;

   public GameScreen()
   {
      player = new Player();
      hud = new GameHud(player); // create a new instance of hud referencing
                          // player

      // load images
     backgroundImage = Stratofall.assets.get("backgrounds/background.jpg",
            Texture.class);
      backgroundLayer = new ScrollingLayer(backgroundImage, .85f);

      // load sounds (should be background noises, other sounds should be
     // loaded within their respective classes)
     gameMusic = Stratofall.assets.get("sounds/background/game_music.ogg",
            Music.class);
      gameMusic.setLooping(true);

      // load effects
     dustEffect = new ParticleEffect();
      dustEffect.load(Gdx.files.internal("particles/effects/dust.p"),
            Gdx.files.internal("particles/effects"));
      dustEffect.setPosition(Stratofall.WIDTH / 2, Stratofall.HEIGHT / 2); // center
                                                           // of
                                                           // screen
                                                           // at
                                                           // the
                                                           // bottom
     dustEffect.start();

      stage = new Stage(Stratofall.WIDTH, Stratofall.HEIGHT);
      Gdx.input.setInputProcessor(stage);

      cloudGroup = new Group();
      cloudGroup2 = new Group();
      balloonGroup = new Group();
     
     
      cloudManager2 = new CloudManager(cloudGroup2, player);
      cloudManager = new CloudManager(cloudGroup, player);
         cloudManager.setMaxNormalClouds(4);
         cloudManager.setMaxLightningClouds(1);
         cloudManager2.setMaxNormalClouds(4);
         cloudManager2.setMaxLightningClouds(0);
      stage.addActor(backgroundLayer);
      stage.addActor(cloudGroup2);
      stage.addActor(player);
      balloonPattern = new BalloonPattern(player, stage, 12);
      stage.addActor(balloonGroup);
      stage.addActor(cloudGroup);
     
      balloonManager = new BalloonManager(balloonGroup, player);
      //balloonManager.setMaxRedBalloon(100);
     stage.addActor(hud);

   }

   @Override
   public void render(float delta)
   {
      Gdx.gl.glClearColor(0.9f, 0.9f, 0.9f, 0f);
      Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

      update();
      stage.act(delta);
      stage.draw();

      // fpsLogger.log();

      stage.getSpriteBatch().begin();
      dustEffect.draw(stage.getSpriteBatch(), delta);
      stage.getSpriteBatch().end();

   }

   private void update()
   {
      cloudManager.update();  //works perfectly, no noticeable lag
     cloudManager2.update(); //works perfectly, no noticeable lag
     balloonManager.update(); //works perfectly, no noticeable lag : balloonManager manages randomly spawned balloons. Nothing to do with BalloonPattern
     balloonPattern.update();


      if (player.getLives() == 0)
      {
         //System.gc();
        ((Game) Gdx.app.getApplicationListener())
               .setScreen(new FinalScoreScreen(player));
         dispose();
      }

      // keyboard input
     if (Gdx.input.isKeyPressed(Input.Keys.ESCAPE))
      {
         ((Game) Gdx.app.getApplicationListener())
               .setScreen(new MainMenuScreen());
         dispose();
      }

      if (Gdx.input.isKeyPressed(Input.Keys.F)) //testing purposes
     {
         ((Game) Gdx.app.getApplicationListener())
               .setScreen(new FinalScoreScreen(player));
         dispose();
      }

      if (Gdx.input.justTouched())
      {
         System.out.println(Gdx.input.getX() + ", "
               + (Gdx.graphics.getHeight() - Gdx.input.getY()));
      }
   }
}


Any ideas on why this might be happening to only my BalloonPatterns but nothing else? Possible fix?
13  Discussions / Miscellaneous Topics / Re: Snipping Tool++ (An advanced screenshot/text uploading tool) on: 2012-06-26 19:21:39
In an attempt to try and get my application known, I have created a facebook page for it.

So if any of you like the application or use it, it would mean a lot if you helped me by
liking the page Smiley
http://www.facebook.com/SnippingToolPlusPlus

14  Game Development / Newbie & Debugging Questions / Re: How to edit a windows registry key value? on: 2012-06-26 06:27:07
I tried the following, but it seemed to do absolutely nothing. didn't change it at all.
1  
2  
3  
4  
5  
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Sofware\Microsoft\Windows\CurrentVersion\Screensavers\ssText3d]
"DisplayString"="This was edited with a reg file"
 


I noticed a typo: 'Sofware'. Might be worth checking it isn't in your code.

Edit: BTW: I also noticed that if you use REG ADD it needs a /f flag to force an overwrite without a confirm prompt.

Oh wow I feel stupid now. I read over it for spelling mistakes also and didnt even catch the missing 't'.

im pretty sure that was it.

and i tested by make a .reg file. I figured if that worked, it would work using the getRuntime way with command arguments.

Edit:
So that simple type seemed to fix my problem, it updates the key with the correct value, however, the 3dtext screen saver does not seem to want to
use that value as the text. it reverts to the default text of 'Windows 7'. possibly have to restart my computer? hmm.. ill have to look into this further
tomorrow sometime :\

Thanks for the help so far!
15  Discussions / Business and Project Management Discussions / Re: I will hire at least one JGO member if I get 250 likes and win. on: 2012-06-25 05:15:35
You are disqualifying yourself by posting this kind of post Smiley

Quote
You may not entice Consumers to Vote by offering any type of consideration, gift, award, or inducement, including merchandise, cash, online currency, discounts, vote trading or anything deemed to have value in exchange for Votes.

Mike

Yes, I believe you may have actually disqualified yourself. You enticed us to vote for you in the off chance that one of us will get hired to your company. That right there is a type of consideration. :\
16  Game Development / Newbie & Debugging Questions / Re: How to edit a windows registry key value? on: 2012-06-25 04:31:26
I tried the following, but it seemed to do absolutely nothing. didn't change it at all.
1  
2  
3  
4  
5  
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Sofware\Microsoft\Windows\CurrentVersion\Screensavers\ssText3d]
"DisplayString"="This was edited with a reg file"
 
17  Game Development / Newbie & Debugging Questions / Re: How to edit a windows registry key value? on: 2012-06-25 04:25:17
I don't have my Windows nearby but as I remember REG files overwrite whatever values are there.

EDIT:
From the MS support site:
Quote
When you run a .reg file, the file contents merge into the local registry. Therefore, you must distribute .reg files with caution.

hmm. i guess i will try the way you posted earlier and see how that works.
18  Game Development / Newbie & Debugging Questions / Re: How to edit a windows registry key value? on: 2012-06-25 04:16:14
and I don't understand what you mean by feed the registry a prepared key..?

The reason I am looking to do this through code is because the key will be changing
every so often.
Note that your screen saver will probably need to be re-started in order for the new text to take effect.

You could programatically create a reg file like so:
1  
2  
3  
4  
5  
Header
Blank line
[RegistryPath]
"DataType"="DataValue"
Blank line


1  
2  
3  
4  
Windows Registry Editor Version 5.00

[HKEY_USERS\.DEFAULT\Software\Microsoft\Screensavers\Text3D]
"DisplayString"="Your message here..."


More info:
http://support.microsoft.com/kb/310516

This creates a new one, I need to edit an existing one... Unless I can overwrite registry keys? But I don't think you can.
19  Game Development / Newbie & Debugging Questions / Re: How to edit a windows registry key value? on: 2012-06-25 04:09:56
This doesn't answer your question, but I'm wondering, have you considered using a Properties file? Is there a specific need to use the registry for this task, or is that you just want to?

That is how the default windows 3d text screen saver gets the text input value. through the registry, therefor I have to use the registry. Unless
I designed my own screen saver which I really dont want to do.

The closest I found to editing, is adding a new key but, that does not help me.
1  
2  
3  
4  
5  
6  
7  
8  
try
   {
      Runtime.getRuntime().exec("REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\your soft\key");
   }
   catch(Exception e)
   {
      System.out.println("Error ocured!");
   }


Im sure there is someway to do it using Runtime. :\
20  Game Development / Newbie & Debugging Questions / Re: How to edit a windows registry key value? on: 2012-06-25 03:36:54
Assuming that you're creating a game, why you need to modify the reg?

well if you would have read my topic post, you would know that haha.

and I don't understand what you mean by feed the registry a prepared key..?

The reason I am looking to do this through code is because the key will be changing
every so often.

What I am trying to do is have a website where someone, anyone with a link can change the
text of my screen saver with a simple string input. My program, will check for a change in the
string value on the website, and if changed, change the text of my screen saver by editing my
registry.

This has nothing to do with a game and will only affect me.
21  Game Development / Newbie & Debugging Questions / How to edit a windows registry key value? on: 2012-06-25 00:30:36
There is a specific key in the registry that I would like to edit with java.

The value is a String, in fact, its the 3Dtext screen savers display text.

I do not want to create a new registry key or delete one, I just want to edit one and simply change the string value
of it.


I searched all over google but all I come up with are was to create a new key.

any ideas?
22  Discussions / Miscellaneous Topics / Re: Snipping Tool++ (An advanced screenshot/text uploading tool) on: 2012-06-20 19:29:28
Ah. I will fix that now.

I am moving a lot of stuff over to my website that im setting up and
forgot to update the link here.

Edit: ok. the download link should take you to my webpage where I have it
hosted.

Its easier to keep track of links and updates if I direct everything to my website now. rather
than having to update stuff here so much.

However, I will still let everyone know of updates here when they occur. 
23  Discussions / General Discussions / Re: What's your dev rig? on: 2012-06-17 00:17:52


HDD: 300GB at 7200 rpm (yea, i need a shit ton more space, gonna buy a 2tb soon)
RAM: 8GB
CPU: Intel Core i3-2100 CPU @ 3.10GHz
Graphics Card: Gigabyte Amd HD 6950
Motherboard: MSI P67S-C43

For perspective reason, runs BF3 Completely maxed with 2x AA instead of 4x at 50-60 fps.

I usually just play it on high just because i get a constant 70-80 fps and hardly a graphical difference.
24  Discussions / General Discussions / Need help setting up a website on: 2012-06-16 19:42:10
nevermind. I found what I was looking for.

sorry for the spam post :\
25  Games Center / Archived Projects / Re: Stage Dive Hero on: 2012-06-16 16:24:45
I found it nearly impossible to hit any arrow, you have to be almost perfectly, you should account for
visual lag a little I guess.

The other thing, holy cow you main class is huge. You should try and split things into separate class files
instead of keeping the entire game in one file. Just good coding rules.

Just a thought.
26  Discussions / Miscellaneous Topics / Re: Snipping Tool++ (An advanced screenshot/text uploading tool) on: 2012-06-16 00:53:30
Updated.

Fixed all the above..

Added the Multi-Image Uploader
Added Multi-Snippet capture support. (draw boxes around anything you want combined into a single image)

Added some more example images to the original post.

To enable multi-snippet capture, go to Preferences>General > Click the checkbox

Enjoy. (I also changed the download location to use my dropbox now instead of mediafire)
27  Discussions / Miscellaneous Topics / Re: Snipping Tool++ (An advanced screenshot/text uploading tool) on: 2012-06-14 22:52:50
Just realized there may be a bug where the program does not
run, if this is the case, delete the ".snippingtool++" data
directory if it exists. It should be located under C:/users/[username]/.snippingtool++
then restart the program.

Also, I was notified of an issue caused by anyone who has a secondary monitor
to the left of their main screen.

All of these issues will be fixed real soon hopefully with the next update. The next
update will also feature the new multi-image uploading tool.


28  Discussions / Miscellaneous Topics / Re: Snipping Tool++ (An advanced screenshot/text uploading tool) on: 2012-06-14 00:47:29
Coming soon (when I finish adding a few touch ups to the code and what not)



You can now upload images that you may already have saved on your computer.
Simply drag them to the box, and click upload!

This will decrease your hourly image cap of 50 uploads per hour. After which
you will be given an error until your cap refreshes.
29  Games Center / Featured Games / Re: Overbind on: 2012-06-11 20:40:54
thats what I was trying to do but I cant seem to get it.

I ended up getting annoyed and quit.. lol

might want to fix that, else it looks like it could be a really fun game, if I could
get past that part.
30  Games Center / Featured Games / Re: Overbind on: 2012-06-11 20:38:17
I got past the second hurtle once, but then I died at the 3rd and cant get over the second.

I think the second one should be a bit easier especially if its supposed to slowly get harder as you progress.

just a thought.
Pages: [1] 2 3 ... 7
 

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 (24 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 (33 views)
2014-08-08 02:01:56

Norakomi (42 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!