Project1

标题: 脚本中生成的事件不能执行 [打印本页]

作者: qq634488405    时间: 2014-6-20 14:12
标题: 脚本中生成的事件不能执行
本帖最后由 qq634488405 于 2014-6-20 14:21 编辑

我仿照夏娜大人的在游戏中制作事件的脚本做一个NPC任务,对话后会在任意一张地图生成一个事件,但是生成的事件无法执行,代码如下
RUBY 代码复制
  1. class Game_Temp
  2.   attr_accessor : task_aim # 目标事件
  3.   attr_accessor : task_map # 目标地图
  4.   def initialize
  5.     super
  6.     @task_map=0
  7.     @task_aim=RPG::Event.new(0,0)
  8.     @task_aim.name="XX"
  9.     @task_aim.pages[0].graphic.character_name="YY"
  10.     @task_aim.pages[0].list[0].code=355
  11.     @task_aim.pages[0].list[0].parameters=["$scene=Scene_Task.new(ZZ)"]
  12.   end
  13. end

这是在$game_temp里先生成一个事件,其中Scene_Task是处理任务的类,在地图上直接创建的事件插入内容为脚本:$scene=Scene_Task.new(ZZ)时正常运行。
在发布任务的NPC处接受任务的事件中,用脚本修改task_aim的坐标
脚本:
RUBY 代码复制
  1. map_id=rand(X)
  2. $game_temp.task_map=map_id
  3. x_y=rand($available_area[map_id].size)
  4. $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()方法
RUBY 代码复制
  1. # 初始化显示坐标
  2. @display_x = 0
  3. @display_y = 0
  4. # 清除刷新要求标志
  5. @need_refresh = false
  6. # 设置地图事件数据
  7. @events = {}
  8. for i in @map.events.keys
  9.   @events[i] = Game_Event.new(@map_id, @map.events[i])
  10. end

这是setup()方法的一个片段,在下面这一段的下方,即从Game_Map 79行起添加了如下代码
RUBY 代码复制
  1. if @map_id==$game_temp.task_map
  2.   $game_temp.task_aim.id=@events.size+1
  3.   @events[@events.size+1]=Game_Event.new(@map_id,$game_temp.task_aim)
  4.   @map.events[@events.size]=$game_temp.task_aim
  5. end

到了所在地图中能显示事件但是按ENTER无法执行脚本:"$scene=Scene_Task.new(ZZ),这是怎么回事,有点长。。先谢谢各位了。。。
作者: fux2    时间: 2014-6-20 17:39
ZZ是个什么东西。
作者: qq634488405    时间: 2014-6-21 00:24
fux2 发表于 2014-6-20 17:39
ZZ是个什么东西。

解决了!我看了一下Interpreter以及Game_Event相关脚本,以我之前方法创建的事件命令只有一行,这样会被系统认为这是空事件,所以,只要Game_Temp脚本里加一句@task_aim.pages[0].list.push(RPG::EventCommand.new)使事件有两行命令就行了




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