C++ SDL 键盘响应

标签 c++ input keyboard sdl

我的游戏程序有问题。该程序响应我的键盘输入,但不会移动太远。它只会向上移动 1 位。

#include <SDL/SDL.h>
#include "Mrn.h"

int main (int argc,char** argv)
{
SDL_Init(SDL_INIT_EVERYTHING);//initialized everything.
SDL_Surface* screen;//allows drawing on screen.
screen=SDL_SetVideoMode(500,500,32,SDL_SWSURFACE);//sets resolution of screen.
bool running = true;
const int FPS = 30;//fps of the game.
Uint32 start;
while(running)//windows running loop.
{
    start = SDL_GetTicks();//timer.
    SDL_Event event;//allows for events to happen.
    while(SDL_PollEvent(&event))
    {
        switch(event.type)
        {
            case SDL_QUIT:
            running = false;//allows exiting.
            break;
        }
    }
    //game logic and rendering.
    player(screen);
    SDL_Flip(screen);
    if(1000/FPS > SDL_GetTicks() - start)
    {
        SDL_Delay(1000/FPS - (SDL_GetTicks() - start));
    }

}
SDL_Quit();
return 0;
}

Player.h代码:

#include <SDL/SDL.h>
#ifndef MRN_H_INCLUDED
#define MRN_H_INCLUDED

int player(SDL_Surface* screen)
{
SDL_Surface* Marine;
SDL_Rect first;
first.x = 0;
first.y = 0;
first.w = 42;
first.h = 31;
SDL_Rect position;
position.x = 40;
position.y = 40;
Uint8 *key;
key = SDL_GetKeyState(NULL);

if(key[SDLK_w])
{
    position.y++;
}

Marine = SDL_LoadBMP("Images/Marine.bmp");
SDL_BlitSurface(Marine,&first,screen,&position);
SDL_FreeSurface(Marine);
return 0;
}

#endif // MRN_H_INCLUDED

一切正常,除了它的运动。它永远不会移动太远,在释放时它会回到原来的位置。

最佳答案

每次调用 player() 时,都会将位置设置为 (40,40)。您需要将播放器的初始化与播放器的处理分开。

关于C++ SDL 键盘响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7619350/

相关文章:

html - 是否可以更改 HTML 输入标记中文本的大小?

html - 如何不让文字覆盖按钮?

jquery - 检查div是否有键盘焦点

android - 获取软键盘的尺寸

C++ - 读入以逗号分隔的文件行

c++ - 海湾合作委员会 assembly "+t"

c++ - 如何在 C++ 中将文本文件传输到二维数组?

java.util.NoSuchElementException - 扫描器读取用户输入

javascript - 使用 cmd 键在新选项卡中打开链接?

c++ - 将元组转换为字符串