• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 15:53
CEST 21:53
KST 04:53
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
uThermal's 2v2 Tour: $15,000 Main Event5Serral wins EWC 202543Tournament Spotlight: FEL Cracow 202510Power Rank - Esports World Cup 202580RSL Season 1 - Final Week9
Community News
Weekly Cups (Jul 28-Aug 3): herO doubles up6LiuLi Cup - August 2025 Tournaments5[BSL 2025] H2 - Team Wars, Weeklies & SB Ladder10EWC 2025 - Replay Pack4Google Play ASL (Season 20) Announced63
StarCraft 2
General
Rogue Talks: "Koreans could dominate again" uThermal's 2v2 Tour: $15,000 Main Event The GOAT ranking of GOAT rankings RSL Revival patreon money discussion thread Official Ladder Map Pool Update (April 28, 2025)
Tourneys
SC2's Safe House 2 - October 18 & 19 LiuLi Cup - August 2025 Tournaments $5,100+ SEL Season 2 Championship (SC: Evo) WardiTV Mondays RSL Season 2 Qualifier Links and Dates
Strategy
Custom Maps
External Content
Mutation # 485 Death from Below Mutation # 484 Magnetic Pull Mutation #239 Bad Weather Mutation # 483 Kill Bot Wars
Brood War
General
ASL Season 20 Ro24 Groups BGH Auto Balance -> http://bghmmr.eu/ StarCraft player reflex TE scores BW General Discussion Google Play ASL (Season 20) Announced
Tourneys
KCM 2025 Season 3 Small VOD Thread 2.0 [Megathread] Daily Proleagues [ASL20] Online Qualifiers Day 2
Strategy
Fighting Spirit mining rates [G] Mineral Boosting Simple Questions, Simple Answers Muta micro map competition
Other Games
General Games
Nintendo Switch Thread Stormgate/Frost Giant Megathread Total Annihilation Server - TAForever Beyond All Reason [MMORPG] Tree of Savior (Successor of Ragnarok)
Dota 2
Official 'what is Dota anymore' discussion
League of Legends
Heroes of the Storm
Simple Questions, Simple Answers Heroes of the Storm 2.0
Hearthstone
Heroes of StarCraft mini-set
TL Mafia
TL Mafia Community Thread Vanilla Mini Mafia
Community
General
US Politics Mega-thread Russo-Ukrainian War Thread Things Aren’t Peaceful in Palestine The Games Industry And ATVI European Politico-economics QA Mega-thread
Fan Clubs
INnoVation Fan Club SKT1 Classic Fan Club!
Media & Entertainment
[\m/] Heavy Metal Thread [Manga] One Piece Movie Discussion! Anime Discussion Thread Korean Music Discussion
Sports
2024 - 2025 Football Thread Formula 1 Discussion TeamLiquid Health and Fitness Initiative For 2023
World Cup 2022
Tech Support
Gtx660 graphics card replacement Installation of Windows 10 suck at "just a moment" Computer Build, Upgrade & Buying Resource Thread
TL Community
TeamLiquid Team Shirt On Sale The Automated Ban List
Blogs
Gaming After Dark: Poor Slee…
TrAiDoS
[Girl blog} My fema…
artosisisthebest
Sharpening the Filtration…
frozenclaw
ASL S20 English Commentary…
namkraft
momentary artworks from des…
tankgirl
from making sc maps to makin…
Husyelt
Customize Sidebar...

Website Feedback

Closed Threads



Active: 739 users

Student Game Dev Part Seven - User Interface

Blogs > Soan
Post a Reply
Soan
Profile Blog Joined August 2010
New Zealand194 Posts
January 10 2014 06:14 GMT
#1
Part One - It begins
Part Two - Technical Foundation
Part Three - Game Design
Part Four - Input and Physics
Part Five - More Physics Things
Part Six - Even More Physics

This Week
Hello again TeamLiquid!

