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

Project1

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

[已经解决] 关于VA中的通行度判断,通行检查是怎么判断的?

[复制链接]

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10074
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

跳转到指定楼层
1
发表于 2014-7-5 01:14:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在VA中的检查通行度是这样的
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 通行检查
  3.   #     bit : 判断通行禁止与否的字节(请参照二进制运算)
  4.   #--------------------------------------------------------------------------
  5.   def check_passage(x, y, bit)
  6.     all_tiles(x, y).each do |tile_id|
  7.       flag = tileset.flags[tile_id]
  8.       next if flag & 0x10 != 0            # [☆] : 不影响通行
  9.       return true  if flag & bit == 0     # [○] : 可以通行
  10.       return false if flag & bit == bit   # [×] : 不能通行
  11.     end
  12.     return false                          # 不能通行
  13.   end

然后对于角色和舟的通行度是这样的
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 判定普通角色是否可以通行
  3.   #     d : 方向(2,4,6,8)
  4.   #    判断该位置的图块指定方向的通行度。
  5.   #--------------------------------------------------------------------------
  6.   def passable?(x, y, d)
  7.     check_passage(x, y, (1 << (d / 2 - 1)) & 0x0f)
  8.   end
  9.   #--------------------------------------------------------------------------
  10.   # ● 判定小舟是否可以通行
  11.   #--------------------------------------------------------------------------
  12.   def boat_passable?(x, y)
  13.     check_passage(x, y, 0x0002)  #我改过,这样可以在陆地上行走和角色一样的。
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 判定大船是否可以通行
  17.   #--------------------------------------------------------------------------
  18.   def ship_passable?(x, y)
  19.     check_passage(x, y, 0x0400)
  20.   end

然后我要的效果是“小舟”可以在陆地上行走,并可以穿过水域(最好可以用区域或者地形标志判定?)
随便说明一下那个二进制什么的。看着不是很懂

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2014-7-5 06:33:02 | 只看该作者
本帖最后由 taroxd 于 2014-7-5 07:01 编辑

我们打开F1,在 RPG::TileSet 找到了这样一段说明:
通行度设定。利用一维数组储存着通行度设定(Table 表格类 )。

用这些标识标注可通行状态,其含义如下所示:

0x0001: 不可向下通行
0x0002: 不可向左通行
0x0004: 不可向右通行
0x0008: 不可向上通行
0x0010: 显示优先度在角色之上
0x0020: 梯子
0x0040: 草木繁茂处标记
0x0080: 柜台标记
0x0100: 有害地形
0x0200: 小船无法穿越
0x0400: 大船无法穿越
0x0800: 飞艇无法着陆
0xF000: 地形标志
尽管这与C语言中的位操作有着种种相似之处,但本手册中并不讨论这种东西。我们更建议您在互联网上自行搜索有关十六进制位操作的信息。


分析 check_passage 可知,当位运算结果为 0 时,是可以通行的。

注意到水域通常都是不可通行的,所以我们可以尝试这么做:

RUBY 代码复制
  1. class Game_Map
  2.   #--------------------------------------------------------------------------
  3.   # ● 判定小舟是否可以通行
  4.   #--------------------------------------------------------------------------
  5.   def boat_passable?(x, y)
  6.     # 四方向皆可通行,通常为陆地   或者 小舟可以通行,通常为水域
  7.     check_passage(x, y, 0x000f) || check_passage(x, y, 0x0200)
  8.   end
  9. end


什么?你说要指定方向?那就多加一个参数:方向d吧,和passable?一样。然后在Game_Player调用它的位置(就1个)传入方向的参数。
注意到 0xF000: 地形标志 这一行,说明地形标志也可以拿来判断通行度。如果你愿意的话,这也是个可行的办法。

如果要加方向,两种方式随便你了

=================================================================

至于二进制的位运算,我也不想解释,就看这里吧:http://baike.baidu.com/view/379209.htm

Ruby中的Fixnum定义了&(and运算)、|(or运算)、^(xor运算)、~(not运算)、<<(左移)、>>(右移)这些运算符。意义参考上面的网址。

评分

参与人数 1梦石 +2 收起 理由
熊喵酱 + 2 不行這回答太詳細了我要發兩張.

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10074
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

3
 楼主| 发表于 2014-7-5 13:37:11 | 只看该作者
taroxd 发表于 2014-7-5 06:33
我们打开F1,在 RPG::TileSet 找到了这样一段说明:

嗯,我懂了。@熊喵酱 结贴发卡

点评

随意啦·  发表于 2014-7-6 06:16
真的要推荐问答嗎?  发表于 2014-7-6 02:19
我会想念你的……  发表于 2014-7-5 15:17
我要回归深山了,  发表于 2014-7-5 15:10
2333  发表于 2014-7-5 13:42
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-13 10:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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