Project1
标题: 脚本中生成的事件不能执行 [打印本页]
作者: qq634488405 时间: 2014-6-20 14:12
标题: 脚本中生成的事件不能执行
本帖最后由 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),这是怎么回事,有点长。。先谢谢各位了。。。
作者: 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 |