1 / 20

CSE 380 – Computer Game Programming GUIs for Games

CSE 380 – Computer Game Programming GUIs for Games ICON-28 Science Fiction Convention Founded by Stony Brook Students http://www.iconsf.org/ At Suffolk County Community College this year April 3 rd -5 th E-Gaming Track they are looking for Stony Brook students to lend a hand

Thomas
Télécharger la présentation

CSE 380 – Computer Game Programming GUIs for Games

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CSE 380 – Computer Game ProgrammingGUIs for Games

  2. ICON-28 • Science Fiction Convention • Founded by Stony Brook Students • http://www.iconsf.org/ • At Suffolk County Community College this year • April 3rd-5th • E-Gaming Track • they are looking for Stony Brook students to lend a hand • Interested? Contact Sandra Dumais • reeffish@verizon.net

  3. 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

  4. 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

  5. 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)

  6. Halo’s Menu GUI

  7. Starcraft’s In-game GUI

  8. How might we make a GUI? • We’ll build our own buttons • Download, unzip, and examine the contents of: • EmptyGame.zip • my advice: set breakpoint on first line and debug a few frames • this means you’ll see every line execute

  9. 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

  10. 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; } }

  11. 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

  12. 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

  13. 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

  14. 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

  15. How do we respond to input? • Get Input • If game state is in main menu • Process input for main menu screen components • Draw main menu screen • Main Menu GUI • If game state is in game • Process input for game screen components • Draw game screen • Game GUI & Game World

  16. 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

  17. Each Frame • We update data for: • all keys • first key press? • fill out struct for each key • mouse/cursor position • is mouse over buttons?

  18. GameInput • Each frame: void GameInput::processInput(Game *game, WINDOWINFO wi) { updateCursorPosition(wi, game->getGUI()->getCursor()); updateInputState(); respondToKeyboardInput(game); respondToMouseInput(game); }

  19. 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 • EGButtonEventHandler • EGKeyEventHandler • EGTextGenerator

  20. 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?

More Related