Project1

标题: 关于脚本中各种全局变量以及用脚本新建事件的问题 [打印本页]

作者: iisnow    时间: 2011-10-12 22:59
标题: 关于脚本中各种全局变量以及用脚本新建事件的问题
本帖最后由 各种压力的猫君 于 2011-10-13 15:23 编辑

我以前就问过一些,不过现在又要问了:


就是写脚本的时候遇到了很多需要从输入的值中读取信息
但是在脚本中,它对应的是什么呢?(图中“小红”)



另外,事件类确实很复杂啊
RPG::Event
RPG::Event::Page  (= = P居然是个表情)
RPG::Event::Page::Condition
RPG::Event::Page::Graphic
都看了一下,但是还是不知道如何用脚本新建一个事件

简化一下吧,大概就是建一个事件:

只要做成这样就行了,所在地图ID,坐标X,Y  都已知
不要再加事件进去了,因为是批量进行了
怎么写都不知道怎么动手……
$game_events(不知道是不是叫这个名字)结构太复杂了,看不懂dsu_plus_rewardpost_czw
作者: darkscout3000    时间: 2011-10-12 23:31
本帖最后由 darkscout3000 于 2011-10-12 11:05 编辑

先回答第一个问题
事件的名字这个嘛是在Game_Map类里头,有个@map属性
  1. @map.events[id].name
复制代码
这里用的就是RPG::Event类

第二个问题
这个其实一点都不复杂
你需要做三件事情

第一步,在地图的数据中加入事件
Game_Map类里头有个@events属性,纪录了地图上所有的事件
你需要做的就是加一个事件进去,把这段插入 Game_Map 类
  1. def add_event(x, y, name, picture_name)
  2.   event = RPG::Event.new(x,y, name)
  3.   event.name = name                      # 事件名字
  4.   event.id = @events.keys.max + 1 # 事件ID
  5.   event.pages[0].graphic.character_name = picture_name  #事件图像
  6.   event.pages[0].walk_anime = true      #选项「移动时动画」的真伪值。
  7.   event.pages[0].step_anime = true      #选项「停止时动画」的真伪值。
  8.   event.pages[0].direction_fix  = false   #选项「固定朝向」的真伪值。
  9.   event.pages[0].through = false          #选项「充许穿透」的真伪值。
  10.   event.pages[0].always_on_top           #选项「在最前面显示」的真伪值。
  11.   event.pages[0].trigger = 0         #触发条件(0:决定键,1:与主角接触,2:与事件接触,3:自动执行,4:并行处理)。
  12.   event.pages[0].list.push(RPG::MoveCommand(355, ["脚本代码第一行", "脚本第二行" ...])) # 355 是执行脚本的代码
  13.   @events[event.id] = event
  14.   return event.id
  15. end
复制代码
那个pages其实很好理解,你知道每个事件都有很多事件页吧?pages[0]就是第一页
你在地图上添加事件不是可以选择一个角色图片么?你就用那个里头的名字就好了(只要名字,不要路径)
大多属性还是比较直观的,就是加入事件比较麻烦

第二步,把事件添加到地图精灵组
事件在地图上显示是Spriteset_Map类控制的
总之先在Spriteset_Map类中加入以下方法
  1. def add_event_sprite(event_id)
  2.   sprite = Sprite_Character.new(@viewport1, $game_map.events[event_id])
  3.   @character_sprites.push(sprite)
  4. end
复制代码
第三步,让事件显示出来
最后是Scene_Map类
加入以下方法
  1. def add_event(x, y, name, picture_name)
  2.   event_id = $game_map.add_event(x,y,name,picture_name)
  3.   @spriteset.add_event_sprite(event_id)
复制代码
这样就基本完成了
剩下的就是写个脚本(前提是你在地图上)

  1. $scene.add_event(10,10,"noob", "001-Fighter01")
复制代码
然后阿尔西斯就在地图坐标(10,10)出现了⋯⋯

如果有bug就问吧,毕竟是凭记忆打的代码⋯⋯

���
作者: 亿万星辰    时间: 2011-10-13 09:29
来补充一下,完全用脚本新建一个事件,不如用脚本从某个地图里复制一个模板事件到指定的地图制定的位置,这样你需要初始化的东西就少多了,只需要把关键性的一些属性修改一下就好了。
作者: iisnow    时间: 2011-10-13 11:29
darkscout3000 发表于 2011-10-12 23:31
先回答第一个问题
事件的名字这个嘛是在Game_Map类里头,有个@map属性这里用的就是RPG::Event类

非常感谢,马上就去做做看




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