Direct x9 virtual key not working

Started by
1 comment, last by ironsam 11 years, 6 months ago
This program is supposed to make a sonic sprite go left, right, up, down, and vertical but when i press the left to does no do anything then when i press right it does not go right but after i press them times ican go left and right then icant move until i press them again and it just repeats over and over. then when i press up it goes up it works but then if I press down it gose up and it just repeats and it just gose vertical at random i use an engine that i include that has a lot of files that it includes.huh.png

#include "..\Engine\Advanced2D.h"
//
using namespace Advanced2D;
#define SCREENW 1024
#define SCREENH 768
#define OBJECT_SPRITE 60
#define OBJECT_BACKGROUND 1
#define MAX 1
Sprite *p;
Texture *ball_image;
Texture *sonic_run_left;
Sprite *cursor;
Sprite *sprite;
Sample *music;
float vy;
float vx;

bool game_preload()
{
g_engine->setAppTitle("INPUT DEMO");
g_engine->setFullscreen(false);
g_engine->setScreenWidth(1024);
g_engine->setScreenHeight(739);
g_engine->setColorDepth(32);
return 1;
}
bool game_init(HWND)
{
//load background image
Sprite *background = new Sprite();
if (!background->loadImage("arz1.png")) {
g_engine->message("Error loading craters.tga");
return false;
}
background->setObjectType(OBJECT_BACKGROUND);
background->setCollidable(false);
g_engine->addEntity(background);

p = new Sprite();
p->loadImage("sonic_run_forward.png");
p->setDirection(0);
p->setScale(1.5f);
//load cursor
cursor = new Sprite();
cursor->loadImage("particle16.tga");

//load asteroid image
sonic_run_left = new Texture();
if (!sonic_run_left->Load("sonic_run_left.png")) {
return false;
}

ball_image = new Texture();
if (!ball_image->Load("lightningball.tga")) {
//g_engine->message("Error loading lightningball.tga");
return false;
}

//create sprites

for (int n=0; n < MAX; n++)
{
//create a new sprite
sprite = new Sprite();
sprite->setObjectType(OBJECT_SPRITE);
sprite->setImage(ball_image);
sprite->setSize(40,40);
sprite->setScale( 2.0 );
sprite->setPosition((SCREENW/2) , (SCREENH/2)-10 );


//add sprite to the entity manager
g_engine->addEntity(sprite);
}

//load independent sample
music = new Sample();
music = g_engine->audio->Load("arz.mp3");
if (!music) {
g_engine->message("Error loading wobble.wav");
return false;
}
//play music
g_engine->audio->Play(music);

return true;
}
void game_update()
{
}
void game_keyPress(int key)
{
/*if(GetKeyState(VK_RIGHT))
{

sprite->setVelocity( -6.0, 6.0 );
}*/

//set velocity
/*
switch (key)
{
*/


//case DIK_DOWN:
if(GetKeyState(VK_DOWN))
{
//vx = spr->getVelocity().getX();
//double vy = spr->getVelocity().getY();
//vx = 0;
vy = 2.0;
sprite->setVelocity( vx, vy );
sprite->setTotalFrames(8);
sprite->setColumns(8);
sprite->setSize(40,40);
sprite->setFrameTimer(40);
Sleep(1);
//break;
}

if(GetKeyState(VK_UP))
{
//case DIK_UP:
//vx = 0;
vy = -2.0;
sprite->setVelocity( vx, vy );
sprite->setTotalFrames(8);
sprite->setColumns(8);
sprite->setSize(40,40);
sprite->setFrameTimer(40);
Sleep(1);
//break;
}



if(GetKeyState(VK_RIGHT)== 1)
{
//case DIK_LEFT:
sprite->setImage(sonic_run_left);
vx = -2.0;
//vy = 0;
sprite->setVelocity( vx, vy );
sprite->setTotalFrames(8);
sprite->setColumns(8);
sprite->setSize(40,40);
sprite->setFrameTimer(40);
//break;
}

if(GetKeyState(VK_LEFT)== 1)
{
//case DIK_RIGHT:
sprite->setImage(ball_image);
vx = 2.0;
//vy = 0;
sprite->setVelocity( vx, vy);
sprite->setTotalFrames(8);
sprite->setColumns(8);
sprite->setSize(40,40);
sprite->setFrameTimer(40);

//break;
}

} //key press
void game_keyRelease(int key)
{
/*
switch (key)
{
case DIK_DOWN:
//vx = 0;
vy = 0;
sprite->setVelocity( vx, vy );
sprite->setTotalFrames(1);
break;

case DIK_UP:
//vx = 0;
vy = 0;
sprite->setVelocity( vx, vy );
sprite->setTotalFrames(1);
break;


case DIK_LEFT:
vx = 0;
//vy = 0;
sprite->setVelocity( vx, vy );
sprite->setTotalFrames(1);
break;


case DIK_RIGHT:
vx = 0;
//vy = 0;
sprite->setVelocity( vx, vy );
sprite->setTotalFrames(1);
break;
} //switch
*/
if(GetKeyState(VK_UP))
{
//case DIK_LEFT:
sprite->setImage(sonic_run_left);
vx = 0.0;
vy = 0;
sprite->setVelocity( vx, vy );
sprite->setTotalFrames(1);
sprite->setColumns(1);
sprite->setSize(40,40);
sprite->setFrameTimer(0);
//break;
//Sleep(150);
}
if(GetKeyState(VK_DOWN))
{
//case DIK_LEFT:
sprite->setImage(sonic_run_left);
vx = 0.0;
vy = 0;
sprite->setVelocity( vx, vy );
sprite->setTotalFrames(1);
sprite->setColumns(1);
sprite->setSize(40,40);
sprite->setFrameTimer(0);
//break;
//Sleep(150);
}

if(GetKeyState(VK_RIGHT))
{
//case DIK_LEFT:
sprite->setImage(sonic_run_left);
vx = 0.0;
//vy = 0;
sprite->setVelocity( vx, vy );
sprite->setTotalFrames(1);
sprite->setColumns(1);
sprite->setSize(40,40);
sprite->setFrameTimer(0);
//break;
//Sleep(150);
}

if(GetKeyState(VK_LEFT))
{
//case DIK_RIGHT:
sprite->setImage(ball_image);
vx = 0.0;
//vy = 0;
sprite->setVelocity( vx, vy );
sprite->setTotalFrames(1);
sprite->setColumns(1);
sprite->setSize(40,40);
sprite->setFrameTimer(0);
//break;
}

if (key == DIK_ESCAPE) g_engine->Close();
}
void game_mouseButton(int button)
{
switch(button) {
case 0: //button 1
break;
}
}
void game_mouseMotion(int x,int y)
{
}
void game_mouseMove(int x,int y)
{
float fx = (float)x;
float fy = (float)y;
}
void game_mouseWheel(int wheel)
{
}

