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

Project1

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

[已经解决] 判断地图图块是否可以通行

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2590
在线时间
419 小时
注册时间
2016-2-3
帖子
759
跳转到指定楼层
1
发表于 2016-5-12 09:46:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
就比如说判断角色上方4个的图块是否可以通行,如果可以,就跳过去(类似弹簧)。
可以做的吗?
各位大神帮忙回答一下谢谢。
MV/MZ Zeros魔塔样板

原创ARPG系统火爆出售中(论坛优惠价)(内含90+功能)
-------------------------------------------------------------------
*事件党*福利!本人两年的事件研究大集合

!点击上面看*事件党*详情(内含200+收集插件)



Lv1.梦旅人

梦石
0
星屑
50
在线时间
1019 小时
注册时间
2012-4-25
帖子
799
2
发表于 2016-5-12 22:55:53 | 只看该作者
应该有类似的脚本吧
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2590
在线时间
419 小时
注册时间
2016-2-3
帖子
759
3
 楼主| 发表于 2016-5-13 22:48:10 | 只看该作者
有谁帮忙发一下。谢谢
MV/MZ Zeros魔塔样板

原创ARPG系统火爆出售中(论坛优惠价)(内含90+功能)
-------------------------------------------------------------------
*事件党*福利!本人两年的事件研究大集合

!点击上面看*事件党*详情(内含200+收集插件)



回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

內建判定通行方向的腳本代碼如下
x, y座標及其要通行的方向(d)
JAVASCRIPT 代码复制
  1. Game_CharacterBase.prototype.isMapPassable = function(x, y, d) {
  2.     var x2 = $gameMap.roundXWithDirection(x, d);
  3.     var y2 = $gameMap.roundYWithDirection(y, d);
  4.     var d2 = this.reverseDir(d);
  5.     return $gameMap.isPassable(x, y, d) && $gameMap.isPassable(x2, y2, d2);
  6. };

在你要判定通行度的地方加入以下腳本
JAVASCRIPT 代码复制
  1. var x = $gamePlayer.x;
  2. var y = $gamePlayer.y;
  3. var d = 2; //2:下 4:左 6:右 8:上
  4. var distance = 4; //距離4格
  5. var passable = false;
  6. if (d == 2) {
  7.     y += distance;
  8.     passable = $gamePlayer.isMapPassable(x, y-1, d);
  9. }
  10. else if (d == 4) {
  11.     x -= distance;
  12.     passable = $gamePlayer.isMapPassable(x+1, y, d);
  13. }   
  14. else if (d == 6) {   
  15.     x += distance;
  16.     passable = $gamePlayer.isMapPassable(x-1, y, d);
  17. }
  18. else if (d == 8) {
  19.     y -= distance;
  20.     passable = $gamePlayer.isMapPassable(x, y+1, d);
  21. }
  22. if (passable)
  23.     $gamePlayer.jump(x-$gamePlayer.x, y-$gamePlayer.y);

理論上可以用

補充一點
isMapPassable主要是判定
某一格是否可以通行到給定的方向
以及到下一格是否可以通行回來
所以要孤島式的跳躍就要從
Game_Map.prototype.checkPassage = function(x, y, bit) 下手
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2590
在线时间
419 小时
注册时间
2016-2-3
帖子
759
5
 楼主| 发表于 2016-5-14 14:58:09 | 只看该作者
本帖最后由 79160475 于 2016-5-14 15:02 编辑
r901042004 发表于 2016-5-14 14:26
內建判定通行方向的腳本代碼如下
x, y座標及其要通行的方向(d)
Game_CharacterBase.prototype.isMapPassabl ...


可是我有点看不懂,有详细的解释吗?
还有好像会出错
插不进去那么多怎么办



