news 2026/7/5 2:19:54

到此我们就完成了整个基于直角坐标系场景地形的构造与寻路功能实现,相比6.2中的移动,这时精灵移动时场景的遮挡效果与地形匹配才算完美:

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
到此我们就完成了整个基于直角坐标系场景地形的构造与寻路功能实现,相比6.2中的移动,这时精灵移动时场景的遮挡效果与地形匹配才算完美:
voidLayoutRoot_MouseLeftButtonDown(objectsender, MouseButtonEventArgs e) {
Point destination
=e.GetPosition(scene);
hero.RunTo(destination, scene.TerrainMatrix, scene.TerrainGridSize);
}

7.2基于2.5D斜视角之场景与寻径实现(交叉参考:斜度α地图的构造及算法游戏中斜视角的原理与分析场景编辑器让游戏开发更美好场景编辑器之开源畅想)

斜视角平面游戏我们又称之为2.5D游戏,它拥有一定程度上的3D透视效果,然而却不能任意的旋转角度。斜视角场景通过最简单的设定实现逼真的空间感,这让它成为目前大多数2D-RPG游戏的首选。

同样,如能为本课程的示例游戏也插上个斜视角的翅膀,无论是玩家的操控体验还是游戏趣味性都将提高很大一个档次;于是乎又得有劳于第二部教程中已开源的2D游戏场景编辑器。

打开场景编辑器,同样的首先载入场景中的地图背景图片,然后调整坐标系偏移量等参数使之与地图背景相吻合,然后对照背景在相应的位置上设置好障碍物后即可点击导出场景配置信息:

在导出的信息中我们只需选取部分数据复制到本课程场景Info.xml配置文件中即可:

<?xml version="1.0"encoding="utf-8"?>
<Scene FullName="龙门镇"MapWidth="3200"MapHeight="1320"OffsetX="1600"OffsetY="-1600"TerrainGridSize="30"TerrainGradient="60"TerrainMatrixDimension="128"Terrain="36_97_0,36_98_0,37_95_0,37_96_0,37_97_0,37_98_0,37_99_0,38_94_0,38_95_0,38_99_0,38_100_0,39_94_0,39_100_0,39_101_0,40_92_0,40_93_0,40_94_0,40_101_0,40_102_0,41_92_0,41_102_0,41_103_0,42_91_0,42_92_0,42_103_0,42_104_0,43_90_0,43_91_0,43_104_0,43_105_0,44_87_0,44_88_0,44_89_0,44_90_0,44_100_0,44_101_0,44_102_0,44_103_0,44_104_0,44_105_0,44_106_0,45_83_0,45_84_0,45_85_0,45_86_0,45_87_0,45_100_0,45_106_0,45_107_0,46_83_0,46_100_0,46_107_0,46_108_0,47_82_0,47_83_0,47_98_0,47_99_0,47_100_0,47_103_0,47_104_0,......">
<Masks>
<Mask Code="0"Opacity="0.5"X="155"Y="462"Z="630"/>
<Mask Code="1"Opacity="0.5"X="499"Y="618"Z="919"/>
<Mask Code="2"Opacity="0.5"X="1331"Y="175"Z="470"/>
<Mask Code="3"Opacity="0.5"X="1923"Y="411"Z="838"/>
</Masks>
</Scene>

针对斜视角,场景类中我们还得新增Offset及TerrainGradient属性,同时3个主要属性需要静态化(场景的核心参数,场景中的其他类都可能会用到):

代码

另外修改相应的解析逻辑:

代码

遮挡物的坐标也需要相应的减去场景的偏移量,否则会导致位置出错:

代码

斜视角场景中的坐标以菱形方格为单位,于是我们需要为场景添加两个静态方法用于窗口像素坐标系与游戏菱形斜视角坐标系之间的坐标转换:

///<summary>
///将窗口坐标系中的坐标换算成游戏坐标系中的坐标
///</summary>
publicstaticPoint GetGameCoordinate(Point p) {
doubleradian=Global.GetRadian(TerrainGradient);
returnnewPoint(
(
int)((p.Y/(2*Math.Cos(radian))+p.X/(2*Math.Sin(radian)))/TerrainGridSize),
(
int)((p.Y/(2*Math.Cos(radian))-p.X/(2*Math.Sin(radian)))/TerrainGridSize)
);
}

