Project1
标题: MV的鼠标坐标判定的问题 [打印本页]
作者: roy0211 时间: 2016-5-15 22:00
标题: MV的鼠标坐标判定的问题
最近在研究MV,请问MV的鼠标的问题。
可否实现这样的效果:
比如一个手雷,使用后可以单击画面的一个位置,然后在对应位置执行一个爆炸效果。
也就是说,执行一次鼠标单击的地图某处的指令,然后再获取对应位置的坐标,
请问MV能够实现这样的效果吗?
作者: r901042004 时间: 2016-5-16 14:09
本帖最后由 r901042004 于 2016-5-16 14:13 编辑
rpg_core有以下function
TouchInput._onMouseMove = function(event) {
if (this._mousePressed) {
var x = Graphics.pageToCanvasX(event.pageX);
var y = Graphics.pageToCanvasY(event.pageY);
this._onMove(x, y);
}
};
TouchInput._onMouseMove = function(event) {
if (this._mousePressed) {
var x = Graphics.pageToCanvasX(event.pageX);
var y = Graphics.pageToCanvasY(event.pageY);
this._onMove(x, y);
}
};
左鍵點擊時會改變x y座標
所以我們只要改成
TouchInput._onMouseMove = function(event) {
var x = Graphics.pageToCanvasX(event.pageX);
var y = Graphics.pageToCanvasY(event.pageY);
if (this._mousePressed) {
this._onMove(x, y);
}
this.CanvasX = x;
this.CanvasY = y;
};
TouchInput._onMouseMove = function(event) {
var x = Graphics.pageToCanvasX(event.pageX);
var y = Graphics.pageToCanvasY(event.pageY);
if (this._mousePressed) {
this._onMove(x, y);
}
this.CanvasX = x;
this.CanvasY = y;
};
之後只要使用
TouchInput.CanvasX 或 TouchInput.CanvasY
即可調用座標(816*624的畫面座標)
要轉成Map上的絕對座標(事件X Y座標)可以用
var MapX = $gameMap.canvasToMapX(TouchInput.CanvasX);
var MapY = $gameMap.canvasToMapY(TouchInput.CanvasY);
var MapX = $gameMap.canvasToMapX(TouchInput.CanvasX);
var MapY = $gameMap.canvasToMapY(TouchInput.CanvasY);
作者: roy0211 时间: 2016-5-18 21:55
r901042004 发表于 2016-5-16 14:09
rpg_core有以下function
TouchInput._onMouseMove = function(event) {
if (this._mousePressed) {
非常抱歉,MV的新手表示没看太懂...
这个和放在js/plugins文件夹里的那些东西是一样的吗?
新人正在学习过程中,还请大大赐教。
作者: r901042004 时间: 2016-5-18 23:27
只要把9行的那個放進plugin就行了
需要存到變量的話就用事件裡的腳本輸入
$gameVariables.setValue(1, $gameMap.canvasToMapX(TouchInput.CanvasX));
$gameVariables.setValue(2, $gameMap.canvasToMapY(TouchInput.CanvasY));
就會把X, Y座標分別存到1、2號變量
作者: roy0211 时间: 2016-5-20 01:28
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,还请大大多赐教。
个人真心非常喜欢这个鼠标点击的系统
作者: r901042004 时间: 2016-5-20 13:11
本帖最后由 r901042004 于 2016-5-20 13:42 编辑
rpg_objects以下代碼主要是處理按鍵或是鼠標輸入時的移動
Game_Player.prototype.moveByInput = function() {
if (!this.isMoving() && this.canMove()) {
var direction = this.getInputDirection();
if (direction > 0) {
$gameTemp.clearDestination();
} else if ($gameTemp.isDestinationValid()){
var x = $gameTemp.destinationX();
var y = $gameTemp.destinationY();
direction = this.findDirectionTo(x, y);
}
if (direction > 0) {
this.executeMove(direction);
}
}
};
Game_Player.prototype.canMove = function() {
if ($gameMap.isEventRunning() || $gameMessage.isBusy()) {
return false;
}
if (this.isMoveRouteForcing() || this.areFollowersGathering()) {
return false;
}
if (this._vehicleGettingOn || this._vehicleGettingOff) {
return false;
}
if (this.isInVehicle() && !this.vehicle().canMove()) {
return false;
}
return true;
};
Game_Player.prototype.moveByInput = function() {
if (!this.isMoving() && this.canMove()) {
var direction = this.getInputDirection();
if (direction > 0) {
$gameTemp.clearDestination();
} else if ($gameTemp.isDestinationValid()){
var x = $gameTemp.destinationX();
var y = $gameTemp.destinationY();
direction = this.findDirectionTo(x, y);
}
if (direction > 0) {
this.executeMove(direction);
}
}
};
Game_Player.prototype.canMove = function() {
if ($gameMap.isEventRunning() || $gameMessage.isBusy()) {
return false;
}
if (this.isMoveRouteForcing() || this.areFollowersGathering()) {
return false;
}
if (this._vehicleGettingOn || this._vehicleGettingOff) {
return false;
}
if (this.isInVehicle() && !this.vehicle().canMove()) {
return false;
}
return true;
};
由 if (!this.isMoving() && this.canMove())
我們可以知道判定是否可以移動是由:玩家不在移動中 和 玩家可以移動
兩個部分組成
所以我們可以在 玩家可以移動這個地方再另外加入一項條件
就可以阻止玩家移動
將以下代碼加入plugin
Game_Player.prototype.canMove = function() {
if ($gameMap.isEventRunning() || $gameMessage.isBusy()) {
return false;
}
if (this.isMoveRouteForcing() || this.areFollowersGathering()) {
return false;
}
if (this._vehicleGettingOn || this._vehicleGettingOff) {
return false;
}
if (this.isInVehicle() && !this.vehicle().canMove()) {
return false;
}
if ($gameSwitches.value(1)) {
return false;
}
return true;
};
Game_Player.prototype.canMove = function() {
if ($gameMap.isEventRunning() || $gameMessage.isBusy()) {
return false;
}
if (this.isMoveRouteForcing() || this.areFollowersGathering()) {
return false;
}
if (this._vehicleGettingOn || this._vehicleGettingOff) {
return false;
}
if (this.isInVehicle() && !this.vehicle().canMove()) {
return false;
}
if ($gameSwitches.value(1)) {
return false;
}
return true;
};
在一號開關開啟時,玩家就無法移動
要更改開關號碼就把$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
這樣應該就能實做出來了
作者: roy0211 时间: 2016-5-20 15:20
以下是当前的设置
道具手雷,执行一次公共事件
公共事件,开启一号开关
一号开关开启后,角色无法移动,并且触发此事件,并行处理,进行条件分歧判定
一旦条件达成,收集鼠标坐标变量(8,9),并关闭开关1,开启开关2,
开关2开启,执行此事件,此事件会移动至刚刚收集到的8,9变量处,并执行一次火焰动画。
目前的问题是,如何设置条件分歧
设置为按键确定的话,完全不会生效(角色还可以自由移动。)
设置为按键移动的话,虽然角色会无法移动(也就是6楼的大大提供的插件生效),但是鼠标单击之后也没有任何反应。
请问大大应该如何来设置条件分歧呢?
作者: roy0211 时间: 2016-5-21 20:15
r901042004 发表于 2016-5-20 13:11
rpg_objects以下代碼主要是處理按鍵或是鼠標輸入時的移動
Game_Player.prototype.moveByInput = function() ...
太感谢了!已经测试成功了!
这样的话很多有趣的功能都可以实现了!
马上去耍耍看看。
再次感谢大大的帮助!!
@余烬之中
版主大大如何认可答案?
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |