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

Project1

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

伪●破除地图999张的限制(跨越目录法)--更新范例工程

 关闭 [复制链接]

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
跳转到指定楼层
1
发表于 2008-4-11 23:01:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
{/hx}首先要感谢
wy29禾西冰水沉影不器4人在
[讨论]如何破除地图999张的限制帖子中
http://rpg.blue/viewthread.php?tid=83080&page=1
提供资讯(或思路),我才能发出这样的教程!



在RMXP编辑器中限制了地图制作的张数!
虽然制作地图超过999张对一般人来说不太可能,
但我还是说明一下:万一超过999张该如何扩充制作地图?

首先我们先必须知道在地图做编辑时(存档后),
会在工程的Data资料夹下产生
Map001.rxdata ,Map002.rxdata ,Map003.rxdata....Map***.rxdata
再由Game_Map脚本中的
@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
(其中%03d表示地图最大ID为3位数)
载入地图档案。

在RMXP编辑器中地图最大ID量默认是3位数的,应该破解编制器,把编号改成4位数
(並把Game_Map脚本中的%03d改成%04d),但是要破解编制器不容易,所以我们可以
利用脚本从不同的文件夹内(不同的路径)读取新地图DATA。

首先新建立N个Data资料夹(Data1,Data2,.....DataN)
再利用游戏某变量 $game_variables[变量编号]=数值 控制
把Game_Map类里@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
改成
(这里以游戏变量编号2为例)

  1. case $game_variables[2]
  2. when 0
  3.   @map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
  4. when 1
  5.   @map = load_data(sprintf("Data1/Map%03d.rxdata", @map_id))
  6. when 2
  7.   @map = load_data(sprintf("Data2/Map%03d.rxdata", @map_id))
  8. .........
  9. when [b]N[/b]
  10.   @map = load_data(sprintf("Data[b]N[/b]/Map%03d.rxdata", @map_id))
  11. end
复制代码
这样基本上 伪●破除地图999张的限制 已经完成了!

接下来要介绍:应该要如何编辑新的地图
当制作地图超过999张(该999张地图Data都存放在Data资料夹下),
新的工程开始制作新地图,做完后存档,
再把新的地图Data复制到以前的工程Data1资料夹下,
依此类推.......
但当然制作新的工程过程中必须注意:
事件里如果要用到其他数据那得确保所有数据编号跟以前的工程一致
像开关ID,Tilesets ID,变量ID..等等 要跟以前的工程配合才行!
所以我建议:
先把旧工程复制一份当新的工程用,再把复制的那一份(当新的工程用的那一份)里的地图
999张全部删除,再重新制作新的地图。
这样一来编辑不容易出错,
二来要添加开关,变数,图块Tilesets,..等等容易同步添加

最后要介绍的是:应该要如何跨越目录做地图场所移动
先使用游戏某变量 $game_variables[变量编号]=数值 控制帶入你要的Data资料夹数值,
然後跨越目录做地图场所移动前必须$game_map = Game_Map.new重新讀取
最后再利用变数指定场所移动的 (新目录下)目的地

在事件頁编辑后如下:

但如果是在对话完结束后要跨越目录地图场所移动时,至少要等待5桢以上
否则会出现以下错误:

对话完结束后正確事件頁编辑要如下所示:

范例工程:
主工程(195KB)
http://rpg.blue/upload_program/f ... MAP999_88365305.rar
子工程(189KB)
http://rpg.blue/upload_program/files/子工程_88365344.rar
(至目前为止这种方法还没有发现错误,如果范例工程有发现错误请告知,谢谢。)
补充:
范例工程中使用了地图显示名称的脚本,这个脚本也是要做小修改的,道理跟这个类似,
只是这次换成只有一个的MapInfos.rxdata了,自己看看哪里做了修改吧!!


                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说

Lv1.梦旅人

梦石
0
星屑
55
在线时间
0 小时
注册时间
2008-4-7
帖子
69
2
发表于 2008-4-11 23:08:03 | 只看该作者
超级无敌大压缩脚本:
case $game_variables[2]
when 0
@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
when 1
@map = load_data(sprintf("Data1/Map%03d.rxdata", @map_id))
when 2
@map = load_data(sprintf("Data2/Map%03d.rxdata", @map_id))
.........
when N
@map = load_data(sprintf("DataN/Map%03d.rxdata", @map_id))
end