Welcome back to my blog about the development of The Adventures of Sam the Pirate, the 2D platformer I'm creating as the final game project for my Bachelor of Software Engineering degree. Hope you all had a great Christmas and New Years, I spent far too much time playing Hearthstone, a bit of Civ5, and spending time with my family to do any work. I have managed to get a bit of work done on some user interface related things over this past week, and have a new piece of concept art to show off today as well. I had some thoughts over the holidays on fixing the remaining physics issues, but have not got around to implementing any of them yet.

User Interface
Most of the work done on the user interface so far has been pretty basic low level stuff, setting up for the more interesting stuff later. At the moment, an interface layout will be stored in a file, and be loaded when needed. When the player forces the displayed interface to change, through starting a game from the main menu for example, the displayed interface will simply be switched. In the case of opening a menu while in a level with the level interface displayed, I'll be able to directly force an separate interface to be displayed over the top of that. So basically I'll have interface layouts stored in different files, and be able to display multiple layouts at once.

As well as creating the basics mentioned above, I've created a generic button class, with normal, hover, and click states. Creating this generic class has given me a little bit of a problem however. If I want to create multiple buttons that each take different actions, I'll have to create extra class, each inheriting from the generic button class. While this would work, I don't really want to do it as it is inefficient, and I want the user interface system to be fairly generic, so I can more easily reuse it in future projects. As I've used Lua scripting on my debug console, allowing me to add commands without changing code, I'm considering doing something similar here. As the interface layouts are stored in files, I could also store the name of a Lua file, and function within that file for each button, allowing me to ensure that each button has unique functionality without creating tons of different classes. Still thinking about how best to implement this however, so we'll see how it goes.

The user interface system in general will also need to scale based on display resolution. I have a target resolution of 1920x1080 (art will be created with this resolution in mind), but it's unrealistic to assume that everyone uses that resolution. It should be relatively easy to compare the resolution the game is running in, with the target resolution, and make adjustments based on that.

New Concept Art
[image loading]

What's next?
Officially back to class next week, where we'll also be getting a new capstone assignment. We finished a research based capstone before Christmas, and this new capstone will be development focused. With any luck, I'll be able to use the capstone to create a level editor, which I was planning to do already! I have a feeling the tutors might want me to do a bit more though, so I'm also considering turning it into more of a general engine editor. So as well as creating levels, it'd be able to create interface layouts, preview sprites in the game engine, etc. It would certainly make things easier, as currently levels and interface layouts are created by hand in text files!

So until Monday, and I know what I'm doing on the capstone, I won't know 100% what I'll be working on next. Likely I'll be continuing with the user interface stuff, planning out the level editor, and continuing to adjust/fix the physics.

Keep up to date!
Be sure to follow me on Twitter, and like the Facebook page to stay up to date on future content and blog posts when they happen. If you have any questions don't hesitate to ask, either through Twitter or Facebook!

****
MrShankly
Profile Blog Joined October 2009
United Kingdom371 Posts
January 10 2014 22:44 GMT
#2
Never noticed your blog before! Rated 5 stars!

I graduated as games programmer but I switched to doing regular software development. At the moment I work for a company that builds 3d Visualisations for mobile tablets and stuff so i still get to use my 3D/gfx skills and do regular mobile Dev.

