Project1

标题: 从XP向VA移植浮游云(自制特殊交通工具)出错求助 [打印本页]

作者: eve592370698    时间: 2012-1-26 18:58
标题: 从XP向VA移植浮游云(自制特殊交通工具)出错求助
本帖最后由 eve592370698 于 2012-1-26 21:22 编辑

先拿出我的文件
http://115.com/file/e7hz4zyv#
DQ地图.rar
其实也可以直接下载那个附件然后覆盖到新建空白工程,然后在数据库里面把要应用浮游云的图块标记为2(可以自己设定,但是很麻烦。)

浮游云(喜欢叫跟斗云也行),是@掣星霁月 在XP系统上制作的一个辅助交通工具,一般在某些洞穴和天上世界,将不可通行的图块用2(可以自己定)来标记,使用时,根据前方的地图标记来激活,只在图块标记为2的地方前进,当前方标记不是2时,如果可以通行就下来正常行走,否则掉头返回。

因为VX ACE不需第三方软件就可以对地图块做标记,于是我试着把这技术移植过来。

该技术是调用公共事件,需要在事件中输入脚本即可,通过检查那些调用方法,并没有看到VA和XP在这些方法的不同点,但是实际运行呢?却出现错误。
因为脚本位于事件中,而非游戏系统脚本内,所以报错地方非常广泛,难以查找,虽然在楼下的帮助下解决了,但是呢?发现那个报错仅仅是接下来一系列问题的开始,
例如即使是循环地图遇到边界还会自动掉头返回。由于本人工程的脚本尚未汉化,实在是找不到地图循环中角色坐标的算法,难以突破地图循环对此交通工具失效的问题。


说句题外话,旧VX可以借助第三方软件给图块标记数字,所以也可以使用浮游云,我移植过考虑到元件限制不实用就放弃了。dsu_plus_rewardpost_czw

截图0001.jpg (231.75 KB, 下载次数: 43)

截图0001.jpg

纠错.jpg (23.69 KB, 下载次数: 46)

纠错.jpg

CommonEvents.rar

1.46 KB, 下载次数: 105

其实是公共事件,用它覆盖即可


作者: 怕鼠的猫    时间: 2012-1-26 20:14
问题解决了。主要就是你用了个不存在的函数 check_event
VA中对等功能的函数是 event_id_xy.而且如果查找失败后,返回的是0,不是nil。
  1.   @event_over = false
  2. a=$game_map.event_id_xy($xg,$yg)
  3. if a==0
  4.   @event_over = true
  5. elsif $game_map.events[a].through == true
  6.   @event_over = true
  7. end
复制代码
另外,担心envet.through对外不可读,所以加了两行脚本代码。
  1. # 怕鼠的猫
  2. # 修改 Events 类,增加可读变量。
  3. class Game_Event
  4.   attr_reader :through
  5. end
复制代码
目前已经看不到原来的错误了。但是还有隐藏的问题。

http://115.com/file/e7qfdsuz#Dq地图修改1.rar

主要毛病就是用这样的判定方式,如果遇到地图边界,x,y 会可能减成-1,直接导致判断失败而停下来。结果人物被悬浮在半空中。
虽然地图是循环的,可是你的公共事件在判定过程中,没有考虑循环的问题。这个还是你慢慢解决吧。

另外一个小建议,你用的是 获取地形标志 函数。这样浮空云只能在这个地形中漂浮。遇到山川河流都会停下来,主角可能不小心停到山上下不来!?
是不是考虑用下面那个区域ID的函数。这样只要在地图中画一片ID==2的区域,什么地形都可以通行。。。。
只是建议而已。
  1.   #--------------------------------------------------------------------------
  2.   # ● 获取地形标志 ???
  3.   #--------------------------------------------------------------------------
  4.   def terrain_tag(x, y)

  5.   #--------------------------------------------------------------------------
  6.   # ● 获取区域 ID
  7.   #--------------------------------------------------------------------------
  8.   def region_id(x, y)
  9.    
复制代码
反正,交差了,给分啊。
作者: eve592370698    时间: 2012-1-26 21:06
本帖最后由 eve592370698 于 2012-1-26 21:30 编辑
怕鼠的猫 发表于 2012-1-26 20:14
问题解决了。主要就是你用了个不存在的函数 check_event
VA中对等功能的函数是 event_id_xy.而且如果查找失 ...


首先,对您能够第一时间帮助我并,指出这些bug我表示肯定,但是因为您的回答有些缺陷所以我不能马上给您悬赏。

如果遇到地图边界,x,y 会可能减成-1,直接导致判断失败而停下来。结果人物被悬浮在半空中。
虽然地图是循环的,可是你的公共事件在判定过程中,没有考虑循环的问题。

遇到山川河流都会停下来,主角可能不小心停到山上下不来!?
经过测试,到了边界之后和不可通行的区域之后,直接原路返回。

