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

Project1

 找回密码
 注册会员
搜索
查看: 137|回复: 7

[有事请教] class RPG::Tileset的编码中,8192、2048…等数代表着什么含义?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
155
在线时间
88 小时
注册时间
2020-1-11
帖子
53
发表于 2020-2-9 17:59:24 | 显示全部楼层 |阅读模式

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

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

x
打开VxAce的F1D的帮助文本,一个地方吸引了我的注意。(红字)
class RPG::Tileset
  def initialize
    @id = 0
    @mode = 1
    @name = ''
    @tileset_names = Array.new(9).collect{''}
    @flags = Table.new(8192)
    @flags[0] = 0x0010
    (2048..2815).each {|i| @flags = 0x000F}
    (4352..8191).each {|i| @flags = 0x000F}
    @note = ''
  end
  attr_accessor :id
  attr_accessor :mode
  attr_accessor :name
  attr_accessor :tileset_names
  attr_accessor :flags
  attr_accessor :note
end
红色标出的8129、2048~2051、4352~8191。肯定不是一拍脑袋乱设的,背后有什么特殊的含义吗?

Lv3.寻梦者

梦石
0
星屑
2653
在线时间
218 小时
注册时间
2019-10-22
帖子
359
发表于 2020-2-10 03:25:32 | 显示全部楼层
2048 = 2^11
8192 = 2^13

2^5 = 32
懂?

你不会不知道1024吧
















回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
88 小时
注册时间
2020-1-11
帖子
53
 楼主| 发表于 2020-2-10 08:56:08 | 显示全部楼层
坏数据 发表于 2020-2-10 03:25
2048 = 2^11
8192 = 2^13

引用F1的说明
flags

    标志的表格。利用一维数组储存着各类标志(Table)。

    这是图块 ID 的补充。每一位表示的内容如下。

        0x0001: 不可向下通行
        0x0002: 不可向左通行
        0x0004: 不可向右通行
        0x0008: 不可向上通行
        0x0010: 显示优先度在角色之上
        0x0020: 梯子属性
        0x0040: 流体属性
        0x0080: 柜台属性
        0x0100: 有害地形
        0x0200: 小舟无法通行
        0x0400: 大船无法通行
        0x0800: 飞艇无法着陆
        0xF000: 地形标志
________________________________________
@flags = Table.new(8192) 这句编码中, 我猜1个flags应该是对应1个32*32图块ID 的特徵标志。指向8192个图块ID。而不是8192/32=256个图块ID
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
88 小时
注册时间
2020-1-11
帖子
53
 楼主| 发表于 2020-2-10 09:11:02 | 显示全部楼层
我继续猜,
@tileset_names = Array.new(9).collect{''}
    @flags = Table.new(8192)
    @flags[0] = 0x0010
    (2048..2815).each {|i| @flags = 0x000F}
    (4352..8191).each {|i| @flags = 0x000F}
也许是用来分割A1~A5、B、C、D、E大地图分块的。
回复 支持 0 反对 1

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
88 小时
注册时间
2020-1-11
帖子
53
 楼主| 发表于 2020-2-10 09:12:31 | 显示全部楼层
alianlord 发表于 2020-2-10 09:11
我继续猜,
@tileset_names = Array.new(9).collect{''}
    @flags = Table.new(8192)

但这个猜想有一个 漏洞,就是8192/9,余数不等余0
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2653
在线时间
218 小时
注册时间
2019-10-22
帖子
359
发表于 2020-2-12 17:04:26 | 显示全部楼层
本帖最后由 坏数据 于 2020-2-12 17:06 编辑

揭秘!
经过我的潜心研究 终于解答了楼主的无聊问题

RPG::Tileset是对 【数据库】-> 【图块】里面的定义
具体的F1里面都有写

关键就是这个
   
  1. @flags = Table.new(8192)
  2. @flags[0] = 0x0010
  3. (2048..2815).each {|i| @flags = 0x000F}
  4. (4352..8191).each {|i| @flags = 0x000F}
复制代码


这里其实就是实例了一个表格(Table)
表格的相关定义 F1里面也有 : 多维数组的类,Ruby Array 类在处理大量信息时效率很差,因此使用了此类。

8192就是表格的x轴的大小  这里表格只有一维  也就是这个表格最多储存8192个数据
表格的x 对应我们数据库里面看到的图块   我们可以在上面点击  改变每个图块的地形标志(flags)
i指的就是图块ID 这里的代码是初始化了所有图块的flags为0x000F 也就是十进制的15  意义不明

图块上的地形标志 正是储存在这个数组当然  游戏里会读取这个表格 来判断地形

我们知道 图块是分为 A1-A5 以及BCDE 一共5页的
2048 - 2815 里面 一共存在着768个值 这里存放的是A1-A5也就是A页的每一个图块的地形标志  上限是768个图块
4352 - 8191 里面 一共存在着3840个值 这里存放的是BCDE页的每一个图块的地形标志  上限是3840个图块

至于为什么从2048开始存  以及中间为何隔开那么多  我就不懂了  
















回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
88 小时
注册时间
2020-1-11
帖子
53
 楼主| 发表于 2020-2-12 19:12:56 | 显示全部楼层
坏数据 发表于 2020-2-12 17:04
揭秘!
经过我的潜心研究 终于解答了楼主的无聊问题

我对这个问题感兴趣,是因为牵扯到引入别的地图块的素材且数量较多时,有没有必要把原来系统的地图块保留下来。
也就是想摸猜ace默认的各类地图块的数量上限到底多少?
以你的解析判断,A类的地图块非常吃紧(因为还要分五部份),而B'、C、D、E类大致每种的上限是960个。以横8格来排列,可铺成120列。如果拼成512象素的图片(16横格),长度有1920(60直格)
512*1920,就是最大的地图块上限甲吗?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
88 小时
注册时间
2020-1-11
帖子
53
 楼主| 发表于 2020-2-12 19:18:38 | 显示全部楼层
脑洞又来了,把A1~A5的768都设成自动图块+流动图块,ACE不知道会不会爆炸?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2020-5-26 06:22

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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