Project1

标题: scene_title的新写法 [打印本页]

作者: 墨凌羽    时间: 2015-7-24 22:40
标题: scene_title的新写法
RUBY 代码复制
  1. class View_Title
  2.   attr_accessor :container
  3.   def initialize(viewprot)
  4.           @viewprot = viewprot
  5.           @background = RGUI::PictureBox.new(0, 0, 544, 480, @viewprot, Cache.background("bg"))
  6.           @background.move(0, 0, -100)
  7.           @button_start = RGUI::SpriteButton.new(100, 200, 30, 80, @viewprot, Cache.system("button1"))
  8.           @button_load = RGUI::SpriteButton.new(100, 240, 30, 80, @viewprot, Cache.system("button2"))
  9.           @button_exit = RGUI::SpriteButton.new(100, 280, 30, 80, @viewprot, Cache.system("button3"))
  10.           hash = {:background => @background, :button_start => @button_start, :button_load => @button_load, :button_exit => @button_exit}
  11.           @container = RGUI::Container.new(hash)
  12.   end
  13.  
  14.   def update
  15.           @container.update
  16.   end
  17.  
  18.   def dispose
  19.           @container.dispose
  20.           @viewprot.dispose
  21.   end
  22.  
  23.   def method_missing(m,*arg,&block)
  24.     return instance_variable_get(m) ? @container[m] : super
  25.   end
  26. end
  27.  
  28. class Scene_Title
  29.  
  30.   def start
  31.           SceneManager.clear
  32.           play_title_music
  33.           @view = View_Title.new(Viewprot.new)
  34.           @view.container[2].set_forbid if DataManager.save_file_exists?
  35.           set_event
  36.           super
  37.   end
  38.  
  39.   def update
  40.     @view.update
  41.     input_update unless scene_changing?
  42.     super
  43.   end
  44.  
  45.   def terminate
  46.           @view.update
  47.           super
  48.   end
  49.  
  50.   def transition_speed
  51.     return 20
  52.   end
  53.  
  54.   def input_update
  55.           if Input.trigger?(DOWN) then
  56.             @view.container.down
  57.           end
  58.           if Input.trigger?(UP) then
  59.             @view.container.up
  60.           end
  61.           if Input.trigger?(C) then
  62.             @view.container.soure
  63.           end
  64.   end
  65.  
  66.   def set_event
  67.           @view.container.button_start.event(:sure){Scene.goto(Scene_Menu)}
  68.     @view.container.button_load.event(:sure){Scene.goto(Scene_Load)}
  69.     @view.container.button_exit.event(:sure){exit}
  70.   end
  71.  
  72.   def play_title_music
  73.     $data_system.title_bgm.play
  74.     RPG::BGS.stop
  75.     RPG::ME.stop
  76.   end
  77.  
  78. end

嗯,就是之前提过的那个基于RGSS的GUI库。最近一直在写,不过白天要上班,还得抽时间搞导师找我做的项目,所以写的极慢(是你丫懒吧・゚( ノд`゚)
在这里打个预告,不出意外的话月底应该能出个测试版【估计bug满满
装完逼就跑,真他妈的刺激( ̄∇ ̄)
作者: 电子最终龙    时间: 2015-7-25 00:25
沒有滑鼠響應差評。選擇項其實做成一個精靈集更好的,方便添加選項。
既然可移動背景都用了,乾脆做一個特效庫吧
作者: 墨凌羽    时间: 2015-7-25 00:46
电子最终龙 发表于 2015-7-24 18:25
沒有滑鼠響應差評。選擇項其實做成一個精靈集更好的,方便添加選項。
既然可移動背景都用了,乾脆 ...

确实,这是一个不支持鼠标的版本【可能后续会做一个支持鼠标的吧
button的内部实现就是封装的精灵,对于选项组这种后面应该会专门封装一个控件出来吧 现在是靠button+container来模拟。
那个图片框基本就是只能做到图片的拉伸和平铺。。。没什么可动的
至于特效库到时有此打算,不过就只能是另一个项目了吧
作者: 晴兰    时间: 2015-7-25 01:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: 墨凌羽    时间: 2015-7-25 02:03
晴兰 发表于 2015-7-24 19:21
状态机和帧动画呢

百度了一下才明白兰兰说的是什么。。。ORZ
状态机的话。。。这个的封装并不是很完整。。。那个container里有部分实现。这个GUI对于控件的处理就是一个树,每个控件都是叶,如果控件类型是容器则为枝,container提供down和up两个方法来遍历整个控件列表(会自动忽略被禁用的控件)依次调用他们的当前控件的lost_focus和下一个控件的get_focus。容器控件有一个esc的方法用来返回父容器。
至于帧动画。。。这种玩意貌似完全没有的样子
作者: summer92    时间: 2015-7-25 10:40
PictureBox是什么东东,我第一次见Y




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