Project1

标题: 简(陋)CG鉴赏系统[练习作 娱乐向] [打印本页]

作者: ed2k    时间: 2010-9-20 21:19
标题: 简(陋)CG鉴赏系统[练习作 娱乐向]
本帖最后由 ed2k 于 2010-9-21 13:38 编辑

如题所说,这只是为了练习(图片和窗口操作)而写的,所以就写了这个东西,应该没有bug。
这个系统我估计不会有人用的,这次纯粹是为了发一个研究样本,希望有人能对脚本的编写提供点建议。
打开图片后,方向键移动图片,q、w键缩放。

本脚本分三部分,以划分开
1.更改标题栏(无其他用)
2.旋转式选单(Scene类)
        :完全可以挪作他用,估计可以用在标题画面
3。图片浏览系统(Scene类)

选单编写历程:
原来是写成平铺式的,不过因为原图片太大会重叠,所以就打算修改z坐标,选中那个那个就放前面。后来一想,干脆把另外两个缩小好了。
而因为修改update中z坐标的启发,就试了下x坐标随时间变动,于是就有了浮沉效果。
后来联想到其他游戏中的旋转式选单,于是就修改成现在这样子了







CG鉴赏系统.rar (3.06 MB, 下载次数: 4517)
  1. #========================================================
  2. #增加选单
  3. #========================================================

  4. class Scene_Title < Scene_Base
  5.   def create_command_window
  6.     s1 = Vocab::new_game
  7.     s2 = Vocab::continue
  8.     s4 = Vocab::shutdown
  9.     @command_window = Window_Command.new(172, [s1, s2, "CG鉴赏", s4])
  10.     @command_window.x = (544 - @command_window.width) / 2
  11.     @command_window.y = 288
  12.     if @continue_enabled                    # 如果[读取存档]可用
  13.       @command_window.index = 1             # 移动光标至该命令项目上
  14.     else                                    # 如果[读取存档]不可用
  15.       @command_window.draw_item(1, false)   # 半透明显示该命令项目
  16.     end
  17.     @command_window.openness = 0
  18.     @command_window.open
  19.   end

  20.   def update
  21.     super
  22.     @command_window.update
  23.     if Input.trigger?(Input::C)
  24.       case @command_window.index
  25.       when 0    # 新的剧情
  26.         command_new_game
  27.       when 1    # 读取存档
  28.         command_continue
  29.       when 2    #CG鉴赏
  30.         command_Read_CG
  31.       when 3    # 退出游戏
  32.         command_shutdown
  33.       end
  34.     end
  35.   end
  36. # ------------定义方法----------------
  37.   def command_Read_CG
  38.     Sound.play_decision
  39.     close_command_window
  40.     $scene = Scene_Read_CG.new
  41.   end
  42. end
