Project1

标题: 仿XXX按钮风格选项框 [打印本页]

作者: 六祈    时间: 2010-10-13 21:16
标题: 仿XXX按钮风格选项框

【求配色啊求配色】

【事件设置方法,以54号变量记录选择项,中间的等待4帧必须有,否则有bug】

范例:
54窗口运动.rar (239.65 KB, 下载次数: 906)

【继续唠叨】模仿css利用偏移和四边阴影变化来模拟按钮的做法,在RM中也可以实现类似的,以window为容器,改变ox和oy,偏移2px,并改变window边阴影的效果做到了。【不过愚者的配色功底要多丑有多丑啊……】
希望可以将一些其它【如css】中的优秀做法吸收到RM中,应该可以产生效果不错的UI
作者: 六祈    时间: 2010-10-13 21:17
  1. module Choice_Configuration
  2.   ColorLeft = Color.new(255,0,0,125)
  3.   ColorRight = Color.new(0,0,255,125)
  4.   WindowHeight = 58
  5.   WindowWidth = 306
  6.   WindowSpacing = 16
  7.   ColorShadow = Color.new(0,0,0,200)
  8.   VariableId = 54
  9. end

  10. class Scene_Choice < Scene_Base
  11.   include Choice_Configuration
  12.   def initialize(*list)
  13.     @list = list   
  14.   end
  15.   
  16.   def start
  17.     @spriteset = Spriteset_Map.new
  18.     @choice_windows = []
  19.     @choice_number = @list.size
  20.     start_y = (416 - @choice_number * WindowHeight - (@choice_number - 1) * WindowSpacing) / 2
  21.     start_x = (544 - WindowWidth) / 2
  22.     @list.each_with_index do |choice,index|
  23.       window = Window_Base.new(start_x,start_y + index * (WindowHeight + WindowSpacing),WindowWidth,WindowHeight)
  24.       window.contents.dispose
  25.       window.contents = Bitmap.new(WindowWidth - 34,WindowHeight - 34)
  26.       window.contents.gradient_fill_rect(2,2,WindowWidth - 32 - 2,22,ColorLeft,ColorRight)
  27.       window.contents.draw_text(0,0,WindowWidth - 32,24,choice,1)
  28.       window.opacity = 0
  29.       @choice_windows.push(window)
  30.     end
  31.     for i in 0...@choice_number
  32.       set_unactive(i)
  33.     end
  34.     @index = 0
  35.     set_active(@index)
  36.   end
  37.   
  38.   def terminate
  39.     @spriteset.dispose
  40.     @choice_windows.each{|window| window.dispose}
  41.   end
  42.   
  43.   def set_unactive(index)
  44.     target = @choice_windows[index]
  45.     target.contents.clear_rect(0,0,WindowWidth - 32 - 2,2)
  46.     target.contents.clear_rect(0,0,2,22)
  47.     target.contents.fill_rect(2,22,WindowWidth - 32 - 2,2,ColorShadow)
  48.     target.contents.fill_rect(WindowWidth - 32 - 2,2,2,22,ColorShadow)
  49.     target.ox = -2
  50.     target.oy = -2
  51.   end
  52.   
  53.   def set_active(index)
  54.     target = @choice_windows[index]
  55.     target.contents.clear_rect(2,22,WindowWidth - 32 - 2,2)
  56.     target.contents.clear_rect(WindowWidth - 32 - 2,2,2,22)
  57.     target.contents.fill_rect(0,0,WindowWidth - 32 - 2,2,ColorShadow)
  58.     target.contents.fill_rect(0,0,2,22,ColorShadow)
  59.     target.ox = 0
  60.     target.oy = 0
  61.   end
  62.   
  63.   def update
  64.     @choice_windows.each{|window| window.update}
  65.     if Input.trigger?(Input::DOWN)
  66.       Sound.play_cursor
  67.       set_unactive(@index)
  68.       @index += 1
  69.       @index %= @choice_number
  70.       set_active(@index)
  71.     end
  72.     if Input.trigger?(Input::UP)
  73.       Sound.play_cursor
  74.       set_unactive(@index)
  75.       @index -= 1
  76.       @index %= @choice_number
  77.       set_active(@index)
  78.     end
  79.     if Input.trigger?(Input::C)
  80.       Sound.play_decision
  81.       $game_variables[VariableId] = @index + 1
  82.       $scene = Scene_Map.new
  83.     end
  84.   end
  85. end
复制代码

作者: 九夜神尊    时间: 2010-10-13 21:33
67估计是没人给你布置作业了。真囧呀!!
:o 9给你个建议!!用一个开关控制该功能与原功能的切换,那么则使用方便很多。
但是,如果选项超过4个呢?
这样:(不知道冲突大不大)打开开关以后,用批量输入模式直接可以输入无限
个选项。每行一项(就像本论坛的投票那样。)
然后再用你发明的那个标签方式分歧每一个选项!!!!:lol
乃等尽请BS我吧!!!!
作者: 夕阳武士    时间: 2010-10-13 21:59
看到这个我就激动,再次谢啦:P
作者: 一箭烂YiJL    时间: 2010-12-4 14:13
中间一定要隔4帧,无奈。。挺麻烦的
能直接在脚本里加进等待四帧或者在:
$game_variables[VariableId] = @index + 1
$scene = Scene_Map.new
之间加入四帧以作缓冲?

作者: 绯红枫    时间: 2011-8-10 17:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: qq175908660    时间: 2011-8-28 09:21
提示: 作者被禁止或删除 内容自动屏蔽




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