设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3571|回复: 2
打印 上一主题 下一主题

[交流讨论] 【开发心得】四方向桥

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4555
在线时间
630 小时
注册时间
2021-3-24
帖子
487
跳转到指定楼层
1
发表于 2021-6-3 12:09:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x

先看下效果
四方向桥有很多种实现方式,直接写事件控制也不难。
但试想 一个游戏  N个地图 有N*M个桥  
好家伙 这动点逻辑 直接血压上升。

程序的意思,其实和编码无关,是找到一个问题的范用处理办法。
但本人经过不断的试错 改进。终于找到了一种 扩展性较高的解决办法。


看下MV的事编写了多少
桥体  2页 执行事件为空

空气墙1  1页  执行事件为空

空气墙2  1页  执行事件为空




脚本基于region标记
首先的问题便是
游戏角色 移动时踩到了什么标记

JAVASCRIPT 代码复制
  1. /**region自动触发事件*/
  2.     Game_Player.prototype.moveStraight = function(d) {
  3.         if (this.canPass(this.x, this.y, d)) {
  4.             this._followers.updateMove();
  5.             _.Fregion_control( Game_Map.prototype.regionId($gameMap.roundXWithDirection(this.x, d), $gameMap.roundYWithDirection(this.y, d)))
  6.         }
  7.         Game_Character.prototype.moveStraight.call(this, d);
  8.     };


_.Fregion_control是我新增的方法,
this.canPass(this.x, this.y, d)   3个参数 x y d  xy坐标与d朝向  检查玩家是否能通过前方的图块
(我之前就一直在canpass的方法里转  进到Game_Map.checkPassage 给我人都看傻了...
首先MV键盘和鼠标走了两个方法;移动一次 检查自己的位置和前方的位置。有时候没调明白代码可能是你进的太深了)
如果能通过 进入if  执行更新从者,就是主角后面的队友小人;与我新增的方法。


Game_Map.prototype.regionId($gameMap.roundXWithDirection(this.x, d), $gameMap.roundYWithDirection(this.y, d))
我写的比较长
Game_Map.prototype.regionId是传入x y坐标 返回该坐标的region标记  
而 Game_Player.prototype.moveStraight内的x y是玩家当前的坐标 你要将他向朝向方向移一格
$gameMap.roundXWithDirection(this.x, d)与$gameMap.roundYWithDirection(this.y, d)自带的方法可以取到移动后的x y
传入即可

JAVASCRIPT 代码复制
  1. _.Fregion_control=function(region){
  2.          console.log(region)
  3.     }


检查效果



插件配置

桥的出入口;桥洞的出入口;桥体
3个regionid

上桥时打开的开关
进桥洞时打开的开关
用于控制
上桥时  桥洞出入口的空气墙出现 桥体在玩家下方
进洞时  桥的出入口的空气墙出现 桥体在玩家下方

JAVASCRIPT 代码复制
  1. *@param bridge_up
  2. * @desc  桥的出入口
  3. * @default 245
  4. * @type number
  5. * @parent Bridge
  6. *
  7. *@param bridge_down
  8. * @desc  桥洞的出入口
  9. * @default 246
  10. * @type number
  11. * @parent Bridge
  12. *
  13. *@param bridge_region
  14. * @desc  桥体
  15. * @default 244
  16. * @type number
  17. * @parent Bridge
  18. *
  19. *@param bridge_switchup
  20. * @desc  上桥时打开的开关
  21. * @default  5
  22. * @type number
  23. * @parent Bridge
  24. *
  25. *@param bridge_switchdown
  26. * @desc  进桥洞时打开的开关
  27. * @default  6
  28. * @type number
  29. * @parent Bridge
  30.  
  31.  
  32.     _.bridge_switchdown= parseInt(params['bridge_switchdown'])||0;
  33.     _.bridge_switchup= parseInt(params['bridge_switchup'])||0;
  34.     _.bridge_down= parseInt(params['bridge_down'])||-1;
  35.     _.bridge_up= parseInt(params['bridge_up'])||-1;
  36.     _.bridge_region= parseInt(params['bridge_region'])||-1;
  37.     _.bridge_pass=[_.bridge_down,_.bridge_up,_.bridge_region]


脚本读取插件配置的写法 没什么好说的

然后 将_.Fregion_control中写进事务
JAVASCRIPT 代码复制
  1. _.Fregion_control=function(region){
  2.         switch (region) {
  3.             case _.bridge_up:
  4.                 $gameSwitches.setValue(_.bridge_switchup,!$gameSwitches.value(_.bridge_switchup))
  5.                 break
  6.             case _.bridge_down:
  7.                 $gameSwitches.setValue(_.bridge_switchdown,!$gameSwitches.value(_.bridge_switchdown))
  8.                 break
  9.         }
  10.  
  11.         if(($gameSwitches.value(_.bridge_switchup)||$gameSwitches.value(_.bridge_switchdown))&&_.bridge_pass.indexOf(region)==-1)
  12.         {
  13.             $gameSwitches.setValue(_.bridge_switchup,false)
  14.             $gameSwitches.setValue(_.bridge_switchdown,false)
  15.         }
  16.     }

一个switch  玩家踩到桥的出入口  对应的开关置非   原来关闭则打开 原来打开则关闭
然后通过检查2个开关是否打开 判断玩家是不是在桥上
如果玩家在桥上而且踩的不是 桥的出入口和桥体   (情况是 玩家踩了出入口 然后扭头回去)
则2个开关关闭 (玩家下桥)


   

评分

参与人数 1+1 收起 理由
ssrwkx + 1 塞糖

查看全部评分

摸了

Lv4.逐梦者

梦石
0
星屑
6930
在线时间
708 小时
注册时间
2021-3-5
帖子
814
2
发表于 2021-6-3 13:37:23 | 只看该作者
楼主说的桥的效果,和这个视频好像是一样的:
https://www.youtube.com/watch?v=96-AyFsbj9g
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4555
在线时间
630 小时
注册时间
2021-3-24
帖子
487
3
 楼主| 发表于 2021-6-3 16:18:09 | 只看该作者
RyanYe 发表于 2021-6-3 13:37
楼主说的桥的效果,和这个视频好像是一样的:
https://www.youtube.com/watch?v=96-AyFsbj9g ...

也是看了114514个方法后总结的
摸了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-28 07:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表