Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Game Programming and Event Handlers

Tags:

c#

camera

xna

I haven't programmed games for about 10 years (My last experience was DJGPP + Allegro), but I thought I'd check out XNA over the weekend to see how it was shaping up.

I am fairly impressed, however as I continue to piece together a game engine, I have a (probably) basic question.

How much should you rely on C#'s Delegates and Events to drive the game? As an application programmer, I use delegates and events heavily, but I don't know if there is a significant overhead to doing so.

In my game engine, I have designed a "chase cam" of sorts, that can be attached to an object and then recalculates its position relative to the object. When the object moves, there are two ways to update the chase cam.

  • Have an "UpdateCameras()" method in the main game loop.
  • Use an event handler, and have the chase cam subscribe to object.OnMoved.

I'm using the latter, because it allows me to chain events together and nicely automate large parts of the engine. Suddenly, what would be huge and complex get dropped down to a handful of 3-5 line event handlers...Its a beauty.

However, if event handlers firing every nanosecond turn out to be a major slowdown, I'll remove it and go with the loop approach.

Ideas?

like image 811
FlySwat Avatar asked Sep 15 '08 15:09

FlySwat


People also ask

What is an event handler in programming?

In programming, an event handler is a callback routine that operates asynchronously once an event takes place. It dictates the action that follows the event. The programmer writes a code for this action to take place. An event is an action that takes place when a user interacts with a program.

What are the two kinds of event handlers?

This event handler invokes a JavaScript code when we place the mouse over a specific link or an object. This event handler invokes a JavaScript code when the mouse leaves a particular link or an object. This event handler invokes a JavaScript code when the user presses a key.


1 Answers

If you were to think of an event as a subscriber list, in your code all you are doing is registering a subscriber. The number of instructions needed to achieve that is likely to be minimal at the CLR level.

If you want your code to be generic or dynamic, then you're need to check if something is subscribed prior to calling an event. The event/delegate mechanism of C# and .NET provides this to you at very little cost (in terms of CPU).

If you're really concerned about every clock cycle, you'd never write generic/dynamic game logic. It's a trade off between maintainable/configurable code and outright speed.

Written well, I'd favour events/delegates until I could prove it is an issue.

The only way you'll truly know if it is an issue for you is by profiling your code -- which you should do anyway for any game development!

like image 90
Ray Hayes Avatar answered Sep 16 '22 19:09

Ray Hayes