本篇分三部分,分别是地图移动、光标替换以及鼠标事件处理。最后达成的效果如下:
(1)地图移动
曹操传是上世纪90年代末的作品,那时候的显示设备是CRT显示器,屏幕大小和分辨率都比现在要小和低,窗口无法覆盖整张地图,当鼠标游走到窗口边缘的时候地图会相应的移动。为了实现此功能,可以进行如下考虑:
创建Camera对象:
struct Camera
{
SDL_Rect rect;
int speed; //移动速度
SDL_bool is_moving;
SDL_Point dst; //移动目的地
};
void camera_init(struct Camera *ptr_camera, int x, int y, int w, int h, int speed);
void camera_translate(struct Camera *ptr_camera);
地图渲染的时候使用的函数为:
把Camera的rect成员指针代入到此函数中的const SDL_Rect *clip参数。当鼠标移到窗口边缘的时候触发Camera的camera_translate函数,地图渲染区域也就跟着变化,实现了地图在窗口里移动。
(2)