I have used the Babe model in this example. Babe model is a Dark Matter Model that is accesible by default when you install DarkGDK and is located at C:\Program Files\The Game Creators\Dark GDK\Media\Dark Matter Models\People. The controls and actions of our model in this example are illustrated in the following table.
| Controls | Actions |
| W,A,S,D | Move.x |
| Tab | Die.x |
| Q | Impact.x |
| No key Pressed | Idle.x |
Enough said, here’s the code:
// Dark GDK - The Game Creators - www.thegamecreators.com
// the wizard has created a very simple project that uses Dark GDK
// it contains the basic code for a GDK application
// whenever using Dark GDK you must ensure you include the header file
#include "DarkGDK.h"
// the main entry point for the application is this function
void DarkGDK ( void )
{
// turn on sync rate and set maximum rate to 30 fps
dbSyncOn();
dbSyncRate(30);
//loads our 3d model
//we'll be borrowing the Babe DirectX Darkmatter model
//it's included in the DarkGdk package located in
//C:\Program Files\The Game Creators\Dark GDK\Media\Dark Matter Models\People\Babe
//Just copy the contents of the Babe folder to your game project folder
dbLoadObject("H-Babe-Idle.x",2);
//Idle.x has 25 frames
//to find how how many frames there is in a .x animation
//Click Start>All Programs>The Game Creators>DarkGDK>Documentation>Information>Type "Frame"
//in the Textbox and the command used to determine the number of frames will reveal itself to you.
//appends the number of frames of the Move.x animation to the loaded model
//Move.x has 25 frames
dbAppendObject("H-Babe-Move.x",2,26);
//Attack.x has 24 frames
//adds the number of frames of Attack.x to the loaded model
dbAppendObject("H-Babe-Attack1.x",2,51);
//Die.x has 50 frames
//adds the number of frames of Die.x to the loaded model
dbAppendObject("H-Babe-Die.x",2,76);
//Impact.x has 10 frames
//adds the number of frames of Impact.x to the loaded model
dbAppendObject("H-Babe-Impact.x",2,126);
//positions the object in the -y axis cause its a little bit top aligned by default when loaded
dbPositionObject(2,0,-1,0);
while (LoopGDK())
{
//display descriptive text
dbSetTextSize(14);
dbText(10,0,"WASD-Movement");
dbText(10,10,"Spacebar-Attack.x");
dbText(10,20,"Tab-Die.x");
dbText(10,30,"Q-Impact.x");
dbText(10,40,"No key pressed-Idle.x");
//if the W or A or S or D or Spacebar or Tab or Q is pressed
if ( dbKeyState(17) || dbKeyState(31) ||dbKeyState(32) || dbKeyState(30)||dbKeyState(57) || dbKeyState(15)|| dbKeyState(16))
{
//stop the presently looping animation
dbStopObject(2);
//retrieves the object present angle
int ObjAngleY=dbObjectAngleY(2);
//determines if the object is presently looping
int looping=dbObjectLooping(2);
//if the key pressed is W
if(dbKeyState(17))
{
//move the object on the -Z axis
dbMoveObject(2,-0.05f);
//is the object presently not playing?
if (looping==0 )
{
//if yes then execute move.x
//move Move.x has 25 frames
//the number of frames from the starting frame to the ending frame must be at least 25 frames
dbLoopObject ( 2,26, 51 );
};
}
//if the key pressed is S
if (dbKeyState(31))
{
//move the object on the Z axis
dbMoveObject(2,0.05f);
//is the object currently not playing?
if (looping==0 )
{
//if yes then execute move.x
//move directx animation has 25 frames
//starting frame up to the end frame must be at least 25 frames
dbLoopObject ( 2,26, 51 );
};
}
//if the A key is pressed
if (dbKeyState(30))
{
//rotate the object along the Y axis
//for instance, if the objects current angle is 275-5
//The object will then be rotated 270 degrees which is exactly south
//from the user's POV
//the dbWrapValue is to ensure that the object rotation will not exceed 360 degrees
dbYRotateObject(2,dbWrapValue(ObjAngleY-5.0f));
}
//if the D key is pressed
if (dbKeyState(32))
{
//rotate the object along the Y axis
//for instance, if the objects current angle is 85+5
//The object will then be rotated 90 degrees which is exactly north
//from the user's POV
//the dbWrapValue is to ensure that the object rotation will not exceed 360 degrees
dbYRotateObject(2,dbWrapValue(ObjAngleY+5.0f));
}
//if the space key is pressed
if(dbKeyState(57))
{
//is the object currently not playing?
if (looping==0 )
{
//if yes then execute Attack.x
//Attack.x has 24 frames so from the starting to ending frames
//must be at least 24 frames
dbLoopObject ( 2,51,77 );
};
}
//if the Tab key is pressed
if(dbKeyState(15))
{
//is the object currently not playing?
if (looping==0 )
{
//if yes then execute Die.x
//Die.x has 50 frames so from the starting to ending frames
//must be at least 50 frames
dbLoopObject ( 2,78,127 );
};
}
//if the Q key is pressed
if(dbKeyState(16))
{
//is the object currently not playing?
if (looping==0 )
{
//if yes then execute Impact.x
//Impact.x has 10 frames so from the starting to ending frames
//must be at least 10 frames
dbLoopObject ( 2,127,137 );
};
}
}
else
//if no key is pressed
//execute Idle.x
//Idle.x has 25 frames so from the starting to the ending frames miust be at least 25 frames
{
dbLoopObject(2,1,25);
}
// update the screen
dbSync();
}
//return to windows
return;
}
Another way of animating models is by using the dbShowObject and dbHideObject commands. I'll post an example of that here when I have time. If you want more information on animating darkGDK models or creating games per se, you can visit DarkGDK's official site www.thegamecreators.com
6. Later on we will be dividing this image into three columns. If you noticed if we divide this image into three divisions each divisions we will have different number of HP’s.
7. Copy this image from whatever location you have saved it. In this example, I have saved it on my desktop so all I need to do is go to the desktop. Select the file “hplevel.bmp”. Then press CTRL + C to copy it.
9. This causes the Open File dialog box to appear. Click on the empty pane>Press Ctrl + V to paste our “hplevel.bmp” file.
10. The next thing that you’ll need to do is to load this image into the computer’s memory, and divide it into three columns. We can do so by using the dbCreateAnimatedSprite command. Click the cancel button from the open dialog box to close it. This causes our code window to appear. Enter the ff. after the dbSyncRate(60); line.