• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 07:31
CEST 13:31
KST 20:31
  • 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 HomeStory Cup 2914Serral wins Maestros of the Game 243ByuL, and the Limitations of Standard Play3Team Liquid Map Contest #22: Results and Winners7Code S Season 2 (2026): RO4 and Finals Preview12
Community News
Neeb returns to progaming; rejoins ONSYDE12Weekly Cups (July 20-26): Early returns on 5.0.16b8IntoTheTV X SOOP SC2 League : Weekly & Monthly4Clem: "I don't have that much hope in Blizzard"8ZeroSpace Early Access is Now Live!42
StarCraft 2
General
Neeb returns to progaming; rejoins ONSYDE Weekly Cups (July 20-26): Early returns on 5.0.16b Balance hotfix patch 5.0.16b (July 16) Clem: "I don't have that much hope in Blizzard" Terran or Protoss
Tourneys
RSL Revival: Season 6 - Qualifiers and Main Event PIG STY FESTIVAL 8.0! (13 - 23 August) Sparkling Tuna Cup - Weekly Open Tournament IntoTheTV X SOOP SC2 League : Weekly & Monthly INu's Battles#18 - Cure, herO, Rogue & ByuN
Strategy
[G] Having the right mentality to improve
Custom Maps
Nexus Wars 2021 GUIDE [M] (2) Industrial Park
External Content
Mutation # 536 Railroad Switch The PondCast: SC2 News & Results Mutation # 535 Assembly of Vengeance Mutation # 534 Burning Evacuation
Brood War
General
BW General Discussion ASL22 General Discussion screpdb: new Starcraft reporting tool ASL 22 Proposed Map Pool Klaucher discontinued / in-game color settings
Tourneys
2v2v2v2 Tournament [Megathread] Daily Proleagues Star Con San Diego 2026 Escore Tournament - Season 3
Strategy
Fighting Spirit mining rates Odyssey Mineral Stack Saturation Simple Questions, Simple Answers PvT advise for noobs
Other Games
General Games
Path of Exile ZeroSpace Early Access is Now Live! Nintendo Switch Thread Stormgate/Frost Giant Megathread General RTS Discussion Thread
Dota 2
Looking for a Dota Mentor Official 'what is Dota anymore' discussion
League of Legends
TSM pausing esports and CLG Dead
Heroes of the Storm
Heroes of the Storm 2.0
Hearthstone
Deck construction bug
TL Mafia
TL Mafia Power Rank TL Mafia Community Thread NeO.D_StephenKing vs This Guy From 1 Million Dance
Community
General
Artificial Intelligence Thread US Politics Mega-thread Russo-Ukrainian War Thread European Politico-economics QA Mega-thread How to buy a book - shipping from Korea to Europe
Fan Clubs
The IdrA Fan Club The HerO Fan Club!
Media & Entertainment
Anime Discussion Thread Movie Discussion! Series you have seen recently... [Req][Books] Good Fantasy/SciFi books
Sports
2024 - 2026 Football Thread 2026-27 Football Thread placeholder TeamLiquid Health and Fitness Initiative For 2023 Formula 1 Discussion MLB/Baseball 2023
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread Simple Questions Simple Answers FPS when play League Of Legend on laptop
TL Community
Northern Ireland Global Starcraft The Automated Ban List
Blogs
Games, Hormones, and "Dark" …
TrAiDoS
Hello guys!
LIN1s
ASL S22 English Commentary…
namkraft
Poker (part 2)
Nebuchad
An Exploration of th…
waywardstrategy
ramps on octagon
StaticNine
Customize Sidebar...

Website Feedback

Closed Threads



Active: 14362 users

Student Game Dev Part Four - Input and Physics

Blogs > Soan
Post a Reply
Soan
Profile Blog Joined August 2010
New Zealand194 Posts
Last Edited: 2013-11-29 22:45:35
November 29 2013 01:11 GMT
#1
Part One - It begins
Part Two - Technical Foundation
Part Three - Game Design

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. Last week I covered some of the initial game design thoughts for Sam the Pirate. This week I'll be talking about how input events are handled, and the start of writing the physics code for Sam the Pirate.

Input
Handling input events in Sam the Pirate is designed around the observer pattern. Any class I create that needs to know about input inherits from an observer interface, and implements a Notify function on that interface.

