Project1

标题: 初学脚本写的一段东西出错了,求助一下 [打印本页]

作者: 刺夜之枪    时间: 2014-1-21 10:54
标题: 初学脚本写的一段东西出错了,求助一下
本帖最后由 刺夜之枪 于 2014-1-21 00:55 编辑

我初学脚本,现在在做这么一个脚本。
建立了两个class, 一个是我军class 一个是敌军class。
每个class有几个变量和方法。
在地图上可以生成事件“敌人”或者“我军”
经过测试发现,场上的敌我人数在3以内就可以正常工作。 但一多就弹错了。
实在不解是什么回事儿。明明开始工作很正常、

一下是我军class脚本, 和敌军基本一样。包括事件的内容基本一样,除了变量名字以外
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Soldier
  3. #------------------------------------------------------------------------------
  4. #  群战系统处理每个士兵的
  5. #==============================================================================
  6.  
  7. class Soldier
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.     attr_accessor :hpmax
  12.     attr_accessor :hp
  13.     attr_accessor :ap
  14.     attr_accessor :manamax
  15.     attr_accessor :mana
  16.     attr_accessor :x
  17.     attr_accessor :y
  18.     attr_accessor :event_id
  19.     attr_accessor :soldier_id
  20.     attr_accessor :enermy_soldier_id
  21.  
  22.   #--------------------------------------------------------------------------
  23.   # ● 初始化数据
  24.   #--------------------------------------------------------------------------
  25.   def initialize(event_id,soldier_id)
  26.     @hpmax = 300
  27.     @hp = @hpmax
  28.     @ap = 70
  29.     @manamax = 0
  30.     @mana = @manamax
  31.     @event_id = event_id
  32.     @soldier_id = soldier_id
  33.     @x = $game_map.events[@event_id].x
  34.     @y = $game_map.events[@event_id].y   
  35.     @enermy_soldier_id = 1
  36.     $my_id_list[@soldier_id] = @event_id   #往hash添加本士兵ID的事件ID
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 返回事件ID
  40.   #--------------------------------------------------------------------------
  41.   def get_event_id(soldier_id)
  42.     evernt_id = $my_id_list [soldier_id]
  43.     return evernt_id
  44.   end
  45.  
  46.   #使用后返回对应士兵id的事件id
  47.   #--------------------------------------------------------------------------
  48.   # ● 更新数据
  49.   #--------------------------------------------------------------------------
  50.   def update
  51.     @x = $game_map.events[@event_id].x
  52.     @y = $game_map.events[@event_id].y
  53.   end
  54.  
  55.   #--------------------------------------------------------------------------
  56.   # ● 判断距离本事件最近的敌人ID
  57.   #--------------------------------------------------------------------------
  58.   def check_enermy
  59.       distance_least = 1000
  60.     for i in 1..$敌方士兵数量
  61.       x = $enermy[i].x
  62.       y = $enermy[i].y
  63.       distance = (@x-x).abs + (@y-y).abs
  64.       if distance < distance_least  #判断是否为最短的距离
  65.         distance_least = distance
  66.         distance_least_id = i
  67.       end  
  68.     end  
  69.     return distance_least_id   #返回敌人的士兵ID
  70.  
  71.   end
  72.  
  73.  
  74.  
  75.  
  76.  
  77. end




同时发现一个有趣的现象:
因为上面事件都是并行处理,但如果调成按决定键,按着顺序一个一个点的话无论人数多少都可以正常工作




===================================================================
发现问题所在的范围了:
在每个士兵的事件页1(用来生成士兵的object)的地方出了问题,当并行处理的士兵事件数大于3就弹错。
但是用决定键一个一个点开生成就可以了。 然后其他地方没有问题、

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

QQ截图20140120184527.jpg (60.96 KB, 下载次数: 4)

当敌我数量为4或以上时就弹错

当敌我数量为4或以上时就弹错

QQ截图20140120184547.jpg (86.12 KB, 下载次数: 4)

每个我军士兵的事件页1

每个我军士兵的事件页1

QQ截图20140120184556.jpg (121.04 KB, 下载次数: 3)

每个我军士兵的事件页2

每个我军士兵的事件页2

QQ截图20140120184606.jpg (52.16 KB, 下载次数: 4)

准备工作的事件

准备工作的事件

QQ图片20140120184438.jpg (14.23 KB, 下载次数: 4)

弹错的描述

弹错的描述

QQ图片20140120184501.jpg (30.14 KB, 下载次数: 5)

当场上敌我在三个以内就没事儿

当场上敌我在三个以内就没事儿

jiehao.zip

999.46 KB, 下载次数: 35


作者: 芯☆淡茹水    时间: 2014-1-21 11:09
资料不全,感觉有点复杂,不好判断。
从报错来看,实例生成了 nil ,不能用于加法运算。
作者: 芯☆淡茹水    时间: 2014-1-21 11:53
可能是:当 $我方士兵数量 > 3 时,初始化 @soldier_id = $我方士兵数量 ,在方法 get_event_id(soldier_id) 里,返回事件 ID $my_id_list [soldier_id],
但地图上没有那个事件 ID,所以报 nil 。
作者: 芯☆淡茹水    时间: 2014-1-21 13:22
晕~,貌似事件脚本报错不好判断。建议再建一个 我方士兵 和 敌方士兵 类 的父类。把添加,删除士兵等方法都写进父类里,运用时只写 父类 定义
的方法即可,简单又方便。
作者: 芯☆淡茹水    时间: 2014-1-21 15:41
本帖最后由 芯☆淡茹水 于 2014-1-21 15:42 编辑

额~,算了,还是把当前问题解决了,其他你自己搞。(我算是看不懂别人写的脚本。

问题原因:非常简单,各全局变量未初始化,也就是说,最好不要在事件里初始化。
          全局变量已放在 Game_Temp 上面初始化。
jiehao.rar (968.42 KB, 下载次数: 42)




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