Project1

标题: 这段脚本为什么不执行? [打印本页]

作者: 质数游戏    时间: 2018-9-30 21:07
标题: 这段脚本为什么不执行?
module RPG
  class Map
    def initialize(width, height)
      @tileset_id = 1
      @width = width
      @height = height
      @autoplay_bgm = false
      @bgm = RPG::AudioFile.new
      @autoplay_bgs = false
      @bgs = RPG::AudioFile.new("", 80)
      @encounter_list = []
      @encounter_step = 30
      @data = Table.new(width, height, 3)
      @events = {}
    end
    attr_accessor :tileset_id
    attr_accessor :width
    attr_accessor :height
    attr_accessor :autoplay_bgm
    attr_accessor :bgm
    attr_accessor :autoplay_bgs
    attr_accessor :bgs
    attr_accessor :encounter_list
    attr_accessor :encounter_step
    attr_accessor :data
    attr_accessor :events
  end
end

这是F1里面的定义,我想修改其中的一些东西,但我就算不修改,放在脚本库里他也不执行,从def initialize(width, height)那一行开始就不执行了。
作者: 质数游戏    时间: 2018-9-30 21:31
有偿,20
作者: 质数游戏    时间: 2018-10-1 05:42
等价问题:现在的图层总共只有3层,问题是怎么把它改成不止3层,我估计是 @data = Table.new(width, height, 3)这一行脚本,但是不知道怎样让他执行
作者: 张咚咚    时间: 2018-10-1 08:13
本帖最后由 张咚咚 于 2018-10-1 08:14 编辑

这个不是在脚本里实时创建,是编辑器保存的。
你要想改可以在Game_Map的50行下面操作@map对象
作者: fux2    时间: 2018-10-1 09:23
不是改了数据就会读更多层的,tilemap的内部实现就只读3层。
作者: 质数游戏    时间: 2018-10-1 09:51
fux2 发表于 2018-9-30 17:23
不是改了数据就会读更多层的,tilemap的内部实现就只读3层。

应该可以实现3层以上的吧,变量都可以突破5000
我感觉是某一个类,对象限制了这个3层。但不知道它在哪。
作者: 质数游戏    时间: 2018-10-1 09:54
张咚咚 发表于 2018-9-30 16:13
这个不是在脚本里实时创建,是编辑器保存的。
你要想改可以在Game_Map的50行下面操作@map对象 ...

那具体怎么改呢,要不要加supers什么的,这应该是在修改一个类或者一个对象吧?
作者: fux2    时间: 2018-10-1 11:46
质数游戏 发表于 2018-10-1 09:51
应该可以实现3层以上的吧,变量都可以突破5000
我感觉是某一个类,对象限制了这个3层。但不知道它在哪。 ...

我觉得……你对RM还并不是太了解。
不是什么都想当然行得通的。
作者: huajinyu123    时间: 2018-10-1 14:26
要不,先定义再执行这段脚本?
作者: 质数游戏    时间: 2018-10-1 22:23
huajinyu123 发表于 2018-9-30 22:26
要不,先定义再执行这段脚本?

如何定义呢?直接复制帮助里的定义到脚本库里它不执行
作者: RyanBern    时间: 2018-10-5 10:11
请仔细看 4 楼和 5 楼的回复。如果还是不清楚我总结一下。

1. 几乎所有 module RPG 下的东西都不是在游戏运行时调用的 initialize,而是在使用 RMXP 编辑数据库/地图的时候已经初始化完毕并且写到了数据库文件 rxdata 里。因此编辑器只认识这些字段的内容,比如你这里 RPG::Map 里定义了地图数据就是三层,地图编辑器就只使用其中的三层数据。当然你可以定义更多图层,但它们只是多出来的数据,编辑器不会去修改它们。就算随后进行手动修改,负责渲染地图的 Tilemap 类也不会去渲染它。
2. Tilemap 是为数不多既看不到脚本又看不到接口的一个类。不知道它的源码在哪,因此也就无从修改。相关内容可以见 7 楼点评给出的链接。链接内容大概是一个由个人实现的 Tilemap 类,我没用过不知道还原度有多高。因此请慎用。
3. 地图增加一个图层和将开关数量变成几万个的难度不是一个量级。
4. 你的最终目标是给地图增加一个图层。而编辑器无法帮你方便地做这事(因为它只能画三层,第四层需要你闭着眼睛猜图块 ID 然后人工把数据输入进去)。有个东西我想可以帮你。ULDS
作者: 质数游戏    时间: 2018-10-6 08:04
RyanBern 发表于 2018-10-4 18:11
请仔细看 4 楼和 5 楼的回复。如果还是不清楚我总结一下。

1. 几乎所有 module RPG 下的东西都不是在游戏 ...

你给的这个ULDS好像是把地图先画好再贴上去的吧?
游戏过程中可以修改这些图块吗
作者: 质数游戏    时间: 2018-10-6 08:12
RyanBern 发表于 2018-10-4 18:11
请仔细看 4 楼和 5 楼的回复。如果还是不清楚我总结一下。

1. 几乎所有 module RPG 下的东西都不是在游戏 ...

我是希望在游戏的过程中能用脚本修改第四图层及以上的图块,这个似乎不行
作者: fux2    时间: 2018-10-6 09:59
质数游戏 发表于 2018-10-6 08:12
我是希望在游戏的过程中能用脚本修改第四图层及以上的图块,这个似乎不行 ...

我觉得楼上都已经讲的很清楚了,默认tilemap的情况下,不可能,它只读三层的数据,也只接受3层的table数据。
2个方案提供给你,第一种是再叠加一层tilemap,叠加到原有tilemap之上,造成有3层以上地图的视觉效果,代价是效率大幅度降低。
第二种是魔改dll或者运行时动态修改tilemap的代码实现,如果精通逆向工程你可以试试看……




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1