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

Project1

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

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1759
在线时间
2524 小时
注册时间
2010-10-12
帖子
1454

开拓者

跳转到指定楼层
1
发表于 2014-1-21 10:54:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 刺夜之枪 于 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就弹错。
但是用决定键一个一个点开生成就可以了。 然后其他地方没有问题、

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

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

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

查看全部评分


Lv5.捕梦者

梦石
0
星屑
33125
在线时间
5104 小时
注册时间
2012-11-19
帖子
4878

开拓者

2
发表于 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 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33125
在线时间
5104 小时
注册时间
2012-11-19
帖子
4878

开拓者

3
发表于 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 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33125
在线时间
5104 小时
注册时间
2012-11-19
帖子
4878

开拓者

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

点评

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

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33125
在线时间
5104 小时
注册时间
2012-11-19
帖子
4878

开拓者

5
发表于 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 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-30 12:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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