Jump to content
  • Advertisement

Lane Spangler

  • Content Count

  • Joined

  • Last visited

Community Reputation

114 Neutral

About Lane Spangler

  • Rank
  1. Lane Spangler

    Scaling game to different resolutions (LWJGL)

    Ok, I fixed it. The issue was that I was using the current resolution to position game objects instead of the 1920x1080 resolution. So for example I would do Paddle P1 = new Paddle(0, Display.getDisplayMode().getHeight()/2); \ When I should be doing Paddle P1 = new Paddle(0, 540);
  2. Lane Spangler

    Scaling game to different resolutions (LWJGL)

    I thought this as well. When I do that it does achieve the desired effect except the game no longer fits the game window. For example, in a 1024x576 window using [color=#000000]GL11[color=#666600].[color=#000000]glOrtho[color=#666600]([color=#006666]0.0D[color=#666600],[color=#000000] [color=#006666]1920.0D[color=#666600],[color=#000000] [color=#006666]0.0D[color=#666600],[color=#000000] [color=#006666]1080.0D[color=#666600],[color=#000000] [color=#006666]1.0D[color=#666600],[color=#000000] [color=#666600]-[color=#006666]1.0D[color=#666600]); The game is fit to roughly the bottom left corner of the window. It seems to have scaled correctly at least.
  3. I have made a pong clone in java using the LWJGL game library. I am not sure how to make it so the game plays the same way in different resolutions. It is kind of hard to explain. I made the game based on a 1920x1080 resolution. When I change the resolution the paddle and ball and everything remains the same size in pixels. So in a lower resolution you are playing in an extremely small space and the paddles and the ball are huge. This is the code that I use to set up the display and stuff: From main class: package com.gmail.l5p4ngl312.pong; import java.awt.Dimension; import java.awt.Toolkit; import org.lwjgl.LWJGLException; import org.lwjgl.Sys; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.DisplayMode; public class main { static boolean running = true; int fps; long lastFPS; int currentDelta; static long lastFrame; public void start() { game game = new game(); Toolkit toolkit = Toolkit.getDefaultToolkit(); Dimension screensize = toolkit.getScreenSize(); System.out.println(screensize); game.xRes = (int) screensize.getWidth(); game.yRes = (int) screensize.getHeight(); try { setDisplayMode(game.xRes, game.yRes, false); Display.create(); Display.setVSyncEnabled(true); } catch (LWJGLException e) { e.printStackTrace(); System.exit(0); } game.OnInit(); this.lastFPS = getTime(); while ((!Display.isCloseRequested()) && (running)) { currentDelta = getDelta(); game.OnEvent(currentDelta); game.OnUpdate(currentDelta); updateFPS(); game.OnRender(); Display.update(); Display.sync(120); } Display.destroy(); } public void setDisplayMode(int width, int height, boolean fullscreen) { if ((Display.getDisplayMode().getWidth() == width) && (Display.getDisplayMode().getHeight() == height) && (Display.isFullscreen() == fullscreen)) { return; } try { DisplayMode targetDisplayMode = null; if (fullscreen) { DisplayMode[] modes = Display.getAvailableDisplayModes(); int freq = 0; for (int i = 0; i < modes.length; i++) { DisplayMode current = modes; if ((current.getWidth() == width) && (current.getHeight() == height)) { if (((targetDisplayMode == null) || (current.getFrequency() >= freq)) && ( (targetDisplayMode == null) || (current.getBitsPerPixel() > targetDisplayMode.getBitsPerPixel()))) { targetDisplayMode = current; freq = targetDisplayMode.getFrequency(); } if ((current.getBitsPerPixel() != Display.getDesktopDisplayMode().getBitsPerPixel()) || (current.getFrequency() != Display.getDesktopDisplayMode().getFrequency())) continue; targetDisplayMode = current; break; } } } else { targetDisplayMode = new DisplayMode(width, height); } if (targetDisplayMode == null) { System.out.println("Failed to find value mode: " + width + "x" + height + " fs=" + fullscreen); return; } Display.setDisplayMode(targetDisplayMode); Display.setFullscreen(fullscreen); } catch (LWJGLException e) { System.out.println("Unable to setup mode " + width + "x" + height + " fullscreen=" + fullscreen + e); } } public static long getTime() { return Sys.getTime() * 1000L / Sys.getTimerResolution(); } public void updateFPS() { if (getTime() - this.lastFPS > 1000L) { this.fps = 0; this.lastFPS += 1000L; } this.fps += 1; } public static int getDelta() { long time = getTime(); int delta = (int)(time - lastFrame); lastFrame = time; return delta; } public static void main(String[] argv) { main display = new main(); display.start(); } } From game class: package com.gmail.l5p4ngl312.pong; import java.awt.Dimension; import java.awt.Toolkit; import java.util.Stack; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.GL11; public class game { static Stack<stateManager> stateStack = new Stack(); String TITLE = "Pong"; static int xRes = 0; static int yRes = 0; public static boolean lmbPressed; public static boolean rmbPressed; public void OnInit() { Display.setTitle(this.TITLE); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glClearColor(0.0F, 0.0F, 0.0F, 0.0F); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA , GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glLoadIdentity(); GL11.glViewport(0, 0, xRes, yRes); GL11.glMatrixMode(GL11.GL_PROJECTION); GL11.glOrtho(0.0D, xRes, 0.0D, yRes, 1.0D, -1.0D); GL11.glMatrixMode(GL11.GL_MODELVIEW); textures.LoadTextures(); ChangeState(stateMenu.Instance()); } public void OnEvent(int delta) { if (Mouse.isButtonDown(0)) { lmbPressed = true; } else lmbPressed = false; if (Mouse.isButtonDown(1)) { rmbPressed = true; } else rmbPressed = false; if (!stateStack.empty()) { ((stateManager)stateStack.peek()).OnEvent(delta); } } public void OnUpdate(int delta) { if ((!stateStack.empty()) && (!((stateManager)stateStack.peek()).Paused)) { ((stateManager)stateStack.peek()).OnUpdate(delta); } } public static void OnRender() { GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_STENCIL_BUFFER_BIT); if (!stateStack.empty()) { ((stateManager)stateStack.peek()).OnRender(); } } public static void OnCleanup() { while (!stateStack.empty()) { ((stateManager)stateStack.peek()).OnCleanup(); stateStack.pop(); } main.running = false; } public static void ChangeState(stateManager state) { if (!stateStack.empty()) { ((stateManager)stateStack.peek()).OnCleanup(); stateStack.pop(); } stateStack.push(state); ((stateManager)stateStack.peek()).OnInit(); } public static void PopState() { if (!stateStack.empty()) { ((stateManager)stateStack.peek()).OnCleanup(); stateStack.pop(); } if (!stateStack.empty()) { ((stateManager)stateStack.peek()).Resume(); } } public static void PushState(stateManager state) { if (!stateStack.empty()) { ((stateManager)stateStack.peek()).Pause(); } stateStack.push(state); ((stateManager)stateStack.peek()).OnInit(); } }
  4. Lane Spangler

    How do YOU do it?

    While I will not answer your ultimate question, I may be able to help you with your problem. If you are getting lost in your code you should think about implementing a more modular game engine. For example in my java game engine each game state is represented with a separate class, as well as each object that requires drawing such as a tile, block, wall, character etc. Sometime I find myself doing too much in one class and the code becomes very hard to read. I don't really think that making small games is a satisfactory solution because even games that most would consider small require an amount of persistance on the part of the programmer.
  5. Lane Spangler

    Idea Wanted For Isometric Game

    Not necessarily a loss. Sieges invariably are won by defeating the invading army through some means or alternatively outlasting their own supplies. By utilising resources carefully and the careful use of raids what you can build the game into basically an "How to win the Alamo". Hard but doable. Though I must admit was thinking more a fortified city as opposed to a fort...but that could also be a scaling set of levels -- each level you start with a defense againt an invading army until defeated then you fall back to the next larger defence point until you have reached a point where you can fight back. The more successful your defences the less overwhelming the army becomes. Mini levels like timed games i.e. the longer you hold a defence of a pass the more resources you can send back, as well implement a scorched earth policy. Another level could be the destruction of bridges and fortification of river fjords. Another could be the limited choice given to either save people, or food, or metals etc i.e. which resource becomes vital to the war effort at that time. The end result of the game could be as you said a crushing loss, but it could also be a victory. Not sure if any games are out there like this to be honest, but I must admit the more I write on this the more subtle intricacies I can see to make this game rather fun to play. Hope the answers help [/quote] Thanks for taking the time to share your ideas. I think it is a good idea to make the game winnable even though I have no problem with roguelikes. As far as the city part though, I was thinking since I am spending so much time on the level editor, it would make sense to incorporate a limited version of it into the actual game. So that's why I was thinking you would start out with just a fort and you have to build your city up in a smart way in order to survive the invasion.
  6. Lane Spangler

    Idea Wanted For Isometric Game

    So essentially it would be like a roguelike where you always lose in the end and you start out by building a fort and you have to mantain it, defend it, and lead raids?
  7. I am working on a level editor for an isometric game so the idea can be anything as long as it is isometric tile based. Here is what i have planned and accomplished for the editor: Finished: Tiles- Grass Paved Road Paved road with lines Raised Tiles: Tall Grass Sidewalk Tile select and fill tool Wall tool for placing and deleting walls Planned: Any tile or wall type required for idea Object placement tool Multi-floor and roofs Possible: Diagonal wall placement Partial tiles So the fame could be anything that could make use of this kind of level. For example a fantasy action RPG or a zombie survival game or maybe a RTS Edit heres a screenshot from the editor: http://imgur.com/6cDBg
  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!