本来想在第2篇说明物体遮挡与寻路的开发过程,但是因为我把这问题想简单了,现在已经完成了遮挡与寻路,但是中间的过程非常多,第一篇文章的系统结构需要做一些修改才可以,这里先说一下地图加载的相关问题。
首先是效果图:
可直接运行版本下载:>>点击进入下载页<<
在第一篇文章《从零开始重写KOK1(万王之王1) —— (1)让人物可在地图上使用鼠标跑动》中,地图是这样的过程加载的:
1. 在Map对象初始化时将每个小图个加载到一个整体的大地图中,如图:
2. 在玩家位置作出修改后,也修改屏幕矩形左上角的位置,因为玩家是在中间,所以要维持屏幕的x,玩家的x - 1/2屏幕宽,纵向同理。
以下是Player类的Move()中的代码,用来调整屏幕矩形的位置:
3. 要限制住玩家的位置,不能够使得屏幕矩形超出世界地图。在老的地图管理器是这样做的,限制玩家的目的坐标,不可以小于屏幕宽的一半,不可以大于世界地图宽度 - 屏幕宽的一半,纵向同理。这样就不会出现屏幕画地图外的情况了。但这样做就使得实际地图的内容小于了现在世界地图的大小,因为要在世界地图四周补上一圈黑色的贴图,这样玩家才知道到达了地图的边界。文字上可能不好理解,请看下图:
这个图假定玩家走到了地图的右下角,因为屏幕矩形(蓝色框)不能超过世界地图,所以要在世界地图里面加这么一圈灰色的作为边界的纹理,所以也就说,实际的地图就比这个地图Data存放的要小了,这显然不是我们想要的。而且最重要的问题是,当地图非常之大时,这个超大的地图表面将占用巨大的显存或内存。
那么我们想要的地图管理器的目标就是:
——整个地图Data就是实际的地图,不包括边界纹理,当因为玩家的移动而导致屏幕矩形超出了地图范围时,自动补黑色。
要实现这种效果可以想到这种方法:地图表面大小= 屏幕大小,每一帧重画应当出现的地图块。但问题也随之而来,我们要在每1帧都去画一遍视窗内的地图,效率不高。那不如我们每次画一个区域的地图,当屏幕在这个区域内就不重画,而是裁剪适当的位置,当超出这个区域时,重新生成新区域,并且剪裁适当的地图,如下图:
总结一下:
1. 首先确定屏幕矩形在当前地图表面内,在则不重画,直接剪裁适当位置,如果不在,进入2。
2. 重新绘制地图表面,根据屏幕矩形,计算地图表面中的每个小块:
2.1 如果不在世界地图中,不处理,因为默认就是黑色。
2.2 如果在,则计算是哪块世界地图,将适当的地图块话在这里。
3. 重新绘制后,剪裁适当的位置,画在离屏表面上。
下面贴出代码:
Map.h
Map.cpp
下面给出整个项目源码,因为最近的研究是一系列的,所以这个版本的源码已经有了遮挡、寻路等功能,但是后面的功能不影响Map的代码。
下载地址:>>点击进入下载页<< 资源分是1,有兴趣的朋友下吧:)
分享到:
相关推荐
kok第三KOK-K6.0.3程序编写软件新功能说明 1、 软件版本号升级为6.0.3; 2、 参数设置内增加液晶盘、无磁盘选项,通过编程界面选择不同色子盘,主板可自动转换为相应型号(需新主板支持); 3、 选择液晶盘编程...
《从零开始重写KOK1(万王之王1)——(2)优化地图加载》 在游戏开发领域,优化地图加载是一项至关重要的技术,它直接影响到玩家的游戏体验。KOK1,即《万王之王1》,作为一款早期的网络游戏,其地图加载效率在今天...
【kok1服务端源码】是针对网络游戏"万王之王1"的后端系统实现,主要使用C++编程语言进行开发。在游戏行业中,服务端源码是游戏运行的核心部分,负责处理玩家的交互、游戏逻辑、网络通信以及数据库交互等关键任务。...
本篇文章将深入探讨“KOK1_BIN_20110111”这一特定的更新,该更新聚焦于从零开始重写游戏核心系统,以及赋予角色新的鼠标操作方式,从而极大提升了玩家的交互体验。 首先,让我们分析“从零开始重写KOK1”这一核心...
《ZKOK代码编写教程——探索列王记与万王之王的游戏编程世界》 在游戏开发领域,尤其是在线游戏,ZKOK(假设为一个游戏引擎或编程语言的缩写)扮演着至关重要的角色。它允许开发者创建复杂的逻辑和交互,赋予游戏...
标题“KOK1_SRC_20110111”可能代表一个特定的游戏或软件项目的源代码库,其中“KOK1”可能是项目代号,“SRC”则明确表示这是源代码部分,而日期“20110111”可能指示这个版本或更新是在2011年1月11日创建的。...
KOK高仿YY电脑界面 实例源码III太强益智游戏程序教程KOK高仿YY电脑界面 实例源码III太强益智游戏程序教程KOK高仿YY电脑界面 实例源码III太强益智游戏程序教程KOK高仿YY电脑界面 实例源码III太强益智游戏程序教程
在"kok 卡拉Ok类的编写与应用"这个主题中,我们将深入探讨如何利用面向对象编程技术来构建此类系统,特别是关注类的设计和实现。以下是关于这个主题的详细知识讲解: 首先,类的编写是面向对象编程的基础。在卡拉OK...
这是一个用于展现简单文本信息的自适应动效网页模板,做这个模板的目的主要是用来参加学校的H5页面大赛,想着自己开发的前端UI框架—— kok-ui也需要一个能显示文档的网页,在此基础上做了这个,这个版本适合不是很...
我从 Geofabrik 的形状下载开始,并使用了 github ( ) 上 3liz/osm-in-qgis 项目中的样式,并很快更改/扩展了样式和向我的地图添加了其他图层(轮廓、山体阴影、缺失的湖泊等) 用法 很快就会描述.... 执照 此存储...
1.采用面象对象(OOP)的编程方式 2.程序响应速度快,稳定 3.代码简洁、易懂、特别适合新手参考 4.基本功能:悄悄话留言、留言置顶、管理回复 5.程序名称:Kok100Book V1.0 说明:修改网站标题、MYSQL数据库连接...
8. **性能优化**:对于高访问量的留言本,缓存技术(如Memcached或Redis)可以提高数据读取速度。同时,合理的数据库设计和索引策略也是提升系统性能的关键。 9. **响应式设计**:现代Web应用需要适应不同设备和...
【标题】"Kok100Book留言本.7z" 涉及的是一个以源码形式提供的网站留言本程序。这个压缩包文件采用7z格式,这是一种高效的压缩算法,通常用于存储大量数据或代码,以减小文件体积,便于传输和存储。 【描述】虽然...
2. 4.8kOK的意义 4.8kOK可能指的是通信的波特率(bits per second,bps),也就是每秒传输的数据位数。在无线通信中,波特率决定了数据传输的速度。4.8kbps意味着每秒可以传输4800个数据位,对于许多低功耗应用来说...
Kok100Book留言本说明: 1.采用面象对象(OOP)的编程方式 2.程序响应速度快,稳定 3.代码简洁、易懂、特别适合新手参考 4.基本功能:悄悄话留言、留言置顶、管理回复 初始后台管理用户名:admin 密码:admin
WTE2A Chapter1-6知识点梳理 本资源摘要信息涵盖了WTE2A Chapter1-6的知识点,主要包括 Coming to school 和 About me 两个章节的内容。 Coming to school 1. 词汇:bus 公汽、minibus 小型公汽、school bus 校车...
PHP实例开发源码—Kok100Book php留言本程序.zip PHP实例开发源码—Kok100Book php留言本程序.zip PHP实例开发源码—Kok100Book php留言本程序.zip
【PHP实例开发源码—Kok100Book php留言本程序】 PHP是一种广泛使用的开源脚本语言,尤其在Web开发领域中占据了重要的地位。Kok100Book的PHP留言本程序是一个基础但实用的实例,它展示了如何利用PHP进行动态网页...
1. 数据安全:使用预处理语句防止SQL注入,对用户输入进行过滤和转义,确保数据安全。 2. 用户验证:实施登录和权限控制,防止未授权的用户进行恶意操作。 3. 错误处理:设置合理的错误提示和日志记录,便于排查问题...
【标题】"基于PHP的Kok100Bookphp留言本程序源码.zip" 提供的是一个使用PHP语言编写的在线留言本程序的源代码。这个程序可能包含了实现用户交互、数据存储和显示功能的核心组件,是学习PHP Web开发的一个基础实例。 ...