void game_render3d()
{
g_engine->ClearScene(D3DCOLOR_XRGB(0,0,0));
}
void game_render2d()
{
g_engine->SetIdentity();
}

void game_end()
{
delete p;
delete ball_image;
delete cursor;
}

void game_entityUpdate(Advanced2D::Entity* entity)
{
switch(entity->getObjectType())
{
case OBJECT_SPRITE:
Sprite* spr = (Sprite*)entity;
double w = (double)spr->getWidth() * spr->getScale();
double h = (double)spr->getHeight() * spr->getScale();
double vx = spr->getVelocity().getX();
double vy = spr->getVelocity().getY();
if (spr->getX() < 0) {
spr->setX(0);
//vx = fabs(vx);
}
else if (spr->getX() > SCREENW-w) {
spr->setX(SCREENW-w);
//vx = fabs(vx) * -1;
}
if (spr->getY() < 0) {
spr->setY(0);
//vy = fabs(vy);
}
//set floor//
else if (spr->getY() > ((SCREENH)/2)-10) {
spr->setY(((SCREENH)/2)-10);
//vy = fabs(vy) * -1;
}
//spr->setVelocity(vx,vy);
break;
}
}
void game_entityCollision(Advanced2D::Entity* entity1,Advanced2D::Entity* entity2){}
void game_entityRender(Advanced2D::Entity* entity) { }
Advertisement
I assume you are using this GetKeyState function? In that case if the key is pressed then the return value of GetKeyState has the high-order bit set to one, so you probably want to simply check that the return value is non-zero in the key-down function. I am curious as to why you are using GetKeyState and not the key parameter though.
I researched key states online and it looked like it would be most useful in that situation.mellow.png

This topic is closed to new replies.

Advertisement