class IInputObserver
{
public:
IInputObserver() {}
virtual ~IInputObserver() {}
virtual void Notify(SDL_Event* _e) = 0;
};

class CPlayer : public IInputObserver
{
public:
CPlayer();
virtual ~CPlayer();
virtual void Notify(SDL_Event* _e)
{
// Handle the event.
}
};


The CPlayer class then registers with the input manager, and the input manager notifies all observers whenever an SDL_Event happens. SDL_Event is a structure that contains all the information related to the event, like what type of event, key down, key up, controller joystick axis movement, etc, and any further information related to that event, such as what key was pressed/released, what direction the controller joystick was moved. For instance, basic left/right movement from pressing the left/right arrow keys would be detected like this:

virtual void Notify(SDL_Event* _e)
{
if (_e->type == SDL_KEYDOWN)
{
switch (_e->key.keysym.sym)
;{
case SDLK_LEFT:
// move left
break;
case SDLK_RIGHT:
// move right
break;
}
}
}


Currently, observers get notified about any event. I did consider breaking it up, so they could register for specific event, say keyboard input, and only be notified about keyboard input, but given I want to get the physics done (or mostly done!) before christmas, decided I don't have time to do that. It would certainly make things more efficient however.

Starting the physics
So when I started working on the physics I had a couple links from some previous research into whether or not I should use an existing 2D physics engine, one of which included a tutorial on using Runge Kutta, or RK4 to handle movement. We'd briefly covered RK4 in our physics paper, so I thought this sounded good and followed the tutorial. Upon implementation however, I ran into a couple of problems.

The first problem cropped up when I noticed, that even though I only have horizontal movement implemented, my character would gradually travel up the screen as I was moving it back and forth. It turned out, that for whatever reason, it wanted to head in the direction of (0,0) on the screen, which is the top left corner.

The second problem cropped up when I changed the fps to a fixed value around, or below, the fixed rate the physics was being calculated at, as covered in the 2nd tutorial I followed. When this happened, the character would either speed up or slow down, depending on which direction the fps changed. Obviously this is not desired behaviour, the character should behave the same regardless of if the fps is fixed or not.

With these two problems in mind, and after a bit of thinking on how to solve it, I realised that actually, RK4 is far too complicated for what I want to do. I don't need the level of accuracy that RK4 can provide, so I'm scrapping it, starting over and keeping things much simpler. This has cost me a couple days of work, but that's ok! I wasn't expecting things to always work out the first time anyway. I'm planning on implementing acceleration, force, gravity etc, but as simple as possible. Just good enough to get characters behaving how they should.

The plan is still to have a character moving around and jumping on platforms by christmas, and I'm still confident of being able to achieve this. I had been planning to have an interface framework setup by then too, but I don't think that'll be happening.

What's next?
Next week I'll go over where I'm at with the physics code, and cover some of my plans for the levels, including how you progress from one level to the next. I have plans for how the first few levels will be laid out on paper, so if I can figure out scanning works around here I'll look at putting up a couple of those as well.

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!

