Download presentation
Presentation is loading. Please wait.
Published byDale Goodwin Modified over 9 years ago
1
CSE 380 – Computer Game Programming GUIs for Games
2
Game GUI Controls Stylistically fit in with game theme –drawn as artwork –careful font/color selection Same rules should apply as with other GUIs –align components –uniform style –balance –clarity (single word options are best) –keep it simple –minimize depth –don’t make assumptions about your player’s IQ
3
What are Game GUIs for? Starting/Stopping games –New Game, Save Game, Load Game, Pause, Continue, Quit Game Options –level of difficulty –character selection & properties (RPG in particular) –chapter selection Custom Controls Setup In-game Decisions (strategy in particular) Providing Help
4
Menu vs. In Game Controls Menu controls, typically –simple, elegant –textual –centered on screen –allows for menu tabbling –tied to game controllers as well In-game controls, typically –graphical –at bottom of screen –carefully grouped –tied to keystrokes for PC gaming (very important)
5
Halo’s Menu GUI
6
Starcraft’s In-game GUI
7
How might we make a GUI? We’ll build our own buttons
8
We know how do render images Use images to render: –buttons –cursor –other GUI images For buttons, use 2 images –mouse over –normal –each frame update the state based on mouse position
9
How do we test if the mouse is over a button? void Button::updateMouseOver(POINT *mousePoint) { // IS THE CURSOR OVER THIS BUTTON? if ((mousePoint->x >= x) && (mousePoint->x <= x + width) && (mousePoint->y >= y) && (mousePoint->y <= y + height) ) { mouseOver = true; } else { mouseOver = false; }
10
Render Lists Common approach in games Each frame: –make a list of items to render –iterate through the list and render each item –throw out the list RenderList is built and destroyed each frame We’ll use 2 render lists: –one for the GUI –one for the game world
11
Render List Cheating We’re not really going to use a list Why? –we don’t want to allocate memory dynamically Instead, we’ll use a giant array and pretend it’s a list –give the array a max size –don’t exceed that max size
12
A note about platform independence Today our game’s graphics are drawn using DirectX Tomorrow we may wish to use OpenGL How can we minimize the difficulty of switching? –virtual functions –See: GameGraphics & DirectXGameGraphics TextureManager & DirectXTextureManager
13
To maximize platform independence Confine technology-specific types and methods to technology-specific classes Don’t let DirectX spill over into your data management classes
14
How do we respond to input? 1.Get Input 1.If game state is in main menu Process input for main menu screen components Draw main menu screen Main Menu GUI 2.If game state is in game Process input for game screen components Draw game screen Game GUI & Game World
15
Getting Input We’ll use Windows methods To test if a key is currently pressed: –GetAsyncKeyState(key) & 0X8000 To get the current mouse position: –GetCursorPos(mousePoint); To test if a mouse button is currently pressed: –GetAsyncKeyState(VK_LBUTTON) & 0X8000
16
Each Frame We update data for: –all keys first key press? fill out struct for each key –mouse/cursor position –is mouse over buttons?
17
GameInput Each frame: void GameInput::processInput(Game *game, WINDOWINFO wi) { updateCursorPosition(wi, game->getGUI()->getCursor()); updateInputState(); respondToKeyboardInput(game); respondToMouseInput(game); }
18
Custom Behavior In the example I’ve given you, I have: –a core library –a custom example game Customized behavior is loaded by key child classes: –DirectXGraphics –XButtonEventHandler –XKeyEventHandler –XTextGenerator
19
Questions for you to figure out Where is the programmed response to hitting SHIFT-C? In what order are the GUI items rendered? How can I speed up or slow down the frame rate? How can you render something as more transparent? How can we render changing text? How can we render a Mini Map?
20
Mini-Map Rendering Naive Approach 1: –scale and render images on the fly Naive Approach 2: –pre scale images, render individually on the fly Improved Approach –pre build mini-map image for each level –render as single image
21
Mini-Map Rendering – How? Build off-screen surface as render target – CreateRenderTarget Render scaled version of world to surface – StretchRect Save to File as Image – D3DXSaveSurfaceToFileA Refs: see schedule page for DirectX9 & Util APIs
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.