设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: 赛露休斯
打印 上一主题 下一主题

关于选项窗口的问题

 关闭 [复制链接]

Lv1.梦旅人

魔王 ⑨

梦石
0
星屑
90
在线时间
379 小时
注册时间
2006-10-16
帖子
4299

贵宾

31
发表于 2009-2-15 17:31:59 | 只看该作者
以下引用水蓝于2009-2-14 23:53:02的发言:


以下引用赛露休斯于2009-2-14 23:45:41的发言:


以下引用水蓝于2009-2-14 23:41:32的发言:

不是,用脚本,说白了就是在WINDOW里显示两个箭头的图像


如果到时等不到高手来解答,看来也只能用这个方法了
其实我是想做个没选项的横项翻页脚本


[本贴由作者于 2009-2-14 23:46:30 最后编辑]


pm3535,问问他她?

就算这样也是要新建一个窗口的,因为窗口显示限制空间 -32的那个
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
275
在线时间
1373 小时
注册时间
2005-10-16
帖子
5113

贵宾

32
发表于 2009-2-15 17:39:08 | 只看该作者
window的contents只要高于window的宽-32和高-32就会在右和下 出现箭头,如果适当修改window的ox和oy属性就可以让这个箭头出现在想出现的地方了。
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
33
发表于 2009-2-15 20:58:35 | 只看该作者
  1. #==============================================================================
  2. # ■ Window_Command
  3. #------------------------------------------------------------------------------
  4. #  一般的命令选择行窗口。
  5. #==============================================================================

  6. class Window_Command1 < Window_Selectable
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     width    : 窗口的宽
  10.   #     commands : 命令字符串序列
  11.   #--------------------------------------------------------------------------
  12.   def initialize(width, commands)
  13.     # 由命令的个数计算出窗口的高
  14.     super(0, 0, 200,120)
  15.     @item_max = commands.size
  16.     @commands = commands
  17.     self.contents = Bitmap.new(width ,32)
  18.     refresh
  19.     self.index = 0
  20.    
  21.      #@item_max = 0
  22.     #@column_max = 1
  23.     #@index = -1
  24.    
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 刷新
  28.   #--------------------------------------------------------------------------
  29.   def refresh
  30.     self.contents.clear
  31.     for i in 0...@item_max
  32.       draw_item(i, normal_color)
  33.     end
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 描绘项目
  37.   #     index : 项目编号
  38.   #     color : 文字色
  39.   #--------------------------------------------------------------------------
  40.   def draw_item(index, color)
  41.     self.contents.font.color = color
  42.    
  43.     rect = Rect.new(72*index, 3, 64 , 32)
  44.   
  45.    
  46.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  47.     self.contents.draw_text(rect, @commands[index])
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 项目无效化
  51.   #     index : 项目编号
  52.   #--------------------------------------------------------------------------
  53.   def disable_item(index)
  54.     draw_item(index, disabled_color)
  55.   end
  56.    def row_max
  57.     # 由项目数和列数计算出行数
  58.     return 3#(@item_max + @column_max - 1) / @column_max
  59.   end
  60.   #--------------------------------------------------------------------------
  61.   # ● 获取开头行
  62.   #--------------------------------------------------------------------------
  63.   def top_row
  64.     # 将窗口内容的传送源 Y 坐标、1 行的高 32 等分
  65.     return index*64#self.ox / 64
  66.   end
  67.   def top_row=(row)
  68.     # row 未满 0 的场合更正为 0
  69.     if row < 0
  70.       row = 0
  71.     end
  72.      
  73.     # row 超过 row_max - 1 的情况下更正为 row_max - 1
  74.     if row > row_max - 1
  75.       row = row_max - 1
  76.     end
  77.     # row 1 行高的 32 倍、窗口内容的传送源 Y 坐标
  78.    if row >= 0
  79.     self.ox = row * 64
  80.   end
  81.   
  82.   
  83.   end
  84.   
  85.   
  86.   #--------------------------------------------------------------------------
  87.   # ● 获取 1 页可以显示的行数
  88.   #--------------------------------------------------------------------------
  89.   def page_row_max
  90.     # 窗口的高度,设置画面的高度减去 32 ,除以 1 行的高度 32
  91.     return 2# (self.height - 32) / 32
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 获取 1 页可以显示的项目数
  95.   #--------------------------------------------------------------------------
  96.   def page_item_max
  97.     # 将行数 page_row_max 乘上列数 @column_max
  98.     return page_row_max * @column_max
  99.   end
  100.   
  101.     def update_cursor_rect
  102.     row = index  
  103.    if row <= self.top_row
  104.       # 从当前行向开头行滚动
  105.       self.top_row = row
  106.     end
  107.     # 当前行被显示末尾行之后的情况下
  108.     if row > self.top_row + (self.page_row_max - 1)
  109.       # 从当前行向末尾滚动
  110.       self.top_row = row - (self.page_row_max - 1)
  111.     end
  112.    
  113.       
  114.     # 计算光标的宽
  115.     cursor_width =  64#self.width / @column_max - 32
  116.     # 计算光标坐标
  117.     y = 1#@index % @column_max * (cursor_width + 32)
  118.     x = 1#@index / @column_max * 65 - self.ox
  119.     # 更新国标矩形
  120.     self.cursor_rect.set(x, y, cursor_width, 32)
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 刷新画面
  124.   #--------------------------------------------------------------------------
  125.   def update
  126.     super
  127.     # 可以移动光标的情况下
  128.     if self.active #and @item_max > 0 and @index >= 0
  129.       # 方向键下被按下的情况下
  130.       if Input.repeat?(Input::DOWN)
  131.         # 列数不是 1 并且方向键的下的按下状态不是重复的情况、
  132.         # 或光标位置在(项目数-列数)之前的情况下
  133.         if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
  134.            @index < @item_max - @column_max
  135.           # 光标向下移动
  136.           $game_system.se_play($data_system.cursor_se)
  137.          if @index < 2
  138.           @index +=1
  139.         else
  140.           @index = 0
  141.         end
  142.         #(@index - @column_max + @item_max) % @item_max
  143.         end
  144.       end
  145.       # 方向键上被按下的情况下
  146.       if Input.repeat?(Input::UP)
  147.         # 列数不是 1 并且方向键的下的按下状态不是重复的情况、
  148.         # 或光标位置在列之后的情况下
  149.         if (@column_max == 1 and Input.trigger?(Input::UP)) or
  150.            @index >= @column_max
  151.           # 光标向上移动
  152.           $game_system.se_play($data_system.cursor_se)
  153.       
  154.       
  155.              if @index > 0 and @column_max == 1
  156.          @index -=1
  157.        else
  158.          @index = 2
  159.        end
  160.        #(@index + @column_max) % @item_max
  161.         end
  162.       end
  163.       # 方向键右被按下的情况下
  164.       if Input.repeat?(Input::RIGHT)
  165.         # 列数为 2 以上并且、光标位置在(项目数 - 1)之前的情况下
  166.       # if @column_max >= 2 and @index < @item_max - 1
  167.           # 光标向右移动
  168.           $game_system.se_play($data_system.cursor_se)
  169.           if @index < 2
  170.           @index +=1
  171.         else
  172.           @index = 0
  173.         end
  174.         #end
  175.       end
  176.       # 方向键左被按下的情况下
  177.       if Input.repeat?(Input::LEFT)
  178.         # 列数为 2 以上并且、光标位置在 0 之后的情况下
  179.         #if @column_max >= 2 and @index > 0
  180.           # 光标向左移动
  181.           $game_system.se_play($data_system.cursor_se)
  182.           if @index > 0
  183.          @index -=1
  184.        else
  185.          @index = 2
  186.        end
  187.         #end
  188.       end
  189.       # R 键被按下的情况下
  190.       if Input.repeat?(Input::R)
  191.         # 显示的最后行在数据中最后行上方的情况下
  192.         if self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
  193.           # 光标向后移动一页
  194.           $game_system.se_play($data_system.cursor_se)
  195.           @index = [@index + self.page_item_max, @item_max - 1].min
  196.           self.top_row += self.page_row_max
  197.         end
  198.       end
  199.       # L 键被按下的情况下
  200.       if Input.repeat?(Input::L)
  201.         # 显示的开头行在位置 0 之后的情况下
  202.         if self.top_row > 0
  203.           # 光标向前移动一页
  204.           $game_system.se_play($data_system.cursor_se)
  205.           @index = [@index - self.page_item_max, 0].max
  206.           self.top_row -= self.page_row_max
  207.         end
  208.       end
  209.     end
  210.     # 刷新帮助文本 (update_help 定义了继承目标)
  211.     if self.active and @help_window != nil
  212.       update_help
  213.     end
  214.     # 刷新光标矩形
  215.     update_cursor_rect
  216.   end
  217. end