这个还是你慢慢解决吧。
反正,交差了,给分啊。
考虑到您的VIP不多,本想认可您,但是经过测试,发现这仅仅是一系列bug的开始,所以我怀疑您帮我解答太急于想要得到奖赏,没准马马虎虎应付,所以提高悬赏并将问题做了局部修改。
作者: 怕鼠的猫    时间: 2012-1-26 21:38
本帖最后由 怕鼠的猫 于 2012-1-26 21:49 编辑

你原本的事件脚本太长,具有移植脚本天生的遗传缺陷。如果要修改到能用的程度,需要在所有x,y增减的地方加入修正函数。
从字面上看,你要排除的只是那个 错误提示对话框,所以我就头疼医头,不管脚气了。

你要交通工具具有直线前进,不能人工干涉的特点,这一点和我以前做的游戏有类似的地方。那个游戏中,人物是在冰面上滑行的。
我可以改造一下那个游戏的片段,用我自己的风格来解决这个问题。
http://115.com/file/ans9513z#Dq地图修改2.rar

作者: 亿万星辰    时间: 2012-1-26 21:46
本帖最后由 亿万星辰 于 2012-1-26 23:39 编辑
  1. @event_over = false
  2. a=$game_map.events_xy_nt($xg,$yg)
  3. if a.empty?
  4.   @event_over = true
  5. end
复制代码
放在哪里你知道的。现在存在的问题是,到达目的地后,队伍集结的动作有点蹊跷~还有就是公共事件里没有对云彩的数量做处理。
@eve592370698

其实实现起来不用这么繁琐……虽然原理上差不多。

1、
  1. case $game_player.direction
  2. when 2
  3. @cloudy+=1
  4. when 4
  5. @cloudx-=1
  6. when 6
  7. @cloudx+=1
  8. when 8
  9. @cloudy-=1
  10. end
复制代码

2、
  1. case $game_player.direction
  2. when 2
  3.   $yg += 1
  4. when 4
  5.   $xg -= 1
  6. when 6
  7.   $xg += 1
  8. when 8
  9.   $yg -= 1
  10. end
复制代码
这里两部分是存在问题的,会有坐标越界的情况,可以用条件分歧增加一个对地图是否是循环地图的判断,如下:
1、
条件分歧:脚本:$game_map.overworld?
  脚本:
  1. case $game_player.direction
  2. when 2
  3. @cloudy+=1;@cloudy%=$game_map.height
  4. when 4
  5. @cloudx-=1;@cloudx%=$game_map.width
  6. when 6
  7. @cloudx+=1;@cloudx%=$game_map.width
  8. when 8
  9. @cloudy-=1;@cloudy%=$game_map.height
  10. end
复制代码
否则
  脚本:
  1. case $game_player.direction
  2. when 2
  3. @cloudy+=1
  4. when 4
  5. @cloudx-=1
  6. when 6
  7. @cloudx+=1
  8. when 8
  9. @cloudy-=1
  10. end
复制代码
结束

2、
条件分歧:脚本:$game_map.overworld?
  脚本:
  1. case $game_player.direction
  2. when 2
  3.   $yg += 1;$yg%=$game_map.height
  4. when 4
  5.   $xg -= 1;$xg%=$game_map.width
  6. when 6
  7.   $xg += 1;$xg%=$game_map.width
  8. when 8
  9.   $yg -= 1;$yg%=$game_map.height
  10. end
复制代码
否则
  脚本:
  1. case $game_player.direction
  2. when 2
  3.   $yg += 1
  4. when 4
  5.   $xg -= 1
  6. when 6
  7.   $xg += 1
  8. when 8
  9.   $yg -= 1
  10. end
复制代码
结束

作者: 怕鼠的猫    时间: 2012-1-26 22:15
本帖最后由 怕鼠的猫 于 2012-1-26 23:19 编辑

修正完毕。这回应该能满意了。

http://115.com/file/bepw8d0e#Dq地图修改3.rar
在事件中穿插脚本真不方便,只有那么几行而已。写得累得慌。

本 奸商 从来都是做良心买卖,童叟无欺!欢迎下次惠顾!
  1. @mapheight=$game_map.height
  2. @mapwidth=$game_map.width
复制代码
最前面的两句应该这样改动一下,免得换了地图就不对劲。
作者: 柳柳    时间: 2012-1-26 22:37
好像楼上改的那个解决差不多了
集结的那个问题,把Game_Interpreter的def command_217最上面加一行:
  1. $game_player.followers.synchronize($game_player.x, $game_player.y, $game_player.direction) unless $game_player.followers.visible
复制代码
就行了。默认只有在角色可见时候才能执行集结,调整一下改为不可见时刹那集结就好了。闪人~
作者: eve592370698    时间: 2012-1-26 22:44
本帖最后由 eve592370698 于 2012-1-26 23:03 编辑
怕鼠的猫 发表于 2012-1-26 22:15
修正完毕。这回应该能满意了。

http://115.com/file/bepw8d0e#Dq地图修改3.rar


您楼上的亿万星辰和您楼下的柳万岁爷也有很大的功劳,
柳万岁爷应该获得3个VIP,亿万星辰的技术含量很高,应该获得33个。




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