Befehl zum Timer-reset?

HyperTronix

Grünschnabel
Hi, hab nen kleines Prob...
über einen Timer werden die Begeungen gesteuert, so soll wenn man VK_RIGHT drückt sich das Objeckt sich solange bewegen bis man VK_LEFT, VK_UP oder VK_DOWN drückt.

Borland C++Builder 5
Timer ist default aktiviert

Code:
//------------------------------
TForm1 *Form1;
int bewegung = 0;   
//------------------------------
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if (Key == (VK_LEFT))
{
bewegung = 1;
};
if (Key == (VK_RIGHT))
{
bewegung = 2;
};
if (Key == (VK_UP))
{
bewegung = 3;
};
if (Key == (VK_DOWN))
{
bewegung = 4;
};
}

die Bewegungen liegen im Timer

Code:
void __fastcall TForm1::player_moveTimer(TObject *Sender)
{

if (bewegung = 1)
{
if (player->Left>=0 && player->Left<=550)
{player->Left=player->Left-1;
};
};

if (bewegung = 2)
{
if (player->Left>=0 && player->Left<=550)
{player->Left=player->Left+1;
};
};

und so heben sich die Bewegungen auf, da ich den Timer nicht reseten kann, sofern z.B. VK_RIGHT gedrückt ist.
 
Zuletzt bearbeitet:
du startest den timer mit SetTimer( id , zeit in ms, NULL )

dabei wird immer in die WM_TIMER gesprungen und dort kannst du die bewegung machen.
wenn du was anderes drückst musst du KillTimer( id ) machen
 
@KarNayAnaR: das ist eine WinApi loesung, hier ist aber Borland im spiel.

@HyperTronix:
dein 2. codeabschnitt ist faul:
Code:
void __fastcall TForm1::player_moveTimer(TObject *Sender)
{

if (bewegung == 1)
{
if (player->Left>=0 && player->Left<=550)
{player->Left=player->Left-1;
};
};

if (bewegung == 2)
{
if (player->Left>=0 && player->Left<=550)
{player->Left=player->Left+1;
};
};
so soll er heissen, mit jeweils diesen Zeichen ==

ansonsten resetest du den Timer mit
Code:
Timer1->Enabled = false;
Timer1->Enabled = true;
das ist aber nicht die Fehlerquelle in deinem problem
 
Zurück