复制代码

  1. #===============================================
  2. # ** Scene_Read_CG
  3. #------------------------------------------------------------------------------
  4. #  这个类用来执行CG鉴赏的人物选择程式。
  5. #===============================================

  6. class Scene_Read_CG < Scene_Base
  7.   #--------------------------------------------------------------------------
  8.   # * 对象初始化
  9.   #     menu_index : 命令光标的起始位置
  10.   #--------------------------------------------------------------------------
  11.   def initialize(menu_index = 1)
  12.     @menu_index = menu_index
  13.     @card_size = 3                        #项目数
  14.     @card_name = ["灵梦", "蕾米", "阿求"] #项目名
  15.     @card = []
  16.     @gow_x = []
  17.     @ji_shu_qi = 0      
  18.     @fu_hao = 1
  19.     @temp_y = 0
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # * 程式开始
  23.   #--------------------------------------------------------------------------
  24.   def start
  25.     super
  26.     create_menu_background
  27.     refresh
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # * 程式终止
  31.   #--------------------------------------------------------------------------
  32.   def terminate
  33.     super
  34.     dispose_menu_background
  35.     @command_window.dispose
  36.     @name_window.dispose
  37.     for i in 0...@card_size
  38.       @card[i].dispose
  39.     end
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # * 返回之前的画面
  43.   #--------------------------------------------------------------------------
  44.   def return_scene
  45.     $scene = Scene_Title.new
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # * 更新内容显示
  49.   #--------------------------------------------------------------------------
  50.   def refresh
  51.     #-------------------窗口初始化------------------------------------
  52.     @name_window = Window_Base.new(0, 0, 544, 416)
  53.     @name_window.opacity = 0
  54.     @command_window = Window_Command.new(544, @card_name, @card_size)
  55.     @command_window.x = 0
  56.     @command_window.y = 350   
  57.     @command_window.opacity = 0
  58.     @command_window.contents_opacity = 0
  59.     @command_window.index = @menu_index
  60.     #-------------------图片初始化---------------------------------------
  61.     for i in 0...@card_size
  62.       @card[i] = Sprite.new
  63.       @card[i].bitmap = Bitmap.new("Graphics/Pictures/card#{i}")#读取对应项目图片      
  64.       @card[i].ox = @card[i].bitmap.width / 2
  65.       @card[i].oy = @card[i].bitmap.height / 2
  66.       @gow_x[i]=544 / @card_size /2 * (2 * i + 1) #分配x
  67.       @card[i].x = @gow_x[i]
  68.       @card[i].y = 250
  69.       @card[i].z = 100
  70.       @card[i].zoom_x = 0.5
  71.       @card[i].zoom_y = 0.5   
  72.     end
  73.     #--------------------描绘选中项目名------------------------------
  74.     @name_window.contents.draw_text(0, 270, 500, 50, @card_name[@command_window.index],1)
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # * 更新帧
  78.   #--------------------------------------------------------------------------
  79.   def update   
  80.     super   
  81.     update_menu_background
  82.     @name_window.update
  83.     @command_window.update
  84.     #----------------描绘动态图片效果--------------------------------
  85.     @ji_shu_qi = @ji_shu_qi % 100 + 1
  86.     if(@ji_shu_qi <= 49)
  87.       @ji_shu_qi % 3 == 0 ? @fu_hao = 1 : @fu_hao = 0
  88.     elsif(@ji_shu_qi > 53)
  89.       @ji_shu_qi % 3 == 0 ? @fu_hao = -1 : @fu_hao = 0
  90.     end   
  91.     for i in 0...@card_size
  92.       pian_yi = (@card_size - @command_window.index + i +1) % @card_size #计算偏移量
  93.       if(i == @command_window.index)
  94.         @card[i].x = @gow_x[pian_yi]
  95.         @temp_y += @fu_hao
  96.         @card[i].y = 150 + @temp_y
  97.         @card[i].zoom_x = 1
  98.         @card[i].zoom_y = 1
  99.       else
  100.         @card[i].x = @gow_x[pian_yi]
  101.         @card[i].y = 250
  102.         @card[i].zoom_x = 0.5
  103.         @card[i].zoom_y = 0.5   
  104.       end
  105.     end  
  106.     #-----------------------update选中项目名称------------------------
  107.     if Input.dir4 != 0
  108.       @name_window.contents.clear
  109.       @name_window.contents.draw_text(222, 270, 544, 50, @card_name[@command_window.index])
  110.     end
  111.     #----------------------按键判定---------------------------
  112.     if Input.trigger?(Input::B)
  113.       return_scene
  114.     elsif Input.trigger?(Input::C)
  115.       Sound.play_decision
  116.       $scene = Scene_CG.new(@command_window.index)
  117.     end
  118.   end
  119. end
