• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 12:50
CEST 18:50
KST 01:50
  • 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
Serral wins EWC 202543Tournament Spotlight: FEL Cracow 202510Power Rank - Esports World Cup 202580RSL Season 1 - Final Week9[ASL19] Finals Recap: Standing Tall15
Community News
Weekly Cups (Jul 28-Aug 3): herO doubles up6LiuLi Cup - August 2025 Tournaments4[BSL 2025] H2 - Team Wars, Weeklies & SB Ladder10EWC 2025 - Replay Pack4Google Play ASL (Season 20) Announced62
StarCraft 2
General
RSL Revival patreon money discussion thread Official Ladder Map Pool Update (April 28, 2025) The GOAT ranking of GOAT rankings Weekly Cups (Jul 28-Aug 3): herO doubles up Clem Interview: "PvT is a bit insane right now"
Tourneys
LiuLi Cup - August 2025 Tournaments WardiTV Mondays RSL Season 2 Qualifier Links and Dates StarCraft Evolution League (SC Evo Biweekly) Global Tourney for College Students in September
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
StarCraft player reflex TE scores Where is technical support? BGH Auto Balance -> http://bghmmr.eu/ BW General Discussion StarCon Philadelphia
Tourneys
KCM 2025 Season 3 [ASL20] Online Qualifiers Day 2 [CSLPRO] It's CSLAN Season! - Last Chance [Megathread] Daily Proleagues
Strategy
Fighting Spirit mining rates [G] Mineral Boosting Simple Questions, Simple Answers Muta micro map competition
Other Games
General Games
Nintendo Switch Thread Beyond All Reason Stormgate/Frost Giant Megathread Total Annihilation Server - TAForever [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 The Games Industry And ATVI Things Aren’t Peaceful in Palestine Russo-Ukrainian War Thread European Politico-economics QA Mega-thread
Fan Clubs
INnoVation Fan Club SKT1 Classic Fan Club!
Media & Entertainment
[Manga] One Piece Movie Discussion! Anime Discussion Thread [\m/] Heavy Metal 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
[Girl blog} My fema…
artosisisthebest
Sharpening the Filtration…
frozenclaw
ASL S20 English Commentary…
namkraft
The Link Between Fitness and…
TrAiDoS
momentary artworks from des…
tankgirl
from making sc maps to makin…
Husyelt
Customize Sidebar...

Website Feedback

Closed Threads



Active: 653 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
Next event in 8h 10m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
Hui .351
mcanning 120
BRAT_OK 113
Codebar 55
MindelVK 23
StarCraft: Brood War
Calm 5450
Sea 2687
Bisu 1208
Horang2 1194
EffOrt 1005
firebathero 929
Larva 929
Stork 293
ggaemo 281
ToSsGirL 217
[ Show more ]
Soulkey 164
Mind 127
Barracks 120
sSak 113
Snow 111
Dewaltoss 87
Sacsri 65
Killer 46
JulyZerg 9
Stormgate
TKL 133
JuggernautJason5
Dota 2
Gorgc6227
qojqva3625
Dendi791
syndereN455
Other Games
fl0m1892
B2W.Neo513
Beastyqt479
Lowko385
KnowMe370
crisheroes340
ArmadaUGS110
oskar66
Trikslyr54
QueenE37
Organizations
StarCraft 2
angryscii 4
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
sctven
[ Show 19 non-featured ]
StarCraft 2
• davetesta105
• iHatsuTV 23
• tFFMrPink 15
• IndyKCrew
• sooper7s
• AfreecaTV YouTube
• Migwel
• intothetv
• LaughNgamezSOOP
• Kozan
StarCraft: Brood War
• FirePhoenix11
• STPLYoutube
• ZZZeroYoutube
• BSLYoutube
Dota 2
• WagamamaTV541
• masondota2529
League of Legends
• Nemesis3340
• Jankos1718
Other Games
• Shiphtur34
Upcoming Events
Replay Cast
8h 10m
LiuLi Cup
18h 10m
uThermal 2v2 Circuit
22h 10m
RSL Revival
1d 9h
RSL Revival
1d 17h
SC Evo League
1d 19h
uThermal 2v2 Circuit
1d 22h
CSO Cup
1d 23h
Sparkling Tuna Cup
2 days
uThermal 2v2 Circuit
2 days
[ Show More ]
Wardi Open
3 days
RotterdaM Event
3 days
RSL Revival
5 days
The PondCast
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
HCC Europe
BLAST Bounty Fall Qual
IEM Cologne 2025
FISSURE Playground #1
BLAST.tv Austin Major 2025
ESL Impact League Season 7
IEM Dallas 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
uThermal 2v2 Main Event
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.