raylib绘图库--瞿华
2022.7.1
知乎 1、raylib绘图库简介

知乎 2、raylib 2d动画/游戏教程(1)动画基本原理

知乎 3、raylib 2d动画/游戏教程(2)坐标系与颜色系统

知乎 4、raylib 2d动画/游戏教程(3)图像文件与图层

知乎 5、raylib 2d动画/游戏教程(4)raylib-drawing库

知乎 6、raylib 2d动画/游戏教程(5)键盘与鼠标输入

知乎 7、raylib 2d动画/游戏教程(6)游戏手柄输入

知乎 8、raylib 2d动画/游戏教程(7)音乐和音效

知乎 9、raylib绘制中文内容

知乎 10、使用raygui绘制控件

知乎 11、raylib 3d绘图基础教程(1)坐标系和摄像机

知乎 12、raylib 3d绘图基础教程(2)网格(Mesh)

知乎 13、raylib 3d绘图基础教程(3)几何变换

知乎 14、raylib 3d绘图基础教程(4)3d模型的载入与绘制

raylib 2d动画/游戏教程(5)键盘与鼠标输入

1 键盘输入
键盘是游戏中常用的输入工具。在raylib中,提供了下列函数来获取键盘输入:
函数作用
bool IsKeyPressed(int key)如果在本帧中key被按下,返回true;否则返回false(一次按键行为,在多帧中只会有一帧返回1)
bool IsKeyDown(int key)如果在本帧中key处于按下状态,返回true;否则返回false
bool IsKeyReleased(int key)如果在本帧中key被松开,返回true;否则返回false(一次松开行为,在多帧中只会有一帧返回1)
bool IsKeyUp(int key)如果在本帧中key处于未按下状态,返回true;否则返回false
int GetKeyPressed()返回最近的按键,并将其从缓存区中删除;如果缓存区中无按键事件,则返回0
int GetCharPressed()返回最近输入的字符(ascii码),并将其从缓存区中删除;如果缓存区中无按键事件,则返回0。请勿用其输入中文。
下面的程序演示了如何使用IsKeyDown函数来判断空格键是否被按下,并控制小浣熊的移动。同学们可以将程序里的IsKeyDown函数改成IsKeyPressed,然后看看程序行为有何变化。 #include <raylib.h> int main() { InitWindow(800,600,"test"); SetTraceLogLevel(LOG_WARNING); SetTargetFPS(24); //读入图片文件 Image imgBackground=LoadImage("background.png"); Texture tBackground = LoadTextureFromImage(imgBackground); UnloadImage(imgBackground); Image imgRacoon[12]; for (int i=0;i<12;i++) { const char* filename=TextFormat("racoon%d.png",i+1); imgRacoon[i]=LoadImage(filename); } int stepX=1,racoonX=0,racoonY=300,racoonFrame=0,racoonTotalFrame=0; while(!WindowShouldClose()) { if (IsKeyDown(KEY_SPACE)) { if (racoonFrame==0)racoonTotalFrame+=12; else racoonTotalFrame++; } if (racoonFrame<racoonTotalFrame) { racoonFrame++; if (racoonFrame>=racoonTotalFrame) { racoonFrame=0; racoonTotalFrame=0; } racoonX+=stepX; } Texture tRacoon = LoadTextureFromImage(imgRacoon[racoonFrame%12]); BeginDrawing(); //叠加显示图层。注意显示的顺序 DrawTexture(tBackground,0,0,WHITE); DrawTexture(tRacoon,racoonX,racoonY,WHITE); EndDrawing(); UnloadTexture(tRacoon); } for (int i=0;i<12;i++)UnloadImage(imgRacoon[i]); UnloadTexture(tBackground); CloseWindow(); } 2 鼠标输入 和键盘输入类似,raylib中提供了下列函数来处理鼠标输入:
函数作用
bool IsMouseButtonPressed(int button)如果在本帧中button被按下,返回true;否则返回false(一次按键行为,在多帧中只会有一帧返回1)
bool IsMouseButtonDown(int button)如果在本帧中button处于按下状态,返回true;否则返回false
bool IsMouseButtonReleased(int button)如果在本帧中button被松开,返回true;否则返回false(一次按键行为,在多帧中只会有一帧返回1)
bool IsMouseButtonUp(int button)如果在本帧中button处于未按下状态,返回true;否则返回false
int GetMouseX()返回鼠标光标当前位置的X坐标
int GetMouseY(void)返回鼠标光标当前位置的Y坐标
Vector2 GetMousePosition(void)返回鼠标光标当前位置的坐标
Vector2 GetMouseDelta(void)返回上一帧到本帧之间鼠标光标的位移
float GetMouseWheelMove(void)返回上一帧到本帧之间鼠标滚轮的转动量
下面的程序演示了如何使用IsMouseButtonDown函数来判断鼠标左键是否被按下,并控制小浣熊的移动。同学们可以将程序里的IsMouseButtonDown函数改成IsMouseButtonPressed,然后看看程序行为有何变化。 #include <raylib.h> int main() { InitWindow(800,600,"test"); SetTraceLogLevel(LOG_WARNING); SetTargetFPS(24); //读入图片文件 Image imgBackground=LoadImage("background.png"); Texture tBackground = LoadTextureFromImage(imgBackground); UnloadImage(imgBackground); Image imgRacoon[12]; for (int i=0;i<12;i++) { const char* filename=TextFormat("racoon%d.png",i+1); imgRacoon[i]=LoadImage(filename); } int stepX=1,racoonX=0,racoonY=300,racoonFrame=0,racoonTotalFrame=0; while(!WindowShouldClose()) { if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) { if (racoonFrame==0)racoonTotalFrame+=12; else racoonTotalFrame++; } if (racoonFrame<racoonTotalFrame) { racoonFrame++; if (racoonFrame>=racoonTotalFrame) { racoonFrame=0; racoonTotalFrame=0; } racoonX+=stepX; } Texture tRacoon = LoadTextureFromImage(imgRacoon[racoonFrame%12]); BeginDrawing(); //叠加显示图层。注意显示的顺序 DrawTexture(tBackground,0,0,WHITE); DrawTexture(tRacoon,racoonX,racoonY,WHITE); EndDrawing(); UnloadTexture(tRacoon); } for (int i=0;i<12;i++)UnloadImage(imgRacoon[i]); UnloadTexture(tBackground); CloseWindow(); } 本文中所用的素材图片来自opengameart.org,可以直接在百度网盘下载: 链接:https://pan.baidu.com/s/1wGqJ_gBC3KzXmH5tNiR1kA 提取码:vsro