复制代码

  1. #===================================================
  2. # ** Scene_CG
  3. #------------------------------------------------------------------------------
  4. #  这个类用来执行CG鉴赏的程式。
  5. #===================================================

  6. class Scene_CG < Scene_Base
  7.   #--------------------------------------------------------------------------
  8.   # * 对象初始化
  9.   #     card_num : 命令光标的起始位置
  10.   #     @cg_num :各项目的图片数
  11.   #     @hang_shu :行数
  12.   #     @lie_shu :列数(每行的图片数)
  13.   #--------------------------------------------------------------------------
  14.   def initialize(card_num)
  15.     @card_num = card_num   
  16.     @pic = []
  17.     @switch_pic = true
  18.     @hang_shu = 2
  19.     @lie_shu = 4
  20.     @cg_num = [8, 8, 8]
  21.     $temp_height = 0
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # * 程式开始
  25.   #--------------------------------------------------------------------------
  26.   def start
  27.     super
  28.     create_menu_background
  29.     refresh
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # * 程式终止
  33.   #--------------------------------------------------------------------------
  34.   def terminate
  35.     super
  36.     dispose_menu_background
  37.     @command_window.dispose
  38.     for i in 0...@hang_shu
  39.       for j in 0...@lie_shu
  40.         break if (@lie_shu * i + j) >= @cg_num[@card_num]
  41.         @pic[@lie_shu * i + j].dispose
  42.       end
  43.     end

  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # * 返回之前的画面
  47.   #--------------------------------------------------------------------------
  48.   def return_scene
  49.     $scene = Scene_Read_CG.new(@card_num)
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # * 更新内容显示
  53.   #--------------------------------------------------------------------------
  54.   def refresh
  55.     #-------------------------窗口初始化--------------------------
  56.     @command_window = Window_CG.new(576,["", "", "", "", "", "", "", ""],@lie_shu,0,0)
  57.     @command_window.x = -16
  58.     @command_window.y = -16
  59.     @command_window.height = 448
  60.     @command_window.opacity = 0   
  61.     @command_window.index = 0
  62.     #----------------------显示图片初始化-------------------------
  63.     @picture = Sprite.new
  64.     @picture.z = 500   
  65.     for i in 0...@hang_shu
  66.       for j in 0...@lie_shu
  67.         break if (@lie_shu * i + j) >= @cg_num[@card_num]
  68.         @pic[@lie_shu * i + j] = Sprite.new
  69.         @pic[@lie_shu * i + j].bitmap = Cache.load_bitmap("Graphics/Pictures/", "CG_#{@card_num}_#{@lie_shu * i + j}")
  70.         @pic[@lie_shu * i + j].x = 544 / @lie_shu * j
  71.         @pic[@lie_shu * i + j].y = 416 / @hang_shu * i
  72.         @pic[@lie_shu * i + j].zoom_x = 0.3
  73.         @pic[@lie_shu * i + j].zoom_y = 0.3
  74.       end
  75.     end
  76.     $temp_height = @pic[@command_window.index].bitmap.height * 0.3
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # * 更新帧
  80.   #--------------------------------------------------------------------------
  81.   def update   
  82.     super
  83.     @command_window.update
  84.     #----------------图片移动判定---------------------------------
  85.     if Input.dir4 != 0
  86.       $temp_height = @pic[@command_window.index].bitmap.height * 0.3
  87.       if @switch_pic == false
  88.         step_y = [0, 1, 2, 1, 0, 0, 0, -1 ,-2, -1]#移动阵列
  89.         step_x = [0, -1, 0, 1, -2, 0, 2, -1, 0, 1]         
  90.         @picture.x += step_x[Input.dir8]
  91.         @picture.y += step_y[Input.dir8]
  92.       end
  93.     #-----------------退出判定---------------------------------------
  94.     elsif Input.trigger?(Input::B)
  95.       if @switch_pic
  96.         return_scene
  97.       else
  98.         dis_pic
  99.       end
  100.     #-------------------选中判定--------------------------
  101.     elsif Input.trigger?(Input::C)
  102.       Sound.play_decision
  103.       if @switch_pic
  104.         @command_window.active = false
  105.         @switch_pic = false        
  106.         @picture.bitmap = Bitmap.new("Graphics/Pictures/CG_#{@card_num}_#{@command_window.index}")
  107.         @picture.x = 0
  108.         @picture.y = 0      
  109.         @picture.zoom_x =0.7
  110.         @picture.zoom_y =0.7
  111.       else
  112.         dis_pic
  113.       end
  114.     #-------------------缩放判定------------------------
  115.     elsif Input.trigger?(Input::L)#每次缩放 变动 0.1
  116.       @picture.zoom_x +=0.1
  117.       @picture.zoom_y +=0.1
  118.     elsif Input.trigger?(Input::R)
  119.       @picture.zoom_x -=0.1
  120.       @picture.zoom_y -=0.1
  121.     end
  122.   end
  123.   #----------------------关闭图片方法----------------------
  124.   def dis_pic
  125.     @picture.bitmap.dispose
  126.     @switch_pic = true
  127.     @command_window.active = true
  128.   end
  129. end

  130. #=====================================================
  131. # ** Window_CG
  132. #------------------------------------------------------------------------------
  133. #  为修改光标高度而定义
  134. #======================================================
  135. class Window_CG < Window_Command
  136.   
  137.   def initialize(width, commands, column_max = 1, row_max = 0, spacing = 32)
  138.     super(width, commands, column_max, row_max, spacing)
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # * 更新光标绘制
  142.   #--------------------------------------------------------------------------
  143.   def item_rect(index)
  144.     rect = Rect.new(0, 0, 0, 0)
  145.     rect.width = (contents.width + @spacing) / @column_max - @spacing
  146.     rect.height = $temp_height               #修改处
  147.     rect.x = index % @column_max * (rect.width + @spacing)
  148.     rect.y = index / @column_max * 416 / 2   #除以行数
  149.     return rect
  150.   end
  151. end

