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

Project1

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

[已经解决] 【求助】请问怎么让角色瞬移?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
68 小时
注册时间
2014-7-8
帖子
50
跳转到指定楼层
1
发表于 2016-4-5 22:49:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 Stolf 于 2016-4-5 22:50 编辑

我想实现的效果是让玩家用鼠标点一下某个图块,然后角色直接瞬间移动到那个图块。
我试过在事件里把速度调成最大,可是移动时间还是能够感觉的出来,达不到瞬移的要求。
又试着改脚本,可是如果把脚本里的角色速度改成>6,就会出BUG,无论点哪里都只能“点一下,走一格”。。要按住鼠标才能正常移动。。。

Lv1.梦旅人

梦石
0
星屑
153
在线时间
723 小时
注册时间
2014-4-10
帖子
129
2
发表于 2016-4-5 23:25:08 | 只看该作者
场所移动- -

点评

TouchInput._x和TouchInput._y。虽然我不觉得这样就能解决这个问题wwww  发表于 2016-4-5 23:44
那要怎么判断玩家鼠标点击的图块的坐标呢?场景移动要提供坐标吧?  发表于 2016-4-5 23:32
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
68 小时
注册时间
2014-7-8
帖子
50
3
 楼主| 发表于 2016-4-5 23:56:22 | 只看该作者
@andrewx
在rpg_object里搜了下TouchInput
  1. Game_Player.prototype.triggerTouchActionD1 = function(x1, y1) {
  2.     if ($gameMap.airship().pos(x1, y1)) {
  3.         if (TouchInput.isTriggered() && this.getOnOffVehicle()) {
  4.             return true;
  5.         }
  6.     }
  7.     this.checkEventTriggerHere([0]);
  8.     return $gameMap.setupStartingEvent();
  9. };

  10. Game_Player.prototype.triggerTouchActionD2 = function(x2, y2) {
  11.     if ($gameMap.boat().pos(x2, y2) || $gameMap.ship().pos(x2, y2)) {
  12.         if (TouchInput.isTriggered() && this.getOnVehicle()) {
  13.             return true;
  14.         }
  15.     }
  16.     if (this.isInBoat() || this.isInShip()) {
  17.         if (TouchInput.isTriggered() && this.getOffVehicle()) {
  18.             return true;
  19.         }
  20.     }
  21.     this.checkEventTriggerThere([0,1,2]);
  22.     return $gameMap.setupStartingEvent();
  23. };

  24. Game_Player.prototype.triggerTouchActionD3 = function(x2, y2) {
  25.     if ($gameMap.isCounter(x2, y2)) {
  26.         this.checkEventTriggerThere([0,1,2]);
  27.     }
  28.     return $gameMap.setupStartingEvent();
  29. };
复制代码
好像都是通过提供xy坐标来实现一些功能。。并不能获取到当前玩家点击的坐标啊。。?

点评

TouchInput是定义在core里的静态类,_x和_y就是点击/触摸的坐标  发表于 2016-4-6 16:30
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
329
在线时间
890 小时
注册时间
2009-10-12
帖子
1829
4
发表于 2016-4-6 04:29:38 | 只看该作者
保存为 xxx.js 放到plugin 文件夹下并在 rm 中开启。
  1. Scene_Map.prototype.processMapTouch = function() {
  2.         if (TouchInput.isTriggered() || this._touchCount > 0) {
  3.             if (TouchInput.isPressed()) {
  4.                 if (this._touchCount === 0 || this._touchCount >= 15) {
  5.                     var x = $gameMap.canvasToMapX(TouchInput.x);
  6.                     var y = $gameMap.canvasToMapY(TouchInput.y);
  7.                     if ($gameSwitches.value(1)) {
  8.                         $gamePlayer.locate(x, y);
  9.                     } else {
  10.                         $gameTemp.setDestination(x, y);
  11.                     }
  12.                 }
  13.                 this._touchCount++;
  14.             } else {
  15.                 this._touchCount = 0;
  16.             }
  17.         }
  18.     };
