本篇分三部分,分别是地图移动、光标替换以及鼠标事件处理。最后达成的效果如下:

(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复刻曹操传(三)相关推荐

  1. 试着使用SDL2复刻曹操传(二)

    本篇内容接上篇文章,继续讲述本人使用SDL2复刻曹操传的过程.上次主要实现创建窗口并显示背景图,今次将完善游戏窗口的基本功能,如最大化.拉伸.最小化.然后渲染英雄单位到地图上.为方便窗口的管理,创建G ...

  2. 试着使用SDL2复刻曹操传(一)

    对古董老游戏的复刻,使用SDL再合适不过了,废话不多说,新建工程然后开搞! 对于IDE,本人选择jetbrains系列的CLion: 游戏程序总框架: 根据上图编写main.c文件: #define ...

  3. 滴滴正式分拆无人车业务,复刻Uber上市路径,传孙正义再加持

    李根 发自 凹非寺  量子位 报道 | 公众号 QbitAI 滴滴无人车,终于也官宣分拆了. 今天(8月5日)滴滴出行宣布旗下自动驾驶部门,升级为独立公司,专注于自动驾驶研发.产品应用及相关业务拓展. ...

  4. 直播提醒|详解动作迁移理论及实践,1小时复刻故人笑!

    点击左上方蓝字关注我们 今晚是「生成对抗网络七日打卡营」第五场直播:动作迁移理论详解与代码实战!玩过让名画开口说话等趣味项目的同学应该对动作迁移不陌生了,直接至文末获取直播地址即可. 考虑到有部分还没 ...

  5. 千亿参数大模型首次被撬开!Meta复刻GPT-3“背刺”OpenAI,完整模型权重及训练代码全公布...

    梦晨 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 千亿级参数AI大模型,竟然真的能获取代码了?! 一觉醒来,AI圈发生了一件轰动的事情-- Meta AI开放了一个"重达" ...

  6. 千亿参数大模型首次被撬开:Meta复刻GPT-3“背刺”OpenAI,完整模型权重及训练代码全公布

    千亿级参数AI大模型,竟然真的能获取代码了?! 一觉醒来,AI圈发生了一件轰动的事情-- Meta AI开放了一个"重达"1750亿参数的大语言模型OPT-175B,不仅参数比GP ...

  7. 用Matplotlib轻松复刻分析图,看看哪个城市买房最自由

    作者 | 费弗里 来源 | Python大数据分析 简介 前不久「贝壳研究院」基于其丰富的房地产相关数据资源,发布了「2020 新一线城市居住报告」: 图1 而在这个报告中有几张数据可视化作品还是比较 ...

  8. AI复活「她」!用GPT-3复刻逝去未婚妻,美国小哥让挚爱以数字形态永生

    转载自:新智元 「死亡不是真正的逝去,遗忘才是永恒的消亡.」 即便逝去,也不要遗忘. 近日,一位美国男子 Joshua Barbeau 在未婚妻去世后,重建了一个AI聊天机器人以复刻死去的未婚妻. J ...

  9. 无人配送的Nuro再融5亿美元,为啥中国复刻者们没它这么火

    雷刚 发自 凹非寺  量子位 报道 | 公众号 QbitAI 复旦才俊朱佳俊的无人车公司Nuro.ai,又完成了新一轮融资. C轮次,5亿美元. 本轮融资由T. Rowe Price Associat ...

最新文章

  1. 布兰森:激励是最好的加速器
  2. ECLIPSE 调试F8-------运行到下一断点处 F5-------STEP INTO F6-------STEP OVER
  3. POJ 1160 Post Office
  4. mysql保存特殊表情_让 MySQL 支持 emoji 表情等特殊字符存储
  5. YaoLingJump开发者日志(七)
  6. 如何提升python编程能力_Python编程小白如何提升自己的编程能力
  7. GPS 校验和 代码_Linux recovery 移除签名校验
  8. python实现概率分布
  9. 【Flink】Flink Kafka 消费卡死 消费组卡死 topic无写入 实际有数据 topic正常
  10. 小米会在芯片产业异军突起吗?
  11. windows 下nodejs 升级无法通过n模块升级
  12. P1651 塔 (动态规划)
  13. python requirements.txt
  14. 个人博客 修改markdown代码块背景颜色
  15. java如何通过域名查ip_Java实现通过IP获取域名,通过域名获取IP
  16. modelsim error:iteration limit reached at time xxx ns.
  17. LOL手游诺手终极玩法,对线王者剑姬如何操作?国服第一推荐操作
  18. android实现箭头流程列表_Android下拉列表选项框及指示箭头动画
  19. 邮件服务器专用术语,邮件群发中的常见术语
  20. 硬件测试工程师的待遇和前景

热门文章

  1. mysql数据库主从模式配置
  2. 我的世界工业服务器发展最快,《我的世界》服务器生存及快速发展心得
  3. 亚运概念风起云涌 7只个股昨涨停
  4. Qt切换多国语言,简单的流程记录。
  5. Tacview 添加自定义模型
  6. 史上最新 PHP 调用 jar包教程
  7. 西电上机题——P385-报数游戏
  8. 在使用Quartus时遇到的错误
  9. 推扫式和快照式高光谱成像系统在红肉掺假检测中的应用
  10. Android OTG数据不能写入