复制代码

作者: 夕阳武士    时间: 2010-9-21 06:29
其实说简陋也就是缩略图大小不同,lz做得确实不错,而且加上了项目名称,赞一个
作者: werhsqgl    时间: 2010-9-21 09:02
回复 ed2k 的帖子
其实说简陋也就是缩略图大小不同,lz做得确实不错,而且加上了项目名称,赞一个 ...
夕阳武士 发表于 2010-9-21 06:29

这位仁兄说其实说简陋也就是缩略图大小不同真的是很有见解。
如果在楼主在CG选单模式下继续套用选定的人物模式:
  1. def initialize(menu_index = 2)
  2.     @menu_index = menu_index
  3.     @card_size = 5                #项目数
  4.     @card_name = ["CG1", "CG2", "CG3","CG4","CG5"] #项目名
  5.     @card = []
  6.     @gow_x = []
  7.     @ji_shu_qi = 0      
  8.     @fu_hao = 1
  9.     @temp_y = 0
  10.   end
复制代码
瞎写写就是打个比方,高手勿喷

换句话说就是2次套用,将上面的人物图变为CG缩略图滚动式,就是不用阵列缩略图了。
点选之后在放大图片。
不知楼主意下如何?我只是随意说说有什么不对的地方也请楼主指出。
缺点就是人物越多,CG越多,子命令栏会做的越累。
作者: DeathKing    时间: 2010-9-21 12:54
很喜欢点选方法这个功能,效果不错哦。
放假后仔细观摩学习。
作者: ed2k    时间: 2010-9-21 13:07
本帖最后由 ed2k 于 2010-9-21 13:18 编辑

回复 夕阳武士 的帖子

其实是太懒,不想写了,毕竟还是用统一缩放率简单
不过如果统一图片大小的话,就可以变得很整齐了

回复 werhsqgl 的帖子

我也没想到套用选单的方法,我就想着模仿GAL里的结构了


PS:其实简陋是相对华丽

   
作者: werhsqgl    时间: 2010-9-21 13:14
本帖最后由 werhsqgl 于 2010-9-21 13:15 编辑

回复 ed2k 的帖子


    恩。。。特别喜欢楼主点选方法,同上上楼,放假后观摩学习下。
作者: 小幽的马甲    时间: 2010-9-21 17:52
很神奇的CG系统,赞一个{:nm_4:}
不过直接zoom_x/y果然感觉很奇怪……如果真的要使用的话我情愿用PS事先压缩下再在Sprite里调用
作者: summer92    时间: 2010-9-21 19:07
前来学习动态效果,其实vx完全可以更商业化一些使用那些商业游戏的动态效果嘛,嘛,只是没人愿意写脚本哦,想写的又没什么能力
作者: 仲秋启明    时间: 2010-9-26 12:58
以前没有,还以为要自己写一个呢
中秋假期万岁!!!
作者: moy    时间: 2010-9-29 05:15
看置顶很有好处,捡到宝了XD
作者: yangde    时间: 2010-10-10 12:02
提示: 作者被禁止或删除 内容自动屏蔽
作者: lcrlcr    时间: 2010-10-22 00:05
看着已经非常好了,感谢楼主分享~
作者: Majirefy    时间: 2010-10-22 15:39
很好很好,尤其是对于标题画面的修改很有感觉,突然又了一些灵感~~~
作者: 沉影不器    时间: 2010-10-22 19:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: ypkkjt    时间: 2010-12-31 01:44
:lol多谢了楼主
作者: jerrypan    时间: 2011-8-29 17:51
看来鉴赏消耗的图片不少啊,顺便问一下,可否鉴赏动画?!




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