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

Project1

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

[已经解决] 怎么添加定义一个新的可通行判定

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
231 小时
注册时间
2007-12-17
帖子
541
跳转到指定楼层
发表于 2014-11-13 09:31:37 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
添加定义一个passable1?的可通行判定,当角色或事件被1~14号事件挡住时,不算作不可通行,只有被障碍物或15号以上事件挡住,才算作不可通行
比如当11号事件右边有一个2号事件,用$game_map.events[11].passable1?($game_map.events[11].x, $game_map.events[11].y, 6)脚本判断出来的结果依然是可通行的

评分

参与人数 1星屑 +35 收起 理由
︶ㄣ牛排ぶ + 35 手动认可奖励

查看全部评分

Lv1.梦旅人

梦石
0
星屑
155
在线时间
332 小时
注册时间
2013-7-6
帖子
356
4
发表于 2014-11-23 12:43:04 | 只看该作者
  1. def passable1?(x, y, d)
  2.     # 求得新的坐标
  3.     new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0)
  4.     new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0)
  5.     # 坐标在地图以外的情况
  6.     unless $game_map.valid?(new_x, new_y)
  7.       # 不能通行
  8.       return false
  9.     end
  10.     # 穿透是 ON 的情况下
  11.     if @through
  12.       # 可以通行
  13.       return true
  14.     end
  15.     # 移动者的元件无法来到指定方向的情况下
  16.     unless $game_map.passable?(x, y, d, self)
  17.       # 通行不可
  18.       return false
  19.     end
  20.     # 从指定方向不能进入到移动处的元件的情况下
  21.     unless $game_map.passable?(new_x, new_y, 10 - d)
  22.       # 不能通行
  23.       return false
  24.     end
  25.     # 循环全部事件
  26.     for event in $game_map.events.values
  27.       # 事件坐标于移动目标坐标一致的情况下
  28.       if event.id < 14
  29.         return true
  30.       end
  31.       if event.x == new_x and event.y == new_y
  32.         # 穿透为 ON
  33.         unless event.through
  34.           # 自己就是事件的情况下
  35.           if self != $game_player
  36.             # 不能通行
  37.             return false
  38.           end
  39.           # 自己是主角、对方的图形是角色的情况下
  40.           if event.character_name != ""
  41.             # 不能通行
  42.             return false
  43.           end
  44.         end
  45.       end
  46.     end
复制代码
Game_Character中加入方法,没测试。

评分

参与人数 1梦石 +1 收起 理由
︶ㄣ牛排ぶ + 1 认可答案

查看全部评分

偶是熬夜学编程的傻子
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33466
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

3
发表于 2014-11-13 16:52:26 | 只看该作者
在默认脚本 Game_Character 1 第 156 行: if self != $game_player
后面加一句,改成:if self != $game_player and self.id > 14     试试。
这个瞎蒙的,没试过。反正至少说可以从那里想办法。

点评

加了之后用$game_map.events[11].passable1?($game_map.events[11].x, $game_map.events[11].y, 6)判断出错,在Game_Map脚本也复制了相应部分才没出错,但是11号事件右边如果有事件挡着,判断出来还是不可通行   发表于 2014-11-13 21:53
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
231 小时
注册时间
2007-12-17
帖子
541
2
 楼主| 发表于 2014-11-13 13:21:11 | 只看该作者
RyanBern 发表于 2014-11-13 12:21
如果要实现这个效果的话,对1-14号事件勾选[允许穿透]。可能会有些麻烦。

如果1~14号事件不能允许穿透呢?

点评

不勾选[允许穿透]的话,一般会被判定为不可通行。  发表于 2014-11-13 14:33
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

1
发表于 2014-11-13 12:21:42 | 只看该作者
如果要实现这个效果的话,对1-14号事件勾选[允许穿透]。可能会有些麻烦。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-23 04:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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