var x = $gamePlayer.x;
var y = $gamePlayer.y;
var d = 2; //2:下 4:左 6:右 8:上
var distance = 4; //距離4格
var passable = false;
if (d == 2) {
    y += distance;
    passable = $gamePlayer.isMapPassable(x, y-1);
}
else if (d == 4) {
    x -= distance;
    passable = $gamePlayer.isMapPassable(x+1, y);

只能到这了

点评

打不完應該是因為mv腳本的行數有限定.. 你把else if 改成 if 然後拆開成兩個腳本放看看 應該是可以成功  发表于 2016-5-14 15:16
MV/MZ Zeros魔塔样板

原创ARPG系统火爆出售中(论坛优惠价)(内含90+功能)
-------------------------------------------------------------------
*事件党*福利!本人两年的事件研究大集合

!点击上面看*事件党*详情(内含200+收集插件)



回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
53 小时
注册时间
2007-5-3
帖子
30
6
发表于 2016-5-14 15:14:57 | 只看该作者
■ 目標
▲ 輔助點


★ 玩家
以上是你舉例的情形
 8
4▲6
 2
我們可以簡單利用輔助點判定上方(8)是否可以通行
else if (d == 8) {
    y -= distance;
    passable = $gamePlayer.isMapPassable(x, y+1);
}
利用以上代碼,往上x座標不會改變,y座標會變少
所以(x, y-distance) 是目標點的座標
(x, y-distance+1)是輔助點的座標
■ (x, y-distance)
▲ (x, y-distance+1)


★ (x, y)

我代碼的部分有一些打錯
等等修改

点评

unexpected end of input 出错  发表于 2016-5-14 15:22
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2590
在线时间
419 小时
注册时间
2016-2-3
帖子
759
7
 楼主| 发表于 2016-5-14 15:34:36 | 只看该作者
本帖最后由 79160475 于 2016-5-14 15:38 编辑

內建判定通行方向的腳本代碼如下
x, y座標及其要通行的方向(d)

JAVASCRIPT 代码复制打印

6388.Game_CharacterBase.prototype.isMapPassable = function(x, y, d) {

6389.    var x2 = $gameMap.roundXWithDirection(x, d);

6390.    var y2 = $gameMap.roundYWithDirection(y, d);

6391.    var d2 = this.reverseDir(d);

6392.    return $gameMap.isPassable(x, y, d) && $gameMap.isPassable(x2, y2, d2);

6393.};


先把上面的变成插件插进去









var x = $gamePlayer.x;

02.var y = $gamePlayer.y;

03.var d = 2; //2:下 4:左 6:右 8:上

04.var distance = 4; //距離4格

05.var passable = false;

06.if (d == 2) {

07.    y += distance;

08.    passable = $gamePlayer.isMapPassable(x, y-1, d);

09.}

10.else if (d == 4) {

11.    x -= distance;

12.    passable = $gamePlayer.isMapPassable(x+1, y, d);

13.}   

14.else if (d == 6) {   

15.    x += distance;

16.    passable = $gamePlayer.isMapPassable(x-1, y, d);

17.}

18.else if (d == 8) {

19.    y -= distance;

20.    passable = $gamePlayer.isMapPassable(x, y+1, d);

21.}

22.if (passable)

23.    $gamePlayer.jump(x-$gamePlayer.x, y-$gamePlayer.y);



然后在事件中插入脚本(以上),对吧










03.var d = 2; //2:下 4:左 6:右 8:上
好像这一行怪怪的
MV/MZ Zeros魔塔样板

原创ARPG系统火爆出售中(论坛优惠价)(内含90+功能)
-------------------------------------------------------------------
*事件党*福利!本人两年的事件研究大集合

!点击上面看*事件党*详情(内含200+收集插件)



回复 支持 反对

使用道具 举报

Lv1.梦旅人

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

製作了一個小插件
使用方法:
在事件的腳本中輸入 this.jumpDistance(4);
就可以往面對的方向跳4格


JAVASCRIPT 代码复制下载
  1. Game_Interpreter.prototype.jumpDistance = function(distance) {
  2.     if (!$gamePlayer.isMoving() && $gamePlayer.canMove())
  3.     {
  4.         var x = $gamePlayer.x;
  5.         var y = $gamePlayer.y;
  6.         var d = $gamePlayer.direction();
  7.         var passable = false;
  8.         if (d == 2) {
  9.             y += distance;            
  10.         }
  11.         else if (d == 4) {
  12.             x -= distance;
  13.         }   
  14.         else if (d == 6) {   
  15.             x += distance;
  16.         }
  17.         else if (d == 8) {
  18.             y -= distance;
  19.         }
  20.         passable = $gameMap.checkPassage(x, y, 0x0f);
  21.         for (var i=1; i<=4; i++)
  22.             passable = passable || $gameMap.checkPassage(x, y, (1 << (i - 1)) & 0x0f);
  23.         if (passable && $gameMap.isValid(x, y))
  24.             $gamePlayer.jump(x-$gamePlayer.x, y-$gamePlayer.y);
  25.     }
  26. };
受限於腳本不能打太多行
所以還是做了這個比較快

点评

真是太感谢您了。  发表于 2016-5-14 19:40
改了吗  发表于 2016-5-14 19:21
改了吗  发表于 2016-5-14 19:20
應該是可以了...  发表于 2016-5-14 17:47
剛剛改了一下,我想我大概懂你要跳躍的方式了... 這個會出錯的點在於你要跳的地方四個方向都不能通行,我找看看有沒有解決方式  发表于 2016-5-14 17:04

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-24 03:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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