加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 qq634488405 于 2014-6-20 14:21 编辑
我仿照夏娜大人的在游戏中制作事件的脚本做一个NPC任务,对话后会在任意一张地图生成一个事件,但是生成的事件无法执行,代码如下
class Game_Temp attr_accessor : task_aim # 目标事件 attr_accessor : task_map # 目标地图 def initialize super @task_map=0 @task_aim=RPG::Event.new(0,0) @task_aim.name="XX" @task_aim.pages[0].graphic.character_name="YY" @task_aim.pages[0].list[0].code=355 @task_aim.pages[0].list[0].parameters=["$scene=Scene_Task.new(ZZ)"] end end
class Game_Temp
attr_accessor : task_aim # 目标事件
attr_accessor : task_map # 目标地图
def initialize
super
@task_map=0
@task_aim=RPG::Event.new(0,0)
@task_aim.name="XX"
@task_aim.pages[0].graphic.character_name="YY"
@task_aim.pages[0].list[0].code=355
@task_aim.pages[0].list[0].parameters=["$scene=Scene_Task.new(ZZ)"]
end
end
这是在$game_temp里先生成一个事件,其中Scene_Task是处理任务的类,在地图上直接创建的事件插入内容为脚本:$scene=Scene_Task.new(ZZ)时正常运行。
在发布任务的NPC处接受任务的事件中,用脚本修改task_aim的坐标
脚本:
map_id=rand(X) $game_temp.task_map=map_id x_y=rand($available_area[map_id].size) $game_temp.task_aim.x, $game_temp.task_aim.y=x_y
map_id=rand(X)
$game_temp.task_map=map_id
x_y=rand($available_area[map_id].size)
$game_temp.task_aim.x, $game_temp.task_aim.y=x_y
其中$available_area是一个记录所有地图可以放置事件的坐标点的数组,$available_area[map_id]是ID为map_id的地图中可以放置事件的店,得到的x_y是[x坐标,y坐标]
接着我修改了Game_Map中的setup()方法
# 初始化显示坐标 @display_x = 0 @display_y = 0 # 清除刷新要求标志 @need_refresh = false # 设置地图事件数据 @events = {} for i in @map.events.keys @events[i] = Game_Event.new(@map_id, @map.events[i]) end
# 初始化显示坐标
@display_x = 0
@display_y = 0
# 清除刷新要求标志
@need_refresh = false
# 设置地图事件数据
@events = {}
for i in @map.events.keys
@events[i] = Game_Event.new(@map_id, @map.events[i])
end
这是setup()方法的一个片段,在下面这一段的下方,即从Game_Map 79行起添加了如下代码
if @map_id==$game_temp.task_map $game_temp.task_aim.id=@events.size+1 @events[@events.size+1]=Game_Event.new(@map_id,$game_temp.task_aim) @map.events[@events.size]=$game_temp.task_aim end
if @map_id==$game_temp.task_map
$game_temp.task_aim.id=@events.size+1
@events[@events.size+1]=Game_Event.new(@map_id,$game_temp.task_aim)
@map.events[@events.size]=$game_temp.task_aim
end
到了所在地图中能显示事件但是按ENTER无法执行脚本:"$scene=Scene_Task.new(ZZ),这是怎么回事,有点长。。先谢谢各位了。。。 |