Project1

标题: 如何禁止主角行动呢 [打印本页]

作者: ws6tbz    时间: 2021-4-4 11:05
标题: 如何禁止主角行动呢
我的目标是两个NPC(A和B)同时出现,然后沿着各自的路线到达各自的目的地。这期间主角得看着他们不能动。等他们到了以后,主角才能自由移动。

在论坛里搜过类似的问题,发现有种解答是使用“自动执行”。但如果我使用自动执行,这俩NPC事件就会逐一运行——A移动完,B才开始移动。

所以各位大佬能指点一下小白吗?


作者: alexncf125    时间: 2021-4-4 11:24
本帖最后由 alexncf125 于 2021-4-4 14:25 编辑

(function(){
    var _20210404_Game_Player_canMove = Game_Player.prototype.canMove;
    Game_Player.prototype.canMove = function() {
        //1号开关开启时, 玩家不能移动
        return !$gameSwitches.value(1) &&  _20210404_Game_Player_canMove.call(this);
    };
})();

1.js/plugin目录新建"PlayerCannotMoveWhenSwitchOn.txt"文本
2.贴上以上代码后, 保存並把文本后缀改成"PlayerCannotMoveWhenSwitchOn.js"
3.打开插件管理器並启用"PlayerCannotMoveWhenSwitchOn"
4.在那两个並行事件移动前打开1号开关, 移动完后关闭开关
5.如想在事件移动时禁示止打开菜单, 则需修改Scene_Map的updateCallMenu
作者: soulsaga    时间: 2021-4-4 11:25
本帖最后由 soulsaga 于 2021-4-4 11:46 编辑

用並行+文章显示...................
作者: PLeaseS    时间: 2021-4-4 12:01
设置移动路线为无并且无限循环
作者: ws6tbz    时间: 2021-4-4 13:39
soulsaga 发表于 2021-4-4 11:25
用並行+文章显示...................

