anachronox-sdk/docs/APEDocs/Lesson9.txt
2002-01-21 00:00:00 +00:00

95 lines
No EOL
3.1 KiB
Text

//----------------------------------------------------------------------------
// Lesson9: MAKING A GAME
//
// TIMING
//
// A super-important and sort of advanced concept is timing. You want your
// game to run at a constant rate for all players, no matter how fast their
// system is. A good "frame rate" (how many updates to do per second) is 20.
// The Anachronox engine is happy with that update rate, and you can pretty
// much guarantee you can update that fast, unless you are doing something
// really awful.
//
// This simple demo shows a timer that counts seconds and frames. No biggie,
// but you need to have this concept down to make games that everyone can play.
//
// By the way, instead of GOAPE, you can use the command INVOKE if you want!
// It works exactly the same. Sometimes we will say, "now invoke that switch."
//
// To check out Lesson9...
//
// MAP JOEY
// LOADFLO Lesson9
// GOAPE 2:1
//
// Move on to Lesson 10!
//
//#############################################################################
// DEFINES
//#############################################################################
#define $Lesson9 "2"
#define $TimerTest "1"
#define $Before "2"
#define $During "3"
#define $After "4"
//-------------------------------------------------------
// CONSTANTS
//-------------------------------------------------------
#define %MSPERFRAME "50" // 50 milliseconds * 20 = 1 sec
#define %FRAMESPERSECOND "20"
//#############################################################################
// CODE
//#############################################################################
#window $Lesson9:$TimerTest
startswitch $Lesson9:$Before
thinkswitch $Lesson9:$During
finishswitch $Lesson9:$After
//-------------------------------------------------------
width 256
height 256
title "Timer Test"
body "Seconds: %d Frames: %d", secCounter, frameCounter
//=======================================================
// Before
// Initialize stuff!
//=======================================================
#switch $Lesson9:$Before
lastMS = func_GameTime
currentMS = lastMS
frameCounter = 0 // unnecessary, but establishes
secCounter = 0 // these vars to coders looking
return // at the program
//=======================================================
// During
// Actively update appropriate variables
//=======================================================
#switch $Lesson9:$During
set currentMS = func_GameTime // get starting time, start to count
set delta = currentMS - lastMS
if (delta < %MSPERFRAME) return // do nothing unless frame starts
set lastMS = currentMS
frameCounter = frameCounter + 1
if (frameCounter == %FRAMESPERSECOND)
{
frameCounter = 0
secCounter = secCounter + 1
}
return
//=======================================================
// After
// Leave the place like we found it
//=======================================================
#switch $Lesson9:$After
unset frameCounter
unset secCounter
unset delta
unset lastMS
unset currentMS
return