变变变。。。
@map = load_data(sprintf("Data#{$game_variables[2]}/Map%03d.rxdata",@map_id)
回复 支持 反对

使用道具 举报

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
3
 楼主| 发表于 2008-4-11 23:17:52 | 只看该作者
你不会用到那麼多的,顶多做到第二个Data资料夹就很了不起了。
case $game_variables[2]
when 0
@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
when 1
@map = load_data(sprintf("Data1/Map%03d.rxdata", @map_id))
end
就可以了~~~~~

还有LS你这样写$game_variables[2]=0时就不是载入Data资料夹了~~~
而且我这样写可以自由替 新的DATA资料夹("Data1/.....") 作命名

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
0 小时
注册时间
2008-4-7
帖子
69
4
发表于 2008-4-12 00:14:16 | 只看该作者
以下引用TERENCE于2008-4-11 15:17:52的发言:
你不会用到那麼多的,顶多做到第二个Data资料夹就很了不起了。
case $game_variables[2]
when 0
@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
when 1
@map = load_data(sprintf("Data1/Map%03d.rxdata", @map_id))
end
就可以了~~~~~

还有LS你这样写$game_variables[2]=0时就不是载入Data资料夹了~~~
而且我这样写可以自由替 新的DATA资料夹("Data1/.....") 作命名

我总是缩短供参考{/lh}。
多以各分歧判断2号变量是不是0之后就真的可以做到无限地图层了,只是举例,只是举例。。。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
5
 楼主| 发表于 2008-4-12 02:01:18 | 只看该作者
{/dy}更新范例工程。


以下引用非法用户于2008-4-11 16:14:16的发言:
我总是缩短供参考。
多以各分歧判断2号变量是不是0之后就真的可以做到无限地图层了,只是举例,只是举例。。。

我知道~~~
我只是想解释我这样做的想法。
谢谢参考!
{/hx}

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3263
在线时间
3616 小时
注册时间
2006-9-6
帖子
37399

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

6
发表于 2008-4-12 02:16:47 | 只看该作者
暂时没见过地图超过999张的游戏……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
7
 楼主| 发表于 2008-4-12 02:29:34 | 只看该作者
以下引用越前リョーマ于2008-4-11 18:16:47的发言:

暂时没见过地图超过999张的游戏……

虽然制作地图超过999张不太可能,
但万一超过999张,就用得上啊!
凡是都要未雨绸缪嘛~~~~~
{/kuk}


                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-4-7
帖子
43
8
发表于 2008-4-12 02:44:24 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
0 小时
注册时间
2008-4-7
帖子
69
9
发表于 2008-4-12 02:47:53 | 只看该作者
以下引用琉璃之血于2008-4-11 18:44:24的发言:
以下引用TERENCE于2008-4-11 15:17:52的发言:

你不会用到那麼多的,顶多做到第二个Data资料夹就很了不起了。
case $game_variables[2]
when 0
@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
when 1
@map = load_data(sprintf("Data1/Map%03d.rxdata", @map_id))
end
就可以了~~~~~

还有LS你这样写$game_variables[2]=0时就不是载入Data资料夹了~~~
而且我这样写可以自由替 新的DATA资料夹("Data1/.....") 作命名


[本贴由作者于 2008-4-11 15:59:37 最后编辑]


这样呢?
@map = load_data(sprintf("Data#{$game_variables[2] == 0 ?"":$game_variables[2]}/Map%03d.rxdata",@map_id)

Ruby语法Very Good的字符内判式哦,哎~~~

这样就跟我本来的宗旨一样了,自动无限判断,省事而已{/hx}。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
1
星屑
8982
在线时间
4372 小时
注册时间
2005-10-22
帖子
6758

开拓者贵宾

10
发表于 2008-4-12 02:48:21 | 只看该作者
这个...嗯...貌似诡异度接近我了{/gg}
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-3 13:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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