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

Project1

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

[已经解决] MV的鼠标坐标判定的问题

[复制链接]

Lv1.梦旅人

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

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

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

x
最近在研究MV,请问MV的鼠标的问题。
可否实现这样的效果:
比如一个手雷,使用后可以单击画面的一个位置,然后在对应位置执行一个爆炸效果。
也就是说,执行一次鼠标单击的地图某处的指令,然后再获取对应位置的坐标,
请问MV能够实现这样的效果吗?

Lv1.梦旅人

梦石
0
星屑
50
在线时间
53 小时
注册时间
2007-5-3
帖子
30
2
发表于 2016-5-16 14:09:27 | 只看该作者
本帖最后由 r901042004 于 2016-5-16 14:13 编辑

rpg_core有以下function
JAVASCRIPT 代码复制
  1. TouchInput._onMouseMove = function(event) {
  2.     if (this._mousePressed) {
  3.         var x = Graphics.pageToCanvasX(event.pageX);
  4.         var y = Graphics.pageToCanvasY(event.pageY);
  5.         this._onMove(x, y);
  6.     }
  7. };

左鍵點擊時會改變x y座標
所以我們只要改成
JAVASCRIPT 代码复制
  1. TouchInput._onMouseMove = function(event) {
  2.     var x = Graphics.pageToCanvasX(event.pageX);
  3.     var y = Graphics.pageToCanvasY(event.pageY);
  4.     if (this._mousePressed) {
  5.         this._onMove(x, y);
  6.     }
  7.     this.CanvasX = x;
  8.     this.CanvasY = y;
  9. };

之後只要使用
TouchInput.CanvasX 或 TouchInput.CanvasY
即可調用座標(816*624的畫面座標)
要轉成Map上的絕對座標(事件X Y座標)可以用
JAVASCRIPT 代码复制
  1. var MapX = $gameMap.canvasToMapX(TouchInput.CanvasX);
  2. var MapY = $gameMap.canvasToMapY(TouchInput.CanvasY);
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
53
在线时间
50 小时
注册时间
2011-6-4
帖子
42
3
 楼主| 发表于 2016-5-18 21:55:34 | 只看该作者
