查看: 1685|回复: 4

[已经解决] 初学脚本写的一段东西出错了,求助一下

[复制链接]
梦石
0
星屑
1816
在线时间
2527 小时
注册时间
2010-10-12
回帖
1336

开拓者

发表于 2014-1-21 10:54:55 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 刺夜之枪 于 2014-1-21 00:55 编辑

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

一下是我军class脚本, 和敌军基本一样。包括事件的内容基本一样,除了变量名字以外
[pre lang="ruby" line="1"]#==============================================================================
# ■ Soldier
#------------------------------------------------------------------------------
#  群战系统处理每个士兵的
#==============================================================================

class Soldier
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
    attr_accessor :hpmax
    attr_accessor :hp
    attr_accessor :ap
    attr_accessor :manamax
    attr_accessor :mana
    attr_accessor :x
    attr_accessor :y
    attr_accessor :event_id
    attr_accessor :soldier_id
    attr_accessor :enermy_soldier_id
   
  #--------------------------------------------------------------------------
  # ● 初始化数据
  #--------------------------------------------------------------------------
  def initialize(event_id,soldier_id)
    @hpmax = 300
    @hp = @hpmax
    @ap = 70
    @manamax = 0
    @mana = @manamax
    @event_id = event_id
    @soldier_id = soldier_id
    @x = $game_map.events[@event_id].x
    @y = $game_map.events[@event_id].y   
    @enermy_soldier_id = 1
    $my_id_list[@soldier_id] = @event_id   #往hash添加本士兵ID的事件ID
  end
  #--------------------------------------------------------------------------
  # ● 返回事件ID
  #--------------------------------------------------------------------------
  def get_event_id(soldier_id)
    evernt_id = $my_id_list [soldier_id]
    return evernt_id
  end
  
  #使用后返回对应士兵id的事件id
  #--------------------------------------------------------------------------
  # ● 更新数据
  #--------------------------------------------------------------------------
  def update
    @x = $game_map.events[@event_id].x
    @y = $game_map.events[@event_id].y
  end
  
  #--------------------------------------------------------------------------
  # ● 判断距离本事件最近的敌人ID
  #--------------------------------------------------------------------------
  def check_enermy
      distance_least = 1000
    for i in 1..$敌方士兵数量
      x = $enermy.x
      y = $enermy.y
      distance = (@x-x).abs + (@y-y).abs
      if distance < distance_least  #判断是否为最短的距离
        distance_least = distance
        distance_least_id = i
      end  
    end  
    return distance_least_id   #返回敌人的士兵ID
   
  end
  
  
  
  
  
end  [/pre]



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




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

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

更多图片 小图 大图
组图打开中,请稍候......

jiehao.zip

999.46 KB, 下载次数: 35

点评

事件解释器 Interpreter 。  发表于 2014-1-22 09:25
添加士兵给你写到 事件解释器 里吧。话说看别人写的脚本,就是头大。  发表于 2014-1-21 15:17
也可以把添加,删除的方法写进 事件解释器 里,运用时就只写方法并带入参数即可。  发表于 2014-1-21 13:41
底部有图片,每个图片有注释  发表于 2014-1-21 10:55

评分

参与人数 1赞 +1 收起 理由
众神与将军 + 1

查看全部评分


梦石
0
星屑
34467
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2014-1-21 11:09:24 | 显示全部楼层
资料不全,感觉有点复杂,不好判断。
从报错来看,实例生成了 nil ,不能用于加法运算。

点评

发现问题所在的范围了: 在每个士兵的事件页1(用来生成士兵的object)的地方出了问题,当并行处理的士兵事件数大于3就弹错。 但是用决定键一个...   发表于 2014-1-21 11:33
那么,可能是什么原因呢  发表于 2014-1-21 11:12
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
34467
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2014-1-21 11:53:56 | 显示全部楼层
可能是:当 $我方士兵数量 > 3 时,初始化 @soldier_id = $我方士兵数量 ,在方法 get_event_id(soldier_id) 里,返回事件 ID $my_id_list [soldier_id],
但地图上没有那个事件 ID,所以报 nil 。

点评

不过用决定键挨个执行就没事儿,,,咋回事而  发表于 2014-1-21 12:29
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
34467
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2014-1-21 13:22:21 | 显示全部楼层
晕~,貌似事件脚本报错不好判断。建议再建一个 我方士兵 和 敌方士兵 类 的父类。把添加,删除士兵等方法都写进父类里,运用时只写 父类 定义
的方法即可,简单又方便。

点评

已上传附件  发表于 2014-1-21 13:55
多谢指点,虽然我还不会用脚本生成士兵,,因为事件  发表于 2014-1-21 13:31
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

梦石
0
星屑
34467
在线时间
5096 小时
注册时间
2012-11-19
回帖
4715

开拓者

发表于 2014-1-21 15:41:10 | 显示全部楼层
本帖最后由 芯☆淡茹水 于 2014-1-21 15:42 编辑

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

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

点评

感谢了,当前的问题解决了~ 我也看不懂别人写的脚本。 正在学添加删除士兵写到父类~ 顺便问下事件解释器是什么? 0w0 谢谢  发表于 2014-1-22 03:42

评分

参与人数 2星屑 +60 梦石 +1 收起 理由
myownroc + 1 认可答案
刺夜之枪 + 60 认可答案

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部