Day 4 - GUI Layer and Anchors
Quick Review
Difference between GUI and !GUI.
Make your game comfortable with a comfortable GUI.
GUI Layout
GUI uses screen coordinates.
+X From left (0) to right (width.)
+Y From Top (0) to bottom (height)
Problems
Problem #1: People don't think in terms of pixels from the upper left corner. (Not even programmers.)
Problem #2
- Early consoles had a resolution of 449x483
- Widescreen
- 2048x[Unspecified]
- 1920x1200
- 1920x1080
- 1280x720
- Computers
- 640x480
- 800x600
- 960x720
- 1024x768
- 1280x960
- 1400x150
- 1440x1080
- 1600x1200
- 1856x1392
- 1920x1440
- 2048x1536
- Phones
- on and on and on
Solutions
Never, ever, ever, ever hard code your GUI..... Unless you are writing for a VERY specific product. i.e. You are writing emulated NES games for a nerdy club.
- Option 1: Use clipping Coordinates.
Clipping coordinates treats your screen as if:
- The center of your screen was at 0,0
- +x goes right.
- +y goes up.
- The smallest dimension in pixels (x or y) extends one unit in the positive and negative direction.
Benefits
No reversed y axis
Independent of pixels in display
Option 2: Offset from Edges/Centers(e.g. horizontal)/Middles(e.g. vertically)
Define everything as so many pixels off from some anchor.
This element is anchored 10 pixels off the left side, 10 pixels off the right side, 10 pixels off the bottom, and is 50 pixels high.
- Option 3: Combine the two - So many clipping units off an anchor
This element is anchored .1 clipping units pixels off the left side, .1 clipping units pixels off the right side, .1 clipping units pixels off the bottom, and is .25 clipping units high.
In game engines, clipping units are often disguised as percentages.
Code
The code that does takes this hybrid approach can be found here: https://github.com/CS2510/code/blob/master/day4/index.html.