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

Project1

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

[已经解决] 如何修改地图上一个点的通行状况

[复制链接]

Lv2.观梦者

梦石
0
星屑
439
在线时间
38 小时
注册时间
2018-5-3
帖子
18
跳转到指定楼层
1
发表于 2019-1-5 16:04:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
如题,如何得到和修改地图上一个点的通行状况?
这个点可能是一个不能通行的原件,上面可能还有一个事件。而且,我要能把他改回来。
最好是用脚本的方法,告诉我方法就可以,谢谢!

Lv4.逐梦者

梦石
0
星屑
19503
在线时间
3113 小时
注册时间
2013-1-11
帖子
1292
7
发表于 2019-1-7 00:16:57 | 只看该作者
本帖最后由 张咚咚 于 2019-1-7 00:19 编辑
hotzhl3 发表于 2019-1-7 00:03
3楼大神提供的代码只对地图元件的通行状况生效,如果要对事件也同时生效
要在Game_Character 1的139行添 ...


回复的太快,解决了就好。。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
439
在线时间
38 小时
注册时间
2018-5-3
帖子
18
6
 楼主| 发表于 2019-1-7 00:03:04 | 只看该作者
张咚咚 发表于 2019-1-5 20:45
1.将下面脚本插到main之前。

2.下面脚本插入到【Game_Map】的第212行下面。

3楼大神提供的代码只对地图元件的通行状况生效,如果要对事件也同时生效
要在Game_Character 1的139行添加如下代码:

pass = $game_system.isPassable?(@map_id, new_x, new_y)
      return pass unless pass.nil?

passable?函数里一堆乱七八糟的判定我到现在也看不懂。
我实验结果时如果passable?(x,y,d)为true表示从这个点向d方向可通行,但反之却未必。
所以要修改 new_x, new_y 来让我进入这个点。
这个函数目前够我用了,但我觉得还是会有bug.欢迎指正吧……
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
439
在线时间
38 小时
注册时间
2018-5-3
帖子
18
5
 楼主| 发表于 2019-1-5 22:02:09 | 只看该作者
张咚咚 发表于 2019-1-5 20:45
1.将下面脚本插到main之前。

2.下面脚本插入到【Game_Map】的第212行下面。

哇!太贴心了,感谢大佬!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
439
在线时间
38 小时
注册时间
2018-5-3
帖子
18
4
 楼主| 发表于 2019-1-5 20:50:09 | 只看该作者
灯笼菜刀王 发表于 2019-1-5 18:08
在game map 脚本里找到定义通行的方法

def passable?(x, y, d, self_event = nil)

谢谢大佬!
想问一下Game_Map 里的passable 跟 Game_Character里的passable 有什么区别,分别是判定什么的?

点评

一个是地图的通行,一个是character(包括事件和角色)的通行。你可以看一下两者都在判断些什么。  发表于 2019-1-5 20:52
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
19503
在线时间
3113 小时
注册时间
2013-1-11
帖子
1292
3
发表于 2019-1-5 20:45:00 | 只看该作者
本帖最后由 张咚咚 于 2019-1-5 20:48 编辑

1.将下面脚本插到main之前。
  1. class Game_System
  2.   attr_accessor :global
  3.   def pass_set(id, x, y, passable)
  4.     @global ||= {}
  5.     @global[id] ||= {}
  6.     @global[id][[x, y]] = passable
  7.     true # 防止XP事件末尾返回BUG
  8.   end
  9.   def pass_remove(id, x, y)
  10.     @global ||= {}
  11.     @global[id] ||= {}
  12.     @global[id].delete [x, y]
  13.     true # 防止XP事件末尾返回BUG
  14.   end
  15.   def isPassable?(id, x, y)
  16.     return ((@global || {})[id] || {})[[x, y]]
  17.   end
  18. end
复制代码


2.下面脚本插入到【Game_Map】的第212行下面。
  1.     pass = $game_system.isPassable?(@map_id, x, y)
  2.     return pass unless pass.nil?
复制代码


3.事件调用。
$game_system.pass_set(1, 9, 5, true) # 1号地图的9,5位置可通行。
$game_system.pass_set(1, 9, 5, false) # 1号地图的9,5位置不可通行。
$game_system.pass_remove(1, 9, 5) # 删除1号地图的9,5位置的通行设置(还原为默认)。

评分

参与人数 1星屑 +100 +1 收起 理由
RyanBern + 100 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39034
在线时间
5725 小时
注册时间
2006-11-10
帖子
6622
2
发表于 2019-1-5 18:08:13 | 只看该作者
在game map 脚本里找到定义通行的方法

def passable?(x, y, d, self_event = nil)

然后,在下面,根据你要的条件, 让它的值返回真就可以了

比如说, 当1号开关打开的时候, X10,Y10的这个格子就必定可以通行

if $game_switches[1] and x == 10 and y == 10
  return true
end

比如说, 1号角色学会 2号技能的时候, 在3号地形标志的地方都可以通行

if $game_actors[1].skill_learn?(2) and $game_player.terrain_tag == 3
  return true
end

只要分歧出条件, 就可以随意改变通行度了

点评

{:4_124:}  发表于 2019-1-8 09:52
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 17:42

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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