加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 刺夜之枪 于 2014-1-21 00:55 编辑
我初学脚本,现在在做这么一个脚本。
建立了两个class, 一个是我军class 一个是敌军class。
每个class有几个变量和方法。
在地图上可以生成事件“敌人”或者“我军”
经过测试发现,场上的敌我人数在3以内就可以正常工作。 但一多就弹错了。
实在不解是什么回事儿。明明开始工作很正常、
一下是我军class脚本, 和敌军基本一样。包括事件的内容基本一样,除了变量名字以外
#============================================================================== # ■ 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[i].x y = $enermy[i].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
#==============================================================================
# ■ 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[i].x
y = $enermy[i].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
同时发现一个有趣的现象:
因为上面事件都是并行处理,但如果调成按决定键,按着顺序一个一个点的话无论人数多少都可以正常工作
===================================================================
发现问题所在的范围了:
在每个士兵的事件页1(用来生成士兵的object)的地方出了问题,当并行处理的士兵事件数大于3就弹错。
但是用决定键一个一个点开生成就可以了。 然后其他地方没有问题、
===================================================================
|