How to smoothly resize LibGdx window - java

I'm trying to change my game window size. My tactic is to resize height when width is changed preserving aspect ratio (and viceversa). But when calling setDisplayMode, window blinks and is an ugly effect.
I'd like to access to lwjgl object to change the window properties (then I could change viewport settings accordingly in LibGdx). Does exists a way to change window size in LibGdx without setDisplayMode? Or at least, does exists a way to access LwjGL object inside the application?
Thanks

Related

How to make a LibGDX application launch at the same resolution as the browser frame

So I am attempting to make my game to where when launched (from browser), will take up all of the screen in the browser. In my HTML launcher code I have to feed it a width and a height, so I have been trying to access the width and height of the browser frame to initialize the game. So far I haven't gotten anything to work. These are the attempts I made to access the width and height in order.
Gdx.graphics.getWidth() and Gdx.graphics.getHeight()
Gdx.app.getGraphics().getWidth() and Gdx.app.getGraphics().getHeight()
this.getGraphics().getWidth() and this.getGraphics().getHeight()
All of these when used on this code: return new GwtApplicationConfiguration(int width, int height); display nothing. Only when I hard-code a value in does it show anything, and hard-coding doesn't seem like a good way to go for a browser that could be any size.
Alternatively, can these values be set as the resolution (like 1920x1080) and then just use css to strech the game across the entire screen, or is this not the way to go?
In the future I want to make the game resize when the browser re-sizes as well, so I will be adding the same code to the resize event.
You have to use platform specific code...
return new GwtApplicationConfiguration(Window.getClientWidth(), Window.getClientHeight());
source: LibGDX Automatically Scaling GWT Window to Monitor Resolution

Java - Different Resolutions, Same Coordinates

I would like the user of my software to resize the window that is presented to them when they launch the application. I can make the graphics of the game or application resize fine but I can't quite get the coordinates to be the same on every different size. If I have a collision detection box at 50,50 with the dimensions of 50,50. Of course the graphics are at those coordinates. But when I resize it the box stays in the same place but the graphic moves according to resizing.
When you resize the window, the size of the window changes, but the coordinates do not change.
What you need to do is register a listener to changing size, get the current size and change the coordinates of your detection box.

Java frame for displaying always fullscreen game?

Currently I have JFrame that is always set to fullscreen, JPanel with a resolution that can be changed and a BufferedImage which is drawn onto the JPanel and is a fixed resolution of my game. I feel like this is very inefficient since there can be like three different resolutions, the fullscreen used for the JFrame being a screen resolution, a custom resolution for JPanel set by the user and the game's resolution could be different to both where I would be resizing twice before drawing.
How do modern games like Battlefield allow you to change resolution, they're always fullscreen and they're not just resizing in the window when they resize since I have a dual screen with one a TV and it actually shows me changed resolution due to changing the resolution of the game eventhough my TV can take the max of 1920 x 1080 but it's still fullscreen? All I need is really drawing to pixels, I don't even need adding buttons from swing or anything like that, I'll do that myself. My game is should always be fullscreen. I've been making my game and I'm really comfortable with using JFrame and JPanel but I really want to switch to something else if it's more efficient. What do you think I could do?
you could try this:
Toolkit.getDefaultToolkit().getScreenResolution();
or
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
gd.setFullScreenWindow(app);
Also take a look at this post:
In JAVA, changing resolution with setDisplayMode for fullscreen application
Rendering to a BufferedImage of fixed size is somewhat defeating the purpose, unless you explicitly want scaling (e.g. because you can't render the full res fast enough).
All you need to do is resize your back buffer when the frame size changes (and render into it according to its current size, of course).
You can detect the changes easily by using either a WindowListener attached to the JFrame, or a ComponentListener attached to the contained panel. For flexibility, I personally would prefer the ComponentListener on the panel, because that enables you to use the same panel and listener for either windowed or full screen mode. Be cautious though that the listener will be called on the Swing event dispatch thread, so depending on the threading architecture of your game you may need some thread synchronization to communicate the change safely.
The way games like battlefield do it is with 3D world coordinates that are independent of the screen resolution using OpenGL or DirectX. Developers feed world coordinates into a rendering engine that then converts to screen coordinates. This is done with whatever the current screen resolution is set to. You will notice though that the HUD size will change depending on your selection of resolution. This is because the HUD is usually a 2D construct that is tied directly to screen coordinates. If you want to do some 3D stuff I would recommend LWJGL. Your only option with Swing is to look into using AffineTransform to scale your display. This however is inefficient compared to 3D and could be slower than you would desire.

Java Swing - Scaling UI to fit window resolution

I have made a program that uses null, border, card and some my custom layouts. The window of the program is set to resizable:false. Now I wan't to make full screen mode for my program but the problem is that GUI looks ugly if the size of the screen isn't the one I set. I could implement some kind of scale factor for all the components but the problem is that I have over 2000 components in over 50 classes.
Is there an option to resize whole swing UI for defined factor? That means that the image rendered as UI and all mouse events aswell would be resized.
You should probably try to rely on your layout managers. Try to figure out specifically which layouts aren't resizing the way you want, and focus on correcting their behavior instead of trying to manage everything from the top down.
Alternatively, you could keep the size ratio by adding black bars to the top and bottom or left and right of the window when it's in full screen mode. You'll probably still have to play with some of the layouts to get them perfect though.
Having 2000 different components sounds like a usability nightmare, but that's a different issue.

Java applet scale

I have a java game that I have made, is it a Canvas in a JFrame to run as an application and an applet.
When running as an applet, I want it so that when the user resizes the window, the game scales to fit the new size window.
Is there anyway of resizing the canvas and all the images or shapes that I have drawn on it to fit the new size window, or do I have to go though and change the code on all my objects and the positions they draw?
Any help would be very useful :)
You would have to add scaling to your painting. A transformation applied to your graphics might be the easiest way. You would determine the current size of the Canvas and scale based on the standard size.

Categories