rpgmaker吧 关注:13,782贴子:24,360
  • 5回复贴,共1

【求助】如何实现禁止玩家移动

只看楼主收藏回复

想设置一个事件,让玩家定在原地(方向键/移动键失效),但是玩家依然能触发互动(和自动执行不一样),想请问这种需要用到什么插件/代码?麻烦了,十分感谢TT


IP属地:上海1楼2025-02-06 21:39回复
    请问怎么做到点击墙上两格高或更高的物品然后显示对话呀【rpgmakermv吧】_百度贴吧
    https://tieba.baidu.com/p/9422506152?pid=151620165460&cid=0#151620165460
    上面这个网页有下面这个插件,但是YEP的插件可能不能免费下载。
    YEP Event Click Trigger - YEP_EventClickTrigger.js
    作者:Yanfly
    单击事件时,允许设定启动触发器而不移动角色

    所以那里还罗列了TouchInputDispatcherMZ.js、TouchInputDispatcher.js等等插件,
    还有TouchInput.x和TouchInput.y鼠标位置的脚本。

    还可以到plugin-mz.fungamemake.com去找插件,
    除了下面这四个之外,还可以通过这四个插件原文的英语关键词Freeze、Forbid、PlayerMove和日语关键词—プレイヤーの移動、移動禁止、移動を禁止、移動速度、之类的去继续搜索,可以找到更多的插件。

    禁止DarkPlasma玩家移动-DarkPlasma_FreezePlayer.js
    作者:DarkPlasma
    开关ON期间,禁止玩家移动。

    KRD播放器不可移动公共事件执行-KRD_MZ_Freeze.js
    作者:黑度
    使玩家无法移动,取而代之的是执行公共事件。

    KR播放器禁止移动-MKR_PlayerMoveForbid.js
    作者:曼凯德
    指定号码的开关ON期间,禁止玩家操作的角色移动。

    角色停止-CharacterFreeze.js
    作者:三康坦
    自动移动事件并停止所有动画。同时玩家也不能动了。将参数指定的开关设为ON时停止,设为OFF时重新开始。您还可以在停止时显示专用图片,或调整背景音乐的音量。


    IP属地:广东2楼2025-02-09 00:46
    回复
      ◆更改透明状态:关闭
      ◆变量操作:#0001 = 地图编码
      ◆变量操作:#0002 = 玩家 的 地图横轴
      ◆变量操作:#0003 = 玩家 的 地图纵轴
      ◆设置事件位置:本事件, ({#0002},{#0003})
      ◆注释:这里是第一分页,让替身事件保持透明、可穿透状态跟随主角。
      ◆如果:#0005 为 开启
      ◆设置移动路线:玩家
      :      :◇移动速度:6
      :      :◇移动频率:5
      ◆独立开关操作:A = 开启

      :结束分支

      好像还可以使用障眼法来操作。
      上面这个分页的图像记得是无,或者是透明的图片,并行处理,穿透那里要打钩。
      下面这个分页的图像是主角的行走图,并行处理,穿透这里好像可以随便。
      然后想办法通过控制开关的开启和关闭来实现,
      第一分页之所以把玩家的移动速度和移动频率调到最高,是因为需要主角以最快的速度去触发其他的NPC事件页。
      所以,这个地图不宜过大,又或者是使用什么手段把速度和频率突破现在的这个数值。
      这里说的是使用主角去触发NPC事件,或许还可以使用按键来触发公共事件,还可以使用点击图片触发公共事件。
      按键插件和点击图片的插件都有,而且还有很多。

      ◆更改透明状态:开启
      ◆注释:这里是第二分页,让替身事件出现、并且固定在这个位置。
      ◆如果:#0005 为 关闭
      ◆设置移动路线:玩家
      :      :◇移动速度:4
      :      :◇移动频率:3
      ◆场所移动:{#0001} ({#0002},{#0003}) (淡入淡出: 无)
      ◆独立开关操作:A = 关闭

      :结束分支


      IP属地:广东3楼2025-02-09 02:14
      回复
        3楼忘记了在设置移动路线这里给玩家加上开启穿透和关闭穿透了,
        开启穿透可以让主角移动到任何地方去触发NPC事件,
        并且是不绕路的最快速路线,这样可以减少延迟的感觉。

        除了上面这段可以减少延迟的感觉,使用代码突破原来的最高速度和最高频率好像也是可以的。
        在rmmz_objects.js检索MoveSpeed找到Game_CharacterBase.prototype.initMembers函数的
        this._moveSpeed = 4;
        this._moveFrequency = 6;
        上面这两个应该就是默认的速度和频率了。
        还有下面这个冲刺的代码,说不定就可以突破原来的上限了。
        一直想问个问题,这个始终跑步如何改为默认就是打开状态?【rpgmakermv吧】_百度贴吧
        https://tieba.baidu.com/p/5789580823

        好像还有一个方法可以用来减少延迟,那就是让主角时刻的跟着鼠标的坐标走,
        可以确保每次鼠标在点击的那一刻,主角就在那附近。
        这样的话,就算地图再大又有什么关系呢?在玩家滑动鼠标的时候,主角就已经跟过去了。
        hat-soft.top/component_notes/RPGMakerMV/html/RPGMV速查.html
        在上面这个网页中有下面一下代码,好像可以拿来实现这个。

        鼠标移动
        这个函数也比较特殊,并不是只要你移动了鼠标就能被检测到,而是说你必须一直按着并且移动才会true。这个其实是为触摸板设计的。
        TouchInput.isMoved() //是否按下鼠标左键同时移动了鼠标

        鼠标左键是否正在被按下
        TouchInput.isPressed() //鼠标左键是否正在被按下

        是否切换为鼠标左键
        TouchInput.isTriggered() //鼠标左键刚刚是否按下
        鼠标左键是否连续按下
        TouchInput.isRepeated() //鼠标左键是否连续点击,或者一直处于按下状态
        TouchInput.isLongPressed() //鼠标左键是否一直按下
        要注意的就是这个isRepeated()和isLongPressed(),这两个比较像,但是还是有很大区别的。如果你鼠标一直狂点,那么isRepeated()会返回true,但是isLongPressed()不会。而长按鼠标左键,两个都会返回true。

        鼠标左键释放
        TouchInput.isReleased() //鼠标左键是否释放
        鼠标右键点击
        TouchInput.isCancelled() //鼠标右键是否点击

        鼠标位置
        TouchInput.x
        TouchInput.y

        移动场所移动(Transfer Player)
        第一种就是直接移动,但是画面不会移动。
        1$gamePlayer.setPosition(23,24)
        第二种就是编辑器里面那个
        fadeType:
        0:黑
        1:白
        2:无
        1$gamePlayer.reserveTransfer(mapId, x, y, d, fadeType);2//d代表direction,默认写0.fadetype也写03$gamePlayer.reserveTransfer(3,33,34,0,0)
        ——另外,还在其他网站找到了下面这些脚本。——
        //让主角移动到某个位置。
        $gameTemp.setDestination(8,10);
        //将玩家瞬移到相同地图的特定坐标
        $gamePlayer.reserveTransfer($gameMap.mapId(), X, Y);
        $gamePlayer.performTransfer();

        这个障眼法不但可以是障眼法,还可以是:残影、傀儡操控、影武者、金蝉脱壳、灵魂出窍之类的东西。


        IP属地:广东4楼2025-02-09 13:05
        收起回复
          //禁止通过鼠标来移动主角
          Scene_Map.prototype.processMapTouch = function() {};
          在下面这个的帖子之类的地方抄到了上面这个脚本。
          怎么禁用角色的自动寻路/点击移动 - RPG Maker MV 讨论区 - Project1

          Scene_Map.prototype.processMapTouch = function() {
          if (TouchInput.isTriggered() || this._touchCount > 0) {
          if (TouchInput.isPressed() && !this.isAnyButtonPressed()) {
          if (this._touchCount === 0 || this._touchCount >= 15) {
          this.onMapTouch();
          }
          this._touchCount++;
          } else {
          this._touchCount = 0;
          }
          }
          };
          于是在rmmz_scenes.js搜索Scene_Map.prototype.processMapTouch就找到了上面这段的代码,就是把本来的功能代码块复制过来,再把里面的执行代码删掉,它就不会执行了。
          想要恢复点击的时候,再把这个完整的代码块拿过来覆盖掉之前的代码就好了。
          因为代码可以识别到Scene_Map.prototype.processMapTouch这个东西,谁在后面,谁就覆盖掉前面的这个东西。

          在上面这个截图的上一页和下一页,在电脑键盘的上一页和下一页分别是PageUp和PageDown,就是上下左右键上面的PG UP和PG DN这两个。
          这个事件页要并行执行,可穿透,不影响游戏的其他方面。
          除了上一页和下一页之外,还可以考虑开关、变量、代码之类的来判断。

          想要方向键也失效的话,也是这个思路。。。在rmmz_core.js搜索Input.keyMapper
          37: "left", // left arrow 向左箭头
          38: "up", // up arrow
          39: "right", // right arrow
          40: "down", // down arrow
          上面这四个一看就是上下左右键的,下这四个一看就是2468键也可以控制上下左右的。。。使用//或者是/* */来注释掉就好了,在如果按下上一页那里使用把8个都注释掉的代码块,在如果按下下一页那里使用完整的代码块就好了。
          98: "down", // numpad 2
          100: "left", // numpad 4
          102: "right", // numpad 6
          104: "up", // numpad 8

          至于想要点击图片、点击文字图片、点击事件页来触发互动的话。
          以MZ版举例,MV版或许也可以使用下面这些插件,或许有类似的插件。
          ButtonPicture.js可以点击图片触发共通事件,
          TextPicture.js可以以图片的形式来显示文字,然后结合ButtonPicture.js就可以点击文字触发共通事件。
          TouchInputDispatcherMZ.js可以通过确认刚才点击的时候,鼠标在哪个地图块的坐标,
          再通过变量来对比本事件页的坐标在来确定是不是刚才点击了自己,这样就可以通过点击本事件页来触发本事件了。


          IP属地:广东5楼2025-03-02 18:02
          回复