CecilSunkure
Profile Blog Joined May 2010
United States2829 Posts
November 29 2013 22:33 GMT
#2
Hi there, just posted on part 2. To reiterate, you're wasting so much time on physics that it has compelled me to post twice. I did write some articles on creating custom physics that you can try reading. However you really ought to just use Box2D. Your goal is learn computer science and make a game. Most importantly your goal should be to create an awesome portfolio piece. You know what is most important for portfolio projects? For them to finished, released and used by someone (even if only used by yourself). You want something a future employer will click on and play for 3 minutes before giving you an interview; you want the project finished and you'll run out of motivation long before your physics is in a good state with the way you're going about it.
Soan
Profile Blog Joined August 2010
New Zealand194 Posts
November 29 2013 22:49 GMT
#3
And I just replied to part 2 haha. :p I'm not attempting to write realistic physics (so trying to follow this tutorial using RK4 is a mistake), platformers don't exactly have the most realistic physics after all. Given my time constraints I feel I'm better off keeping things simpler and writing my own basic stuff. I'm confident enough in my abilities that I expect to have it done or mostly done by christmas. I'm expecting to partially work through christmas/new years anyway, if not on the physics, on another part of the game.
Phyre
Profile Blog Joined December 2006
United States1288 Posts
December 02 2013 18:11 GMT
#4
Just found this blog by chance, pretty cool stuff. I'm actually in the process of spinning up my own project in SDL/C++ so following your progress has been very informative. Thanks for doing this.
"Oh no, I got you with your pants... on your face... That's not how you wear pants." - Nintu, catching 1 hatch lurks.
Please log in or register to reply.
Live Events Refresh
CrankTV Team League
11:00
Crank Gathers S4: Playoffs
LiquipediaDiscussion
KCM Race Survival
10:00
2026 S3 Week 4
Kim Chul Min (afreeca) 1094
Replay Cast
09:00
KungFu Cup 2026 Week 16
LiquipediaDiscussion
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
Lowko127
BRAT_OK 64
SpeCial 63
mouzStarbuck 47
StarCraft: Brood War
Britney 44088
Calm 9496
Shuttle 518
Mini 386
BeSt 330
EffOrt 266
Soma 260
ZerO 211
Soulkey 163
Zeus 157
[ Show more ]
Leta 124
Snow 122
Last 109
Dewaltoss 106
Hyun 98
Light 88
Killer 78
Mind 68
Rush 53
JYJ 51
scan(afreeca) 48
ggaemo 47
ToSsGirL 42
Sharp 32
Shine 32
Sexy 29
Bale 27
Sea.KH 23
HiyA 20
NaDa 20
sorry 16
JulyZerg 14
Noble 12
Terrorterran 8
IntoTheRainbow 6
Icarus 4
Mong 1
Dota 2
Gorgc7398
Dendi473
XcaliburYe83
League of Legends
JimRising 323
Counter-Strike
shoxiejesuss1016
edward101
markeloff75
Other Games
singsing1773
B2W.Neo613
Happy252
Sick192
crisheroes181
Liquid`LucifroN98
FrodaN57
BananaSlamJamma31
Organizations
StarCraft 2
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
[ Show 14 non-featured ]
StarCraft 2
• StrangeGG 63
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• LaughNgamezSOOP
• Migwel
• sooper7s
StarCraft: Brood War
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
Dota 2
• C_a_k_e 2725
• WagamamaTV395
League of Legends
• Jankos1341
Upcoming Events
OSC
1h 30m
Patches Events
5h 30m
Reynor vs Solar
ByuN vs TBD
OSC
6h
Replay Cast
12h 30m
Escore
22h 30m
CrankTV Team League
23h 30m
OSC
1d 11h
Replay Cast
1d 12h
Afreeca Starleague
1d 16h
RSL Revival
1d 21h
ByuN vs SHIN
Solar vs Lambo
[ Show More ]
WardiTV Summer Champion…
2 days
Afreeca Starleague
2 days
RSL Revival
2 days
Clem vs Serral
herO vs Rogue
WardiTV Summer Champion…
3 days
WardiTV Weekly
3 days
Sparkling Tuna Cup
4 days
PiGosaur Cup
5 days
Replay Cast
5 days
Kung Fu Cup
5 days
Replay Cast
6 days
The PondCast
6 days
Liquipedia Results

Completed

Proleague 2026-07-29
SCTL 2026 Spring
Eternal Conflict S2 Finale

Ongoing

CSL 2026 Summer (S21)
KCM Race Survival 2026 Season 3
RSL Revival: Season 6
CranK Gathers Season 4: BW vs SC2 Team League
BLAST Bounty Summer 2026
BLAST Bounty Summer Qual
Stake Ranked Episode 3
XSE Pro League 2026
IEM Cologne Major 2026
Stake Ranked Episode 2
CS Asia Championships 2026
Asian Champions League 2026
IEM Atlanta 2026
PGL Astana 2026

Upcoming

Escore Tournament S3: W5
ASL Season 22: Qualifier #1
ASL Season 22: Qualifier #2
Acropolis #5
Escore Tournament S3: W6
Escore Tournament S3: W7
Escore Tournament S3: W8
HSC XXX
SC4ALL II: StarCraft II
Kung Fu Cup 2026 Grand Finals
PiG Sty Festival 8.0
Light Tournament 2026
ESL Pro League Season 24
Stake Ranked Episode 4
Logitech G Connect 2026
SL StarSeries Fall 2026
FISSURE Playground #5
BLAST Open Fall 2026
Esports World Cup 2026
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 © 2026 TLnet. All Rights Reserved.