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

发布时间:2026/10/15 17:22:31
到此我们就完成了整个基于直角坐标系场景地形的构造与寻路功能实现,相比6.2中的移动,这时精灵移动时场景的遮挡效果与地形匹配才算完美: voidLayoutRoot_MouseLeftButtonDown(objectsender, MouseButtonEventArgs e) {Point destinatione.GetPosition(scene);hero.RunTo(destination, scene.TerrainMatrix, scene.TerrainGridSize);}7.2基于2.5D斜视角之场景与寻径实现(交叉参考斜度α地图的构造及算法游戏中斜视角的原理与分析场景编辑器让游戏开发更美好场景编辑器之开源畅想)斜视角平面游戏我们又称之为2.5D游戏它拥有一定程度上的3D透视效果然而却不能任意的旋转角度。斜视角场景通过最简单的设定实现逼真的空间感这让它成为目前大多数2D-RPG游戏的首选。同样如能为本课程的示例游戏也插上个斜视角的翅膀无论是玩家的操控体验还是游戏趣味性都将提高很大一个档次于是乎又得有劳于第二部教程中已开源的2D游戏场景编辑器。打开场景编辑器同样的首先载入场景中的地图背景图片然后调整坐标系偏移量等参数使之与地图背景相吻合然后对照背景在相应的位置上设置好障碍物后即可点击导出场景配置信息在导出的信息中我们只需选取部分数据复制到本课程场景Info.xml配置文件中即可?xml version1.0encodingutf-8?Scene FullName龙门镇MapWidth3200MapHeight1320OffsetX1600OffsetY-1600TerrainGridSize30TerrainGradient60TerrainMatrixDimension128Terrain36_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,......MasksMask Code0Opacity0.5X155Y462Z630/Mask Code1Opacity0.5X499Y618Z919/Mask Code2Opacity0.5X1331Y175Z470/Mask Code3Opacity0.5X1923Y411Z838//Masks/Scene针对斜视角场景类中我们还得新增Offset及TerrainGradient属性同时3个主要属性需要静态化(场景的核心参数场景中的其他类都可能会用到)代码另外修改相应的解析逻辑代码遮挡物的坐标也需要相应的减去场景的偏移量否则会导致位置出错代码斜视角场景中的坐标以菱形方格为单位于是我们需要为场景添加两个静态方法用于窗口像素坐标系与游戏菱形斜视角坐标系之间的坐标转换///summary///将窗口坐标系中的坐标换算成游戏坐标系中的坐标////summarypublicstaticPoint GetGameCoordinate(Point p) {doubleradianGlobal.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///将游戏坐标系中的坐标换算成窗口坐标系中的坐标////summarypublicstaticPoint GetWindowCoordinate(Point p) {doubleradianGlobal.GetRadian(TerrainGradient);returnnewPoint((p.X-p.Y)*Math.Sin(radian)*TerrainGridSize,(p.Xp.Y)*Math.Cos(radian)*TerrainGridSize);}根据斜视角原理为了匹配上斜视角地形移动此时的精灵坐标属性Cooridinate非同以往它代表的是基于斜视角的新场景坐标(以菱形方格为单位Point类型在移动过程中同样会存在小数情况以平滑)代码当然RunTo及其相关方法也避免不了重写代码注意了本节我去掉了关键帧动画取而代之的是用简单队列移动的形式实现A*寻路同时精灵朝向的变化也改放到了每次直线移动方法中不仅逻辑代码得到优化精灵的整个移动过程更显优美而均匀。另外还有一些需要重视的细节比如为场景添加一个ConfigReady事件以实现配置文件加载完毕后进行相应的逻辑处理以及注册游戏窗体尺寸改变事件以适应浏览器或窗口模式时窗体尺寸无论如何变化主角将永远居中效果代码

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询