Ruch tylko po naciśnięciu przycisku.

0

Witam, czy w c++ istnieje jakaś funkcja typu getkeydown? Mój problem polega na tym, że chce aby "ruch" gracza wykonywał się tylko po wciśnięciu odpowiedniego klawisza i jest to możliwe w moim programie, natomiast gracz się przemieszcza także podczas trzymania tego klawisza tak długo dopóki trzymam ten klawisz. Czy jest jakaś możliwość aby każde kolejne przesunięcie odbywało się tylko po puszczeniu klawisza i ponownym naciśnięciu, a nie tak jak u mnie jest podczas trzymania?

Oto fragment programu odpowiedzialny za ruch:

#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;

class Player
{
public:
    int x,y;
};

Player player;
char c;

void gotoxy(int x, int y)
{
    COORD xy;
    xy.X=x;
    xy.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),xy);
}

void moving()
{
        if (c=='d')
        {
            gotoxy(player.x,player.y);
            cout<<" ";
            player.x+=1;
            gotoxy(player.x,player.y);
            cout<<char(24);
        }
}

void playermove()
{
    c='0';
    if (_kbhit()==1)
        c=getch();
}

int main()
{
    while(c!=char(27))
    {
        moving();
        playermove();
    }
    return 0;
}
0
Delor napisał(a):

http://lmgtfy.com/?q=c%2B%2B+disable+keyboard+repeating

Pewnie dlatego dałem post bo w google nie znalazłem nic użytecznego... Ale skoro ty potrafisz to jakbyś zmienił mój kod aby to działało?

0

W tym wątku masz kilka odpowiedzi na Twój problem: https://stackoverflow.com/questions/2067893/c-console-keyboard-events
A tu przykład do jednego z rozwiązań: https://docs.microsoft.com/en-us/windows/console/reading-input-buffer-events

1 użytkowników online, w tym zalogowanych: 0, gości: 1