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

Project1

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

[有事请教] 怎么用脚本按下相应的按键

[复制链接]

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

跳转到指定楼层
1
发表于 2018-1-27 20:10:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 yang1zhi 于 2018-1-27 20:58 编辑

我看了YEP的图片公共事件插件,但是没作用啊
Game_Interpreter.prototype.triggerButton = function(args) {
  if (!args) return;
  var button = args[0].toLowerCase();
  if (button === 'cancel') button = 'escape';
  if (button === 'dash') button = 'shift';
  Input._latestButton = button;
  Input._pressedTime = 0;
};

我把
Input._latestButton = 'escape';
  Input._pressedTime = 0;
引用过来,但是什么都没有发生


至少希望能教我怎么在脚本中使用插件命令
$gameInterpreter.pluginCommand('TriggerButton','Cancel')
Game_Interpreter.pluginCommand('TriggerButton','Cancel')
都不行

Lv3.寻梦者

梦石
0
星屑
1044
在线时间
251 小时
注册时间
2016-9-2
帖子
126
2
发表于 2018-1-27 22:13:29 | 只看该作者
本帖最后由 雪在燃 于 2018-1-27 22:23 编辑

与其模拟按键,不如直接调用?
找到入口然后调用不可以么?

找到了有关于插件执行的事件的代码
JAVASCRIPT 代码复制
  1. Game_Interpreter.prototype.command356 = function() {
  2.     var args = this._params[0].split(" ");
  3.     var command = args.shift();
  4.     this.pluginCommand(command, args);
  5.     return true;
  6. };

~应该就是这个
基于需求找了找,发现它在game_map内部被new了,使用game_map里的属性来调用这个吧
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

3
 楼主| 发表于 2018-1-27 22:23:55 | 只看该作者
雪在燃 发表于 2018-1-27 22:13
与其模拟按键,不如直接调用?
找到入口然后调用不可以么?

我知道啊,不还是要用this.pluginCommand(command, args);
也就是Game_Interpreter.pluginCommand(command, args)
但是是用不出来的。
NEW一个新的Game_Interpreter后是可以执行了,但是内容没效果
使用事件的脚本就有效果。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1044
在线时间
251 小时
注册时间
2016-9-2
帖子
126
4
发表于 2018-1-27 22:30:48 | 只看该作者
yang1zhi 发表于 2018-1-27 22:23
我知道啊,不还是要用this.pluginCommand(command, args);
也就是Game_Interpreter.pluginCommand(comman ...

JAVASCRIPT 代码复制
  1. var _Game_Interpreter_pluginCommand =
  2.             Game_Interpreter.prototype.pluginCommand;
  3.     Game_Interpreter.prototype.pluginCommand = function(command, args) {
  4.         _Game_Interpreter_pluginCommand.call(this, command, args);
  5.         // 在这里插入额外的内容
  6.     };

根据插件开发的要求,所有的插件命令都是不断重载这个(真是难看的实现,不过也没其他办法了)
所以只要找到插件里对应的代码,就能够得知具体的执行过程了
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

5
 楼主| 发表于 2018-1-27 22:32:55 | 只看该作者
雪在燃 发表于 2018-1-27 22:30
var _Game_Interpreter_pluginCommand =
            Game_Interpreter.prototype.pluginCommand;
   ...

这个我也找到了,是
Input._latestButton = 'escape';
Input._pressedTime = 0;
但是必须要写在事件的脚本里才有效果。
我想和Game_Interpreter有关系吧
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1044
在线时间
251 小时
注册时间
2016-9-2
帖子
126
6
发表于 2018-1-27 22:40:46 | 只看该作者
yang1zhi 发表于 2018-1-27 22:32
这个我也找到了,是
Input._latestButton = 'escape';
Input._pressedTime = 0;

无能为力了,应该和按键的处理顺序有关系
不过直接暴力的用game_map内部的interpreter不可以吗

点评

用game_map内部的interpreter可以,但是,同样只在Scene_map才有用  发表于 2018-1-27 22:50
一样没效果。使用公共事件的脚本有效果。但是公共事件在Scene界面不起作用的  发表于 2018-1-27 22:47
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1044
在线时间
251 小时
注册时间
2016-9-2
帖子
126
7
发表于 2018-1-27 23:41:25 | 只看该作者
本帖最后由 雪在燃 于 2018-1-27 23:43 编辑
yang1zhi 发表于 2018-1-27 22:32
这个我也找到了,是
Input._latestButton = 'escape';
Input._pressedTime = 0;


查阅了半天相关代码,我觉得你这个的实现不如直接调用需要的方法来得快捷(我觉得比起按下x键,不如直接使用按下x键之后的代码,因为这个需求本身就很奇怪)
看了input一些代码,用了一个粗劣的实现
  1. Input._onKeyDown({keyCode:100});SceneManager.update();Input._onKeyUp({keyCode:100});SceneManager.update();
复制代码

这个可以实现向右走一步,具体的你得百度keycode,另外这个有时会失效(更改部分代码,好像已经不会失效了)

点评

当然,找不到按下按键的方法。那我也就只能是直接调用方法  发表于 2018-1-28 08:45
直接用方法我也知道啊。但是比起按下按键,还是要麻烦一些吧。因为还要判断是在哪个界面,是哪个窗口操作  发表于 2018-1-28 08:44

评分

参与人数 1+1 收起 理由
yang1zhi + 1 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
27484
在线时间
1535 小时
注册时间
2006-1-10
帖子
2063

开拓者第一届地图绘制大赛RTP组第四名

8
发表于 2018-1-28 19:35:56 | 只看该作者
不清楚你要的是什么样的效果
我是在事件中使用按键
参考的是这个帖子
小玩意:在地图上按键切换领队(排队式)。
http://rpg.blue/forum.php?mod=vi ... 2&fromuid=20650
(出处: Project1)

点评

这个是判断按键,不是按下按键  发表于 2018-1-28 20:29
在事件中的我用出来了。但是我想在菜单界面也能用  发表于 2018-1-28 20:27
MV帮助 http://miaowm5.github.io/RMMV-F1/日复一日,年复一年人还是保留一点自我兴趣的好啊~~~忘记过去 ,这样我就可以  放弃未来了……哭~~终于找回以前的头像了,哎~~原来我是那么的想念阿……
画地图没灵感?很烦?很无聊 【 戳 我 】一 大 波 地 图 在 等 你  \^0^/
我的游戏
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

9
 楼主| 发表于 2018-2-1 23:18:25 | 只看该作者
本帖最后由 yang1zhi 于 2018-2-2 00:44 编辑
雪在燃 发表于 2018-1-27 23:41
查阅了半天相关代码,我觉得你这个的实现不如直接调用需要的方法来得快捷(我觉得比起按下x键,不如直接 ...


我想出方便的方法了
就是这个放到UPDATE里面
  1. //右上角取消键
  2. Window_Selectable.prototype.CancelCancel = function() {
  3.         //不活动的窗口跳过
  4.         if (!this.isOpenAndActive()) {return}
  5.         //设取消键中心坐标
  6.         var x = 778
  7.         var y = 38
  8.         //当按下鼠标左键
  9.         if (this.isCancelEnabled() && TouchInput.isTriggered('ok')) {
  10.         //当鼠标X在取消键范围内
  11.         if ((TouchInput.x < x + 38 && TouchInput.x > x - 38) &&
  12.         (TouchInput.y < y + 38 && TouchInput.y > y - 38)) {
  13.                 this.processCancel();
  14.         }
  15.         }
  16.             
  17. };

复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-9 05:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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