复制代码


放在Window_Command下面

  1. #==============================================================================
  2. # ■ Scene_Title
  3. #------------------------------------------------------------------------------
  4. #  处理标题画面的类。
  5. #==============================================================================

  6. class Scene_Title
  7.   #--------------------------------------------------------------------------
  8.   # ● 住处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 战斗测试的情况下
  12.     if $BTEST
  13.       battle_test
  14.       return
  15.     end
  16.     # 载入数据库
  17.     $data_actors        = load_data("Data/Actors.rxdata")
  18.     $data_classes       = load_data("Data/Classes.rxdata")
  19.     $data_skills        = load_data("Data/Skills.rxdata")
  20.     $data_items         = load_data("Data/Items.rxdata")
  21.     $data_weapons       = load_data("Data/Weapons.rxdata")
  22.     $data_armors        = load_data("Data/Armors.rxdata")
  23.     $data_enemies       = load_data("Data/Enemies.rxdata")
  24.     $data_troops        = load_data("Data/Troops.rxdata")
  25.     $data_states        = load_data("Data/States.rxdata")
  26.     $data_animations    = load_data("Data/Animations.rxdata")
  27.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
  28.     $data_common_events = load_data("Data/CommonEvents.rxdata")
  29.     $data_system        = load_data("Data/System.rxdata")
  30.     # 生成系统对像
  31.     $game_system = Game_System.new
  32.     # 生成标题图形
  33.     @sprite = Sprite.new
  34.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
  35.     # 生成命令窗口
  36.     s1 = "新游戏"
  37.     s2 = "继续"
  38.     s3 = "退出"
  39.     @command_window = Window_Command1.new(192, [s1, s2, s3])
  40.     @command_window.back_opacity = 160
  41.     @command_window.x = 320 #- @command_window.width / 2
  42.     @command_window.y = 288
  43.     @command_window.width = 100
  44.      @command_window.height = 67
  45.     # 判定继续的有效性
  46.     # 存档文件一个也不存在的时候也调查
  47.     # 有効为 @continue_enabled 为 true、無効为 false
  48.     @continue_enabled = false
  49.     for i in 0..3
  50.       if FileTest.exist?("Save#{i+1}.rxdata")
  51.         @continue_enabled = true
  52.       end
  53.     end
  54.     # 继续为有效的情况下、光标停止在继续上
  55.     # 无效的情况下、继续的文字显示为灰色
  56.     if @continue_enabled
  57.       @command_window.index = 1
  58.     else
  59.       @command_window.disable_item(1)
  60.     end
  61.     # 演奏标题 BGM
  62.     $game_system.bgm_play($data_system.title_bgm)
  63.     # 停止演奏 ME、BGS
  64.     Audio.me_stop
  65.     Audio.bgs_stop
  66.     # 执行过渡
  67.     Graphics.transition
  68.     # 主循环
  69.     loop do
  70.       # 刷新游戏画面
  71.       Graphics.update
  72.       # 刷新输入信息
  73.       Input.update
  74.       # 刷新画面
  75.       update
  76.       # 如果画面被切换就中断循环
  77.       if $scene != self
  78.         break
  79.       end
  80.     end
  81.     # 装备过渡
  82.     Graphics.freeze
  83.     # 释放命令窗口
  84.     @command_window.dispose
  85.     # 释放标题图形
  86.     @sprite.bitmap.dispose
  87.     @sprite.dispose
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 刷新画面
  91.   #--------------------------------------------------------------------------
  92.   def update
  93.     # 刷新命令窗口
  94.     @command_window.update
  95.     # 按下 C 键的情况下
  96.     if Input.trigger?(Input::C)
  97.       # 命令窗口的光标位置的分支
  98.       case @command_window.index
  99.       when 0  # 新游戏
  100.         command_new_game
  101.       when 1  # 继续
  102.         command_continue
  103.       when 2  # 退出
  104.         command_shutdown
  105.       end
  106.     end
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 命令 : 新游戏
  110.   #--------------------------------------------------------------------------
  111.   def command_new_game
  112.     # 演奏确定 SE
  113.     $game_system.se_play($data_system.decision_se)
  114.     # 停止 BGM
  115.     Audio.bgm_stop
  116.     # 重置测量游戏时间用的画面计数器
  117.     Graphics.frame_count = 0
  118.     # 生成各种游戏对像
  119.     $game_temp          = Game_Temp.new
  120.     $game_system        = Game_System.new
  121.     $game_switches      = Game_Switches.new
  122.     $game_variables     = Game_Variables.new
  123.     $game_self_switches = Game_SelfSwitches.new
  124.     $game_screen        = Game_Screen.new
  125.     $game_actors        = Game_Actors.new
  126.     $game_party         = Game_Party.new
  127.     $game_troop         = Game_Troop.new
  128.     $game_map           = Game_Map.new
  129.     $game_player        = Game_Player.new
  130.     # 设置初期同伴位置
  131.     $game_party.setup_starting_members
  132.     # 设置初期位置的地图
  133.     $game_map.setup($data_system.start_map_id)
  134.     # 主角向初期位置移动
  135.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  136.     # 刷新主角
  137.     $game_player.refresh
  138.     # 执行地图设置的 BGM 与 BGS 的自动切换
  139.     $game_map.autoplay
  140.     # 刷新地图 (执行并行事件)
  141.     $game_map.update
  142.     # 切换地图画面
  143.     $scene = Scene_Map.new
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ● 命令 : 继续
  147.   #--------------------------------------------------------------------------
  148.   def command_continue
  149.     # 继续无效的情况下
  150.     unless @continue_enabled
  151.       # 演奏无效 SE
  152.       $game_system.se_play($data_system.buzzer_se)
  153.       return
  154.     end
  155.     # 演奏确定 SE
  156.     $game_system.se_play($data_system.decision_se)
  157.     # 切换到读档画面
  158.     $scene = Scene_Load.new
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 命令 : 退出
  162.   #--------------------------------------------------------------------------
  163.   def command_shutdown
  164.     # 演奏确定 SE
  165.     $game_system.se_play($data_system.decision_se)
  166.     # BGM、BGS、ME 的淡入淡出
  167.     Audio.bgm_fade(800)
  168.     Audio.bgs_fade(800)
  169.     Audio.me_fade(800)
  170.     # 退出
  171.     $scene = nil
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ● 战斗测试
  175.   #--------------------------------------------------------------------------
  176.   def battle_test
  177.     # 载入数据库 (战斗测试用)
  178.     $data_actors        = load_data("Data/BT_Actors.rxdata")
  179.     $data_classes       = load_data("Data/BT_Classes.rxdata")
  180.     $data_skills        = load_data("Data/BT_Skills.rxdata")
  181.     $data_items         = load_data("Data/BT_Items.rxdata")
  182.     $data_weapons       = load_data("Data/BT_Weapons.rxdata")
  183.     $data_armors        = load_data("Data/BT_Armors.rxdata")
  184.     $data_enemies       = load_data("Data/BT_Enemies.rxdata")
  185.     $data_troops        = load_data("Data/BT_Troops.rxdata")
  186.     $data_states        = load_data("Data/BT_States.rxdata")
  187.     $data_animations    = load_data("Data/BT_Animations.rxdata")
  188.     $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
  189.     $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
  190.     $data_system        = load_data("Data/BT_System.rxdata")
  191.     # 重置测量游戏时间用的画面计数器
  192.     Graphics.frame_count = 0
  193.     # 生成各种游戏对像
  194.     $game_temp          = Game_Temp.new
  195.     $game_system        = Game_System.new
  196.     $game_switches      = Game_Switches.new
  197.     $game_variables     = Game_Variables.new
  198.     $game_self_switches = Game_SelfSwitches.new
  199.     $game_screen        = Game_Screen.new
  200.     $game_actors        = Game_Actors.new
  201.     $game_party         = Game_Party.new
  202.     $game_troop         = Game_Troop.new
  203.     $game_map           = Game_Map.new
  204.     $game_player        = Game_Player.new
  205.     # 设置战斗测试用同伴
  206.     $game_party.setup_battle_test_members
  207.     # 设置队伍 ID、可以逃走标志、战斗背景
  208.     $game_temp.battle_troop_id = $data_system.test_troop_id
  209.     $game_temp.battle_can_escape = true
  210.     $game_map.battleback_name = $data_system.battleback_name
  211.     # 演奏战斗开始 BGM
  212.     $game_system.se_play($data_system.battle_start_se)
  213.     # 演奏战斗 BGM
  214.     $game_system.bgm_play($game_system.battle_bgm)
  215.     # 切换到战斗画面
  216.     $scene = Scene_Battle.new
  217.   end
  218. end