r901042004 发表于 2016-5-16 14:09
rpg_core有以下function
TouchInput._onMouseMove = function(event) {
    if (this._mousePressed) {

非常抱歉,MV的新手表示没看太懂...
这个和放在js/plugins文件夹里的那些东西是一样的吗?
新人正在学习过程中,还请大大赐教。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
53 小时
注册时间
2007-5-3
帖子
30
4
发表于 2016-5-18 23:27:22 | 只看该作者
只要把9行的那個放進plugin就行了
需要存到變量的話就用事件裡的腳本輸入
$gameVariables.setValue(1, $gameMap.canvasToMapX(TouchInput.CanvasX));
$gameVariables.setValue(2, $gameMap.canvasToMapY(TouchInput.CanvasY));
就會把X, Y座標分別存到1、2號變量
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
53
在线时间
50 小时
注册时间
2011-6-4
帖子
42
5
 楼主| 发表于 2016-5-20 01:28:40 | 只看该作者
r901042004 发表于 2016-5-18 23:27
只要把9行的那個放進plugin就行了
需要存到變量的話就用事件裡的腳本輸入
$gameVariables.setValue(1, $gam ...

非常感谢大大!
目前我将那个9行的指令放进了plugin中,
现在已经了解,执行了
$gameVariables.setValue(1, $gameMap.canvasToMapX(TouchInput.CanvasX));
$gameVariables.setValue(2, $gameMap.canvasToMapY(TouchInput.CanvasY));
之后,上一次鼠标单击过的坐标就会保存至1,2变量。

那么现在剩下的问题就是如何执行一次鼠标单击地图任意点的事件呢?

具体来说:

选择道具→
角色静止,然后执行一次点击地图的事件→
将鼠标XY坐标存入变量→
对应坐标处执行一次爆炸动画→
事件终了,角色回归移动

希望能够实现这样的过程,后面似乎都没什么问题的样子,
如果执行一次点击地图的事件呢(主要是点击完地图会自动判定完点击地图,并继续执行下一个事件这样)
新人还玩不转MV,还请大大多赐教。
个人真心非常喜欢这个鼠标点击的系统

点评

其實不用單擊座標就會存到變量裡了,你可以用條件分歧內的按鍵輸入試試看,實作的部分我再另外給些意見  发表于 2016-5-20 12:56
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
53 小时
注册时间
2007-5-3
帖子
30
6
发表于 2016-5-20 13:11:17 | 只看该作者
本帖最后由 r901042004 于 2016-5-20 13:42 编辑

rpg_objects以下代碼主要是處理按鍵或是鼠標輸入時的移動
JAVASCRIPT 代码复制
  1. Game_Player.prototype.moveByInput = function() {
  2.     if (!this.isMoving() && this.canMove()) {
  3.         var direction = this.getInputDirection();
  4.         if (direction > 0) {
  5.             $gameTemp.clearDestination();
  6.         } else if ($gameTemp.isDestinationValid()){
  7.             var x = $gameTemp.destinationX();
  8.             var y = $gameTemp.destinationY();
  9.             direction = this.findDirectionTo(x, y);
  10.         }
  11.         if (direction > 0) {
  12.             this.executeMove(direction);
  13.         }
  14.     }
  15. };
  16.  
  17. Game_Player.prototype.canMove = function() {
  18.     if ($gameMap.isEventRunning() || $gameMessage.isBusy()) {
  19.         return false;
  20.     }
  21.     if (this.isMoveRouteForcing() || this.areFollowersGathering()) {
  22.         return false;
  23.     }
  24.     if (this._vehicleGettingOn || this._vehicleGettingOff) {
  25.         return false;
  26.     }
  27.     if (this.isInVehicle() && !this.vehicle().canMove()) {
  28.         return false;
  29.     }
  30.     return true;
  31. };

由 if (!this.isMoving() && this.canMove())
我們可以知道判定是否可以移動是由:玩家不在移動中 和 玩家可以移動
兩個部分組成
所以我們可以在 玩家可以移動這個地方再另外加入一項條件
就可以阻止玩家移動
將以下代碼加入plugin
JAVASCRIPT 代码复制
  1. Game_Player.prototype.canMove = function() {
  2.     if ($gameMap.isEventRunning() || $gameMessage.isBusy()) {
  3.         return false;
  4.     }
  5.     if (this.isMoveRouteForcing() || this.areFollowersGathering()) {
  6.         return false;
  7.     }
  8.     if (this._vehicleGettingOn || this._vehicleGettingOff) {
  9.         return false;
  10.     }
  11.     if (this.isInVehicle() && !this.vehicle().canMove()) {
  12.         return false;
  13.     }
  14.     if ($gameSwitches.value(1)) {
  15.         return false;
  16.     }
  17.     return true;
  18. };

在一號開關開啟時,玩家就無法移動
要更改開關號碼就把$gameSwitches.value(1)的1改成其他開關

要判斷是否單擊就比較簡單了
在條件分歧裡的腳本輸入
TouchInput.isTriggered()
就會自動判斷有沒有單擊

建造一個物品呼叫公共事件 把開關1號打開
在每張地圖設置一個事件
圖像:空白
條件:開關1號
觸發:並行處理
內容打上
條件分歧 TouchInput.isTriggered()
  $gameVariables.setValue(1, $gameMap.canvasToMapX(TouchInput.CanvasX));
  $gameVariables.setValue(2, $gameMap.canvasToMapY(TouchInput.CanvasY));
  場所移動: X:變量1 Y:變量2
  執行爆炸動畫
  開關1號OFF
之外的情形
  條件分歧 按鍵「取消」按下
    爆炸物品+1
    開關1號OFF

這樣應該就能實做出來了

评分

参与人数 1梦石 +2 收起 理由
余烬之中 + 2 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
53
在线时间
50 小时
注册时间
2011-6-4
帖子
42
7
 楼主| 发表于 2016-5-20 15:20:43 | 只看该作者
以下是当前的设置


道具手雷,执行一次公共事件


公共事件,开启一号开关


一号开关开启后,角色无法移动,并且触发此事件,并行处理,进行条件分歧判定
一旦条件达成,收集鼠标坐标变量(8,9),并关闭开关1,开启开关2,


开关2开启,执行此事件,此事件会移动至刚刚收集到的8,9变量处,并执行一次火焰动画。


目前的问题是,如何设置条件分歧
设置为按键确定的话,完全不会生效(角色还可以自由移动。)
设置为按键移动的话,虽然角色会无法移动(也就是6楼的大大提供的插件生效),但是鼠标单击之后也没有任何反应。

请问大大应该如何来设置条件分歧呢?


点评

事件010:觸發器要設成自動執行,事件009:條件分歧:按鈕「移動」被按下要改成TouchInput.isTriggered(),(條件分歧的最後一頁有腳本可以輸入)  发表于 2016-5-21 14:02
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
53
在线时间
50 小时
注册时间
2011-6-4
帖子
42
8
 楼主| 发表于 2016-5-21 20:15:30 | 只看该作者
r901042004 发表于 2016-5-20 13:11
rpg_objects以下代碼主要是處理按鍵或是鼠標輸入時的移動
Game_Player.prototype.moveByInput = function() ...

太感谢了!已经测试成功了!
这样的话很多有趣的功能都可以实现了!
马上去耍耍看看。
再次感谢大大的帮助!!

@余烬之中

版主大大如何认可答案?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-24 04:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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