•
•
•
•
What is DaniWeb IT Discussion Community?
You're currently browsing the Game Development section within the Software Development category of DaniWeb, a massive community of 456,234 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 3,817 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our Game Development advertiser: Programming Forums
Views: 1701 | Replies: 0
![]() |
•
•
Join Date: Jul 2006
Posts: 70
Reputation:
Rep Power: 3
Solved Threads: 0
Hi, I am trying to get a cat walking back and forth between the screen using a left and right tileset of bitmaps. Also, I am supposed to be able to control two caveman sprites that appear to walk left and right as you press the left and right keys.
I am having trouble with the movement of the caveman.
I am having trouble with the movement of the caveman.
#include "game.h"
LPDIRECT3DTEXTURE9 catleft_image;
LPDIRECT3DTEXTURE9 catright_image;
LPDIRECT3DTEXTURE9 cavemanright_image;
LPDIRECT3DTEXTURE9 cavemanleft_image;
SPRITE catRight;
SPRITE catLeft;
SPRITE cavemanRight;
SPRITE cavemanLeft;
LPDIRECT3DSURFACE9 back;
LPD3DXSPRITE sprite_handler;
HRESULT result;
//timing variable
long start = GetTickCount();
//initialize the game
int Game_Init(HWND hwnd)
{
//set random number seed
srand(time(NULL));
//create sprite handler object
result = D3DXCreateSprite(d3ddev, &sprite_handler);
if(result != D3D_OK)
return 0;
//load textures
catleft_image = LoadTexture("catLeft.bmp", D3DCOLOR_XRGB(255,0,255));
if(catleft_image == NULL)
return 0;
// initialize the sprite's properties
// set catLeft's properties
catLeft.x = 96;
catLeft.y = 150;
catLeft.width = 96;
catLeft.height = 96;
catLeft.curframe = 0;
catLeft.lastframe = 5;
catLeft.animdelay = 2;
catLeft.animcount = 0;
catLeft.movex = 8;
catLeft.movey = 0;
catright_image = LoadTexture("catRight.bmp", D3DCOLOR_XRGB(255,0,255));
if(catright_image == NULL)
return 0;
// set catRight's properties
catRight.x = 96;
catRight.y = 150;
catRight.width = 96;
catRight.height = 96;
catRight.curframe = 0;
catRight.lastframe = 5;
catRight.animdelay = 2;
catRight.animcount = 0;
catRight.movex = 8;
catRight.movey = 0;
cavemanright_image = LoadTexture("cavemanRight.bmp", D3DCOLOR_XRGB(255,0,255));
if(cavemanright_image == NULL)
return 0;
cavemanRight.x = 100;
cavemanRight.y = 180;
cavemanRight.width = 50;
cavemanRight.height = 64;
cavemanRight.curframe = 1;
cavemanRight.lastframe = 11;
cavemanRight.animdelay = 3;
cavemanRight.animcount = 0;
cavemanRight.movex = 5;
cavemanRight.movey = 0;
cavemanleft_image = LoadTexture("cavemanLeft.bmp", D3DCOLOR_XRGB(255,0,255));
if(cavemanleft_image == NULL)
return 0;
//set cavemanLeft properties
cavemanLeft.x = 64;
cavemanLeft.y = 180;
cavemanLeft.width = 50;
cavemanLeft.height = 64;
cavemanLeft.curframe = 0;
cavemanLeft.lastframe = 11;
cavemanLeft.animdelay = 3;
cavemanLeft.animcount = 0;
cavemanLeft.movex = -5;
cavemanLeft.movey = 0;
back = LoadSurface("background.bmp", NULL );
return 1;
}
//the main game loop
void Game_Run(HWND hwnd)
{
//make sure the Direct3D device is valid
if(d3ddev == NULL)
return;
//after short delay, ready for next frame?
//this keeps the game running at a steady frame rate
if(GetTickCount() - start >= 30)
{
//reset timing
start = GetTickCount();
// move the sprite
catRight.x += catRight.movex;
catRight.y += catRight.movey;
if ( catRight.x > SCREEN_WIDTH - catRight.width )
{
catRight.x += 0;
catRight.movex *= -1;
catLeft.movex *= -1;
}
else
if ( catRight.x < 0 )
{
catRight.movex *= -1;
catRight.x += catRight.movex;
catLeft.movex *= -1;
catLeft.x += catLeft.movex;
}
if(cavemanRight.x > SCREEN_WIDTH - cavemanRight.width)
{
cavemanRight.movex = 0;
}
else if(cavemanRight.x < 0)
{
cavemanRight.movex *= -1;
cavemanRight.x += cavemanRight.movex;
cavemanLeft.movex *=-1;
cavemanLeft.x += cavemanLeft.movex;
}
//move the sprite
if(KEY_DOWN(VK_RIGHT)){
cavemanRight.x += cavemanRight.movex;
cavemanRight.y += cavemanRight.movey;
}
if(KEY_DOWN(VK_LEFT))
{
cavemanLeft.x += cavemanLeft.movex;
}
//has animation delay reached threshold?
if (++cavemanRight.animcount > cavemanRight.animdelay)
{
//reset counter
cavemanRight.animcount = 0;
//animate the sprite
if (++cavemanRight.curframe > cavemanRight.lastframe)
cavemanRight.curframe = 1;
}
//has animation delay reached threshold?
if (++cavemanLeft.animcount > cavemanLeft.animdelay)
{
//reset counter
cavemanLeft.animcount = 0;
//animate the sprite
if (++cavemanLeft.curframe > cavemanLeft.lastframe)
cavemanLeft.curframe = 0;
}
if (++catRight.animcount > catRight.animdelay)
{
// reset counter
catRight.animcount = 0;
// animate the sprite
if (++catRight.curframe > catRight.lastframe)
catRight.curframe = 1;
}
if (++catLeft.animcount > catLeft.animdelay)
{
// reset counter
catLeft.animcount = 0;
// animate the sprite
if (++catLeft.curframe > catLeft.lastframe)
catLeft.curframe = 0;
}
}
//start rendering
if (d3ddev->BeginScene())
{
//erase the entire background
d3ddev->StretchRect(back, NULL, backbuffer, NULL, D3DTEXF_NONE);
sprite_handler->Begin(D3DXSPRITE_ALPHABLEND);
//create vector to update sprite position
D3DXVECTOR3 position((float)cavemanRight.x, (float)cavemanRight.y, 0);
D3DXVECTOR3 position3((float)catRight.x, (float)catRight.y, 0);
//this variable will keep cavemanRight from drawing
bool drawCavemanRight;
//configure the rect for the source tile
RECT catSrc;
RECT caveSrc;
int caveColumns = 8;
int catColumns = 6;
catSrc.left = (catRight.curframe % catColumns) * catRight.width;
catSrc.top = (catRight.curframe / catColumns) * catRight.height;
catSrc.right = catSrc.left + catRight.width;
catSrc.bottom = catSrc.top + catRight.height;
caveSrc.left = (cavemanRight.curframe % caveColumns) * cavemanRight.width;
caveSrc.top = (cavemanRight.curframe / caveColumns) * cavemanRight.height;
caveSrc.right = caveSrc.left + cavemanRight.width;
caveSrc.bottom = caveSrc.top + cavemanRight.height;
//if cavemanLeft if being drawn do not draw right caveman
if(cavemanRight.movex > 0)
{
sprite_handler->Draw(
cavemanright_image,
&caveSrc,
NULL,
&position,
D3DCOLOR_XRGB(255,255,255));
}
else if(cavemanLeft.movex < 0)
{
sprite_handler->Draw(
cavemanleft_image,
&caveSrc,
NULL,
&position,
D3DCOLOR_XRGB(255,255,255));
}
if(catRight.movex > 0)
{
sprite_handler->Draw(
catright_image,
&catSrc,
NULL,
&position3,
D3DCOLOR_XRGB(255,255,255));
}
else if(catRight.movex < 0)
{
sprite_handler->Draw(
catleft_image,
&catSrc,
NULL,
&position3,
D3DCOLOR_XRGB(255,255,255));
}
//stop drawing
sprite_handler->End();
//stop rendering
d3ddev->EndScene();
}
//display the back buffer on the screen
d3ddev->Present(NULL, NULL, NULL, NULL);
//check for escape key (to exit program)
if (KEY_DOWN(VK_ESCAPE))
PostMessage(hwnd, WM_DESTROY, 0, 0);
}
//frees memory and cleans up before the game ends
void Game_End(HWND hwnd)
{
if(cavemanright_image != NULL)
cavemanright_image->Release();
if(cavemanleft_image != NULL)
cavemanleft_image->Release();
if(catright_image != NULL)
catright_image->Release();
if(catleft_image != NULL)
catleft_image->Release();
if(back != NULL)
back->Release();
if(sprite_handler != NULL)
sprite_handler->Release();
} Climbing the learning curve of C++
Becoming an expert seems light years away!
Becoming an expert seems light years away!
![]() |
•
•
•
•
•
•
•
•
DaniWeb Game Development Marketplace
•
•
•
•
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
•
•
•
•
activex advertising ajax asp blogging browser business code console developer development exploit firefox game games google hardware html intel internet linux marketing microsoft mozilla news nintendo playstation programming ps3 revenue rss search security software sony sql stocks sun video video game vista w3c web web development wii wiki windows xbox 360 xml yahoo
- Objects are not displaying in my program, also need to know how to work mouse clicks. (C++)
- Designing a sub machine gun and need criticism (Graphics and Multimedia)
- animated pictures and .GIF files (Graphics and Multimedia)
- Game sprites (Geeks' Lounge)
- special keys as inputs (Game Development)
Other Threads in the Game Development Forum
- Previous Thread: Website Account Creation to SQL game database
- Next Thread: DirectX vs OpenGL


Linear Mode