Sometimes I kinda miss working on games though. I'm currently building an iOS app in my spare time. Maybe when it is done I will try build a game.
DONATE SC2 BETA KEY TO ME PLEASE
Yferi
Profile Joined April 2010
United States90 Posts
January 14 2014 09:59 GMT
#3
For your buttons, you could use the observer model and have all classes that you want to respond to the button click implement a certain function (like onButtonClicked() or something). When you create the button, register each listener and when the button is clicked, call the onButtonClicked() method for each listener. That way, what the button does (receiving input) is decoupled from your listeners (doing stuff once you've received input).

By the way, it would be cool if you could post some videos/screenshots of your game so far. Keep up the work!
Soan
Profile Blog Joined August 2010
New Zealand194 Posts
January 15 2014 19:24 GMT
#4
haha, I totally forgot about using the Observer pattern like that. I'm using it elsewhere in the project, so I did know it existed, just didn't occur to me to use it like that, even though I've seen it used elsewhere. Ended up going with a similar Lua implementation to what I used for my debug console, and I'll probably talk about it in this weeks blog.

I do want to do videos/screenshots of the game, but there isn't much to look at at the moment. Currently the tiles and character are just white boxes with black letters to indicate what type of tile/what animation should be playing.
Please log in or register to reply.
Live Events Refresh
uThermal 2v2 Circuit
15:00
Group Stage Day 1
WardiTV995
uThermal899
IndyStarCraft 250
TKL 235
SteadfastSC202
LamboSC2174
Liquipedia
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
uThermal 899
IndyStarCraft 250
TKL 235
SteadfastSC 202
LamboSC2 174
ZombieGrub91
BRAT_OK 81
goblin 41
StarCraft: Brood War
Britney 19001
Calm 3070
ggaemo 515
Jaedong 386
Larva 294
actioN 187
TY 38
Aegong 33
Mong 18
yabsab 13
[ Show more ]
IntoTheRainbow 8
NaDa 7
ivOry 3
Stormgate
B2W.Neo210
JuggernautJason109
RushiSC32
UpATreeSC4
Counter-Strike
fl0m1983
Heroes of the Storm
Liquid`Hasu466
Khaldor155
Other Games
gofns11572
Grubby2978
Beastyqt389
KnowMe167
Fuzer 109
oskar106
Livibee78
Trikslyr57
EmSc Tv 14
Organizations
Other Games
EmSc Tv 14
StarCraft 2
EmSc2Tv 14
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
sctven
[ Show 20 non-featured ]
StarCraft 2
• kabyraGe 333
• davetesta23
• tFFMrPink 13
• sooper7s
• AfreecaTV YouTube
• Migwel
• intothetv
• LaughNgamezSOOP
• Kozan
• IndyKCrew
StarCraft: Brood War
• 80smullet 27
• FirePhoenix10
• STPLYoutube
• ZZZeroYoutube
• BSLYoutube
Dota 2
• masondota21096
• WagamamaTV775
League of Legends
• TFBlade1099
Other Games
• imaqtpie1454
• Shiphtur282
Upcoming Events
RSL Revival
6h 7m
RSL Revival
14h 7m
SC Evo League
16h 7m
uThermal 2v2 Circuit
19h 7m
CSO Cup
20h 7m
Sparkling Tuna Cup
1d 14h
uThermal 2v2 Circuit
1d 19h
Wardi Open
2 days
RotterdaM Event
2 days
Replay Cast
3 days
[ Show More ]
RSL Revival
3 days
The PondCast
5 days
Replay Cast
6 days
LiuLi Cup
6 days
Liquipedia Results

Completed

ASL Season 20: Qualifier #2
FEL Cracow 2025
CC Div. A S7

Ongoing

Copa Latinoamericana 4
Jiahua Invitational
BSL 20 Team Wars
KCM Race Survival 2025 Season 3
BSL 21 Qualifiers
uThermal 2v2 Main Event
HCC Europe
BLAST Bounty Fall Qual
IEM Cologne 2025
FISSURE Playground #1
BLAST.tv Austin Major 2025

Upcoming

ASL Season 20
CSLPRO Chat StarLAN 3
BSL Season 21
BSL 21 Team A
RSL Revival: Season 2
Maestros of the Game
SEL Season 2 Championship
WardiTV Summer 2025
Thunderpick World Champ.
MESA Nomadic Masters Fall
CS Asia Championships 2025
Roobet Cup 2025
ESL Pro League S22
StarSeries Fall 2025
FISSURE Playground #2
BLAST Open Fall 2025
BLAST Open Fall Qual
Esports World Cup 2025
BLAST Bounty Fall 2025
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2025 TLnet. All Rights Reserved.