试着使用SDL2复刻曹操传(三)
本篇分三部分,分别是地图移动、光标替换以及鼠标事件处理。最后达成的效果如下:
(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)光标替换
本游戏是走格子游戏,纵横网格附在地图上,每个方格有各自地形,鼠标游走的过程中,有个方框跟着在各个方格间切换。
因需要变换光标样式及处理鼠标事件,创建Selector对象:
struct Selector
{struct Texture texture;int x;int y;struct{SDL_Surface *surface[9];SDL_Cursor *arrows[9];int state;} cursor;
};SDL_bool selector_init(struct Selector *ptr_selector);void selector_free(struct Selector *ptr_selector);void selector_load(struct Selector *ptr_selector, const char *path);void selector_render(struct Selector *ptr_selector);void selector_handle_event(struct Selector *ptr_selector,const SDL_Event *e,const SDL_Point *mouse_point,const struct Map *ptr_map);
替换默认光标可以用SDL函数:SDL_CreateColorCursor, 其中重要的参数surface用
SDL_LoadBMP生成,自己用画图软件画鼠标箭头,加载运行后的效果:
(3)鼠标事件
先使用SDL_PollEvent(&e), 获取SDL事件,其中e是SDL_Event类型,e->type是枚举类型,包括窗口、键盘、鼠标、摇杆等事件类型,其中鼠标事件类型有
具体使用的时候,可以用if语句:
if( e->type == SDL_MOUSEMOTION || e->type == SDL_MOUSEBUTTONDOWN || e->type == SDL_MOUSEBUTTONUP ){SDL_Point mouse_point;SDL_GetMouseState( &(mouse_point.x), &(mouse_point.y) );//handle mouse eventsselector_handle_event(&selector, e, &mouse_point, &map);}
函数SDL_GetMouseState可以得到鼠标坐标。
试着使用SDL2复刻曹操传(三)相关推荐
- 试着使用SDL2复刻曹操传(二)
本篇内容接上篇文章,继续讲述本人使用SDL2复刻曹操传的过程.上次主要实现创建窗口并显示背景图,今次将完善游戏窗口的基本功能,如最大化.拉伸.最小化.然后渲染英雄单位到地图上.为方便窗口的管理,创建G ...
- 试着使用SDL2复刻曹操传(一)
对古董老游戏的复刻,使用SDL再合适不过了,废话不多说,新建工程然后开搞! 对于IDE,本人选择jetbrains系列的CLion: 游戏程序总框架: 根据上图编写main.c文件: #define ...
- 滴滴正式分拆无人车业务,复刻Uber上市路径,传孙正义再加持
李根 发自 凹非寺 量子位 报道 | 公众号 QbitAI 滴滴无人车,终于也官宣分拆了. 今天(8月5日)滴滴出行宣布旗下自动驾驶部门,升级为独立公司,专注于自动驾驶研发.产品应用及相关业务拓展. ...
- 直播提醒|详解动作迁移理论及实践,1小时复刻故人笑!
点击左上方蓝字关注我们 今晚是「生成对抗网络七日打卡营」第五场直播:动作迁移理论详解与代码实战!玩过让名画开口说话等趣味项目的同学应该对动作迁移不陌生了,直接至文末获取直播地址即可. 考虑到有部分还没 ...
- 千亿参数大模型首次被撬开!Meta复刻GPT-3“背刺”OpenAI,完整模型权重及训练代码全公布...
梦晨 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 千亿级参数AI大模型,竟然真的能获取代码了?! 一觉醒来,AI圈发生了一件轰动的事情-- Meta AI开放了一个"重达" ...
- 千亿参数大模型首次被撬开:Meta复刻GPT-3“背刺”OpenAI,完整模型权重及训练代码全公布
千亿级参数AI大模型,竟然真的能获取代码了?! 一觉醒来,AI圈发生了一件轰动的事情-- Meta AI开放了一个"重达"1750亿参数的大语言模型OPT-175B,不仅参数比GP ...
- 用Matplotlib轻松复刻分析图,看看哪个城市买房最自由
作者 | 费弗里 来源 | Python大数据分析 简介 前不久「贝壳研究院」基于其丰富的房地产相关数据资源,发布了「2020 新一线城市居住报告」: 图1 而在这个报告中有几张数据可视化作品还是比较 ...
- AI复活「她」!用GPT-3复刻逝去未婚妻,美国小哥让挚爱以数字形态永生
转载自:新智元 「死亡不是真正的逝去,遗忘才是永恒的消亡.」 即便逝去,也不要遗忘. 近日,一位美国男子 Joshua Barbeau 在未婚妻去世后,重建了一个AI聊天机器人以复刻死去的未婚妻. J ...
- 无人配送的Nuro再融5亿美元,为啥中国复刻者们没它这么火
雷刚 发自 凹非寺 量子位 报道 | 公众号 QbitAI 复旦才俊朱佳俊的无人车公司Nuro.ai,又完成了新一轮融资. C轮次,5亿美元. 本轮融资由T. Rowe Price Associat ...
最新文章
- 布兰森:激励是最好的加速器
- ECLIPSE 调试F8-------运行到下一断点处 F5-------STEP INTO F6-------STEP OVER
- POJ 1160 Post Office
- mysql保存特殊表情_让 MySQL 支持 emoji 表情等特殊字符存储
- YaoLingJump开发者日志(七)
- 如何提升python编程能力_Python编程小白如何提升自己的编程能力
- GPS 校验和 代码_Linux recovery 移除签名校验
- python实现概率分布
- 【Flink】Flink Kafka 消费卡死 消费组卡死 topic无写入 实际有数据 topic正常
- 小米会在芯片产业异军突起吗?
- windows 下nodejs 升级无法通过n模块升级
- P1651 塔 (动态规划)
- python requirements.txt
- 个人博客 修改markdown代码块背景颜色
- java如何通过域名查ip_Java实现通过IP获取域名,通过域名获取IP
- modelsim error:iteration limit reached at time xxx ns.
- LOL手游诺手终极玩法,对线王者剑姬如何操作?国服第一推荐操作
- android实现箭头流程列表_Android下拉列表选项框及指示箭头动画
- 邮件服务器专用术语,邮件群发中的常见术语
- 硬件测试工程师的待遇和前景