///<summary>
///将游戏坐标系中的坐标换算成窗口坐标系中的坐标
///</summary>
publicstaticPoint GetWindowCoordinate(Point p) {
doubleradian=Global.GetRadian(TerrainGradient);
returnnewPoint(
(p.X
-p.Y)*Math.Sin(radian)*TerrainGridSize,
(p.X
+p.Y)*Math.Cos(radian)*TerrainGridSize
);
}

根据斜视角原理,为了匹配上斜视角地形移动,此时的精灵坐标属性Cooridinate非同以往,它代表的是基于斜视角的新场景坐标(以菱形方格为单位,Point类型,在移动过程中同样会存在小数情况以平滑):

代码

当然,RunTo及其相关方法也避免不了重写:

代码

注意了,本节我去掉了关键帧动画,取而代之的是用简单队列移动的形式实现A*寻路,同时精灵朝向的变化也改放到了每次直线移动方法中;不仅逻辑代码得到优化,精灵的整个移动过程更显优美而均匀。

另外还有一些需要重视的细节,比如为场景添加一个ConfigReady事件以实现配置文件加载完毕后进行相应的逻辑处理;以及注册游戏窗体尺寸改变事件以适应浏览器或窗口模式时窗体尺寸无论如何变化主角将永远居中效果:

代码
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 2:18:49

基于 superpowers 实现复杂前端改造

1. 背景&#xff1a;复杂改造真正难的不是写代码&#xff0c;而是控制跨层一致性superpower 是开源社区非常出名的 harness 框架&#xff0c; 我们在本文通过数栈产品 easyIndex 的复杂需求实现来探究 superpower 的价值。在交叉表改造里&#xff0c;业务上的直接诉求其实不复杂…

作者头像 李华
网站建设 2026/7/5 2:18:46

Python特征工程实战:从数据清洗到模型提效的完整流程

引言&#xff1a;为什么特征工程比调参更重要 先看一张本文的完整流程脑图&#xff0c;便于把握全局&#xff1a; 做机器学习项目&#xff0c;很多新手把80%的时间花在调参上&#xff0c;结果模型精度提升微乎其微。而真正决定模型上限的&#xff0c;往往是特征工程。 有句话…

作者头像 李华
网站建设 2026/7/5 2:16:37

AI时代依然受用:那些越过越好的人,都学会了这件事。

近日&#xff0c;和一位深耕AI赛道的创业者闲谈&#xff0c;谈及当下行业瞬息万变&#xff1a;新技术层出不穷&#xff0c;机遇遍地皆是&#xff0c;陷阱也无处不在。谈及浮沉百态&#xff0c;究竟什么样的人&#xff0c;能穿越行业周期、稳步前行&#xff1f;这位创业者给出答…

作者头像 李华
网站建设 2026/7/5 2:14:09

听脑企业版vs传统方案更适配杭州大学生学习工具解决方案选型

"针对杭州本地布局大学生学习工具业务的高教服务商、高校创业团队、职业教育机构的采购选型需求&#xff0c;听脑企业版对比传统纯软件方案、软硬件结合方案&#xff0c;在面向大学生课堂转写、实训记录、学习知识沉淀场景下&#xff0c;可匹配企业级的管理、合规、集成要…

作者头像 李华
网站建设 2026/7/5 2:13:46

【Citizens】下载教程

Citizens2 插件下载教程&#xff08;CI 持续集成版&#xff09; 本教程面向完全没接触过 Jenkins/CI 的新手&#xff0c;手把手教你从 Citizens 官方构建站下载对应你 Minecraft 服务器版本的插件。 一、先了解几个概念&#xff08;很重要&#xff0c;别跳过&#xff09; 概念…

作者头像 李华
网站建设 2026/7/5 2:13:44

Qwen3-TTS 因Transformers 产生的错误解决思路仅供参考

问题分类 所属模块:ComfyUI → TTS Audio Suite → Qwen3-TTS Engine 环境:Windows,ComfyUI-aki v1.3,Python 3.10,PyTorch 2.5.1+cu124,Transformers 5.12.1(主环境) 模型:Qwen3-TTS-12Hz-1.7B-Base 触发场景:使用 SRT workflow 进行语音克隆生成时,worker 子进程…

作者头像 李华