复制代码


放在Scene_Title1下面

先用默认脚本试试


三角掉过来了 是这样的意思吧?
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

曾经我也是一个有志青年,直到我膝盖中了一箭……

《隋唐乱》博客地址
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
帖子
643
34
 楼主| 发表于 2009-2-16 01:34:22 | 只看该作者
以下引用redant于2009-2-15 12:58:35的发言:
先用默认脚本试试

三角掉过来了 是这样的意思吧?

嗯!是这个意思,不愧为版主
不过当窗口的高度拉长后就如下图所示,选项也变横向了。最好是选项为纵向,而三角为横向
最近在研究XAS
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
142
在线时间
264 小时
注册时间
2006-11-22
帖子
1057
35
发表于 2009-2-16 01:56:13 | 只看该作者
  def initialize(width, commands)
    # 由命令的個數計算出視窗的高度
    super(0, 0, width, commands.size * 32 + 32)
    @item_max = commands.size
    @commands = commands
    self.contents = Bitmap.new(width+32, @item_max * 32)
    self.ox = 32
    self.back_opacity = 160
    refresh
    self.index = 0
  end
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
1 小时
注册时间
2008-5-1
帖子
364
36
发表于 2009-2-16 02:33:31 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

蚂蚁卡卡

梦石
0
星屑
116
在线时间
66 小时
注册时间
2007-12-16
帖子
3081
37
发表于 2009-2-16 02:34:24 | 只看该作者

两个三角 是说明 左边和右边还有选项的意思

有点知道你要干什么了 PS个效果图吧 我看看




3535的签名图 好大 = =
《隋唐乱》完整解密版点击进入
米兰,让我怎么说离开……

曾经我也是一个有志青年,直到我膝盖中了一箭……

《隋唐乱》博客地址
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
帖子
643
38
 楼主| 发表于 2009-2-16 02:38:29 | 只看该作者
3535的方法还是不行,那个左右三角不是一直出现的,是当纵向超出范围后对应的小三角出现在横向(也就是左右三角)
最近在研究XAS
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-16 12:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表