复制代码
注意 其中有一行是:
if ($gameSwitches.value(1))
把1改成任意你想要的开关id即可。这样开关 关闭时玩家会走到触摸点,开启时瞬移
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
68 小时
注册时间
2014-7-8
帖子
50
5
 楼主| 发表于 2016-4-6 06:22:10 | 只看该作者
本帖最后由 Stolf 于 2016-4-6 06:48 编辑
日月星辰 发表于 2016-4-6 04:29
保存为 xxx.js 放到plugin 文件夹下并在 rm 中开启。注意 其中有一行是:
if ($gameSwitches.value(1))
把 ...


非常感谢!!我还有一个问题想请教。。
如果是正常的点击然后角色走到触摸点,就会触发[移动到的位置]的事件(触发条件:操作按钮),
可是瞬移的话就要先点击目标位置,瞬移到那里之后,在按一个确认键,才能触发。。我想在瞬移之后可以直接触发当前所在位置的事件。
也就是说,正常情况是点击,然后角色移动,然后直接触发[移动到的坐标]上的事件。
实现瞬移之后,要先点击,角色瞬移到指定位置,然后再按一下确认键才能触发事件。
我想实现的是,点击之后,角色瞬移到指定位置的同时,直接触发[移动到的坐标]上的事件。
请问这样的话要怎么实现?谢谢!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
329
在线时间
890 小时
注册时间
2009-10-12
帖子
1829
6
发表于 2016-4-6 07:15:54 | 只看该作者
本帖最后由 日月星辰 于 2016-4-5 17:17 编辑
Stolf 发表于 2016-4-5 16:22
非常感谢!!我还有一个问题想请教。。
如果是正常的点击然后角色走到触摸点,就会触发[移动到的位置]的 ...


把那个事件设置为并行处理

事件页:
条件分歧 角色 x == 事件 x -1
   条件分歧 角色 y == 事件 y

嵌套两层。 如果事件四个方向都能被触发,可能就要写四个这样的(对应 x+1,y+1,x-1,y-1)这是纯事件做法

应该还有其他奇技淫巧 如果事件是固定的那周围一圈涂上区域 这样只要判断角色所在格子的区域 id 也行
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
68 小时
注册时间
2014-7-8
帖子
50
7
 楼主| 发表于 2016-4-6 11:42:30 | 只看该作者
本帖最后由 Stolf 于 2016-4-6 12:21 编辑

@日月星辰
我自己尝试了一种方法解决了。。
JAVASCRIPT 代码复制
  1. Scene_Map.prototype.processMapTouch = function ()
  2. {
  3.     if (TouchInput.isTriggered() || this._touchCount > 0)
  4.     {
  5.         if (TouchInput.isPressed())
  6.         {
  7.             if (this._touchCount === 0 || this._touchCount >= 15)
  8.             {
  9.                 var x = $gameMap.canvasToMapX(TouchInput.x);
  10.                 var y = $gameMap.canvasToMapY(TouchInput.y);
  11.                 var Width = $gameVariables.value(1);
  12.                 var Height = $gameVariables.value(2);
  13.                 var dir = [[0, 1], [1, 0], [-1, 0], [0, -1]];
  14.                 for (var k = 0; k < 4; k++)
  15.                 {
  16.                     var tX = x + dir[k][0];
  17.                     var tY = y + dir[k][1];
  18.                     if (tX >= 0 && tX < Width && tY >= 0 && tY < Height)
  19.                     {
  20.                         $gamePlayer.locate(tX, tY);
  21.                         $gameTemp.setDestination(x, y);
  22.                         break;
  23.                     }
  24.                 }
  25.             }
  26.             this._touchCount++;
  27.         }
  28.         else
  29.         {
  30.             this._touchCount = 0;
  31.         }
  32.     }
  33. };

评分

参与人数 1星屑 +1 收起 理由
日月星辰 + 1 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-21 12:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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