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