On Tue, 2004-04-20 at 23:31, Kevin Jenkins wrote: > While working on my game I (now) consistently use a programming design > that makes it easier to write and maintain code. > > I call it level triggered data synchronization. By level triggered I mean > as opposed to edge triggered - data changes during processing rather than > when the event to change the data occurs. > > The concept is quite simple. When you have a variable that you can set > based on the current program state you should recreate the value for that > data every cycle rather than setting that data on the conditions that > directly modify it. > > For example, lets say you have a program where the user clicks on one of 3 > filenames and a bitmap shows up to display the filename chosen. > > To program this using edge triggered data synchronization, you would put > code in the MousePress function. Depending on which filename was clicked, > you immediately load that file and unload the older image if necessary. > > To program this using level triggered data synchronization, you would put > code in the Render function. The render function would check the variable > containing the index of which filename was picked. It would then compare > this filename what Bitmap::Name() returns. If they are different, or if the > bitmap is NULL, then load the new image. > > The second way is slightly less efficient because you are doing a comparison > every frame. However, it is far more maintainable because if at a later > point you add another place to show another image it will show the correct > image for free. In the first case, you would either cut and paste the code > to load the image or at best call a function, assuming (in the unlikely > case) that you made this a function to begin with or put it in a function to > avoid code duplication. There is a different term for this, I can't remember it, but there is another name for it. You have discovered on your own a principle that many programmers "don't get" even when it is pointed out to them. Thanks for posting it. Bob Pendleton > > Another benefit of the second way is you sometimes avoid processing. For > example, lets say there were two places you could pick the same bitmap. If > you picked the new bitmap that had the exact same path/filename as the old > one, > it would avoid an unnecessary load. > > In trivial cases both ways works fine. But in large classes with many > variables this can cut down on a lot of code and maintenance. It also makes > the program more maintainable if someone else has to work on it because they > can change one section of the code and it just works - as opposed to working > in some cases and not others. Of course when it takes a lot of processing > to determine the state then stay with edge triggered. But in most cases > it's as simple as checking a few pointers. > > I'm sure a lot of people know this. The reason I point it out is because I > didn't strictly follow it before and now I do and have really seen the > benefit. > I think it's important enough to point out. > -- +---------------------------------------+ + Bob Pendleton: writer and programmer. + + email: Bob@xxxxxxxxxxxxx + + web: www.GameProgrammer.com + +---------------------------------------+