并行处理我理解,这个文章显示是为了干什么呢
作者: ws6tbz    时间: 2021-4-4 13:50
alexncf125 发表于 2021-4-4 11:24
(function() {
    var _Game_Player_cannotMove_switchOn = Game_Player.prototype.canMove;
    Game_Pla ...

非常感谢。但我尝试了一下,遇到点问题。安装好并且激活以后,我刚打开游戏主角就没法移动。是我哪里没设置好吗
作者: soulsaga    时间: 2021-4-4 13:51
ws6tbz 发表于 2021-4-4 13:39
并行处理我理解,这个文章显示是为了干什么呢

显示文章中主角不能动好像..
作者: wabcmcc    时间: 2021-4-4 17:29
只要有事件開自動,限制角色移動.
事件1,開自動.
事件2,開並行.
作者: ws6tbz    时间: 2021-4-4 23:54
alexncf125 发表于 2021-4-4 11:24
(function(){
    var _20210404_Game_Player_canMove = Game_Player.prototype.canMove;
    Game_Player. ...

再次感谢!这次可以了,不过途中还是可以打开菜单。如果用代码的方式可以阻止玩家玩家打开菜单吗
作者: ws6tbz    时间: 2021-4-4 23:56
wabcmcc 发表于 2021-4-4 17:29
只要有事件開自動,限制角色移動.
事件1,開自動.
事件2,開並行.

嗯嗯,我刚开始确实是用这个办法。结果发现自动执行的NPC(A)到了终点,并行处理的那个NPC(B)还在走。导致A刚走完,玩家就可以操作了。

……

最后我把俩NPC的执行方式调换过来就解决了。
作者: ws6tbz    时间: 2021-4-5 00:03
PLeaseS 发表于 2021-4-4 12:01
设置移动路线为无并且无限循环

这个办法厉害,确实停住了。不过好像还是可以打开菜单……

然后怎么结束这个循环呢?是在NPC走完以后重新设置玩家的移动路线吗
作者: 石林尘影    时间: 2021-4-5 01:11
本帖最后由 石林尘影 于 2021-4-5 01:23 编辑

直接在事件的移动路线里设置,如图:


具体设置:
1,出现条件按照你自己的需要设置,触发条件设置为自动执行;
2,设置事件A的移动路线,不要勾选等待完成;
3,设置事件B的移动路线,勾选等待完成;

A和B会同时开始移动,当B移动完成之后,玩家才可以继续操作
作者: shmily0725    时间: 2021-4-5 01:23
哈哈哈,我刚刚还想问楼主是不是用MV,是的话我或许可以回答,但抬头一看突然意识到自己很蠢,这不是明晃晃写着是MV区嘛
其实我做过类似的,你只要把控制所有你想要的角色的【设置移动路线】放在同一个事件里就行
先给你看看我的例子,是不是你想要的(实测整个过程无法召唤菜单,因为事件还没有结束)


然后是我事件编辑器的截图

因为我这个是按【确定键】开始整个动画过程,所以设定的是确定键。然后那个最开始出现的那个从右走到左的灵魂开始动画的地方就是图里蓝色箭头那里,你可以从那里开始看
中间都是些移动路径(动画)设定,没啥好看的,紧接着是这个


从这里开始就可以讲一个概念了:
- 所有【设置移动路线】都是一瞬间告诉机器命令的,之后你就没法再控制它了,所以我们可以利用这个特点来同时播放多个动画
- 而上图里箭头指的【等待】是【设置移动路径】之外,控制整个事件的等待。【设置移动路径】有自己内部的等待

不知道我这么解释这两点讲清楚了没有,我自己也承认我自己嘴笨,也就是说,你只要以如下方式设置事件就行了
example:
【设置移动路径】 # 给角色1设定动画
【设置移动路径】 # 给角色2设定动画
【等待】 # 这里设定的值是上面所有动画的最大值(同时播放各个角色动画所需要的时间)
(# 事件结束)
(如果最后的【等待】没有设定的话,就是这个事件结束了,玩家就可以操控主角移动了(如果没有其他事件干扰的话))

如果需要各个角色之间的动画有一定的时间差播放,但中途还是同时播放的话,可以在其中需要后播放的那个【设置移动路径】中添加【等待】(注意:是在【设置移动路径】里的【等待】)
example
【设置移动路径】 等待10帧 # 角色1动画
【设置移动路径】 #角色2动画
【等待】 # 这里设定的值是上面所有动画的最大值(同时播放各个角色动画所需要的时间)
(# 事件结束)
(这样一来,就是角色1比角色2慢10帧才开始动)

完整事件编辑器截图,如果你有需要的话

作者: ws6tbz    时间: 2021-4-5 18:00
shmily0725 发表于 2021-4-5 01:23
哈哈哈,我刚刚还想问楼主是不是用MV,是的话我或许可以回答,但抬头一看突然意识到自己很蠢,这不是明晃晃 ...

俺懂了,基本原理是使用等待命令等他们完成动作是吗?这个等待时间是怎么的出来的呢,估算的吗?
作者: shmily0725    时间: 2021-4-5 20:35
ws6tbz 发表于 2021-4-5 18:00
俺懂了,基本原理是使用等待命令等他们完成动作是吗?这个等待时间是怎么的出来的呢,估算的吗? ...

抱歉,我昨天说太乱了,整理一下
基本原理是同一个事件里的【设置移动路线】,只要没有被事件里的【等待】隔开,就都可以同时执行。
我上一个楼的主要意思是:
①你如果要做多个有时间差的动画,需要在部分“【设置移动路线】里”添加【等待】
②“事件里(【设置移动路线】之外)”的【等待】是为了方便安排除了【设置移动路线】之外的东西,比如【对话】
③如果你事件里最后一个命令是【设置移动路线】,可以考虑勾选(等待)


作者: ws6tbz    时间: 2021-4-6 13:20
OK,俺学到了,谢谢各位啦




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1