Project1

标题: 【脚本】标题画面前选择是否全屏游戏 [打印本页]

作者: 芯☆淡茹水    时间: 2013-1-13 13:07
标题: 【脚本】标题画面前选择是否全屏游戏
本帖最后由 芯☆淡茹水 于 2013-1-13 16:34 编辑
  1. #============================================================================
  2. #★标题画面前选择是否全屏游戏
  3. #============================================================================
  4. #  by:芯☆淡茹水
  5. #============================================================================
  6. #◆此脚本在原有的标题画面前添加了一个选择是否全屏游戏的选择场景,一些必要的东
  7. #◆西如:战斗测试,还是挪到了这个场景里面。
  8. #----------------------------------------------------------------------------
  9. #◆使用方法:1.复制该脚本,插入到 Main 前。
  10. #            2.脚本 Main 第13行,原句:$scene = Scene_Scene_Title.new
  11. #                                改为:$scene = Scene_Xuanze.new
  12. #----------------------------------------------------------------------------
  13. #◆感谢“我爱吴悦淇”提供全屏的脚本代码。                                                
  14. #============================================================================
  15. # ■ Scene_Xuanze
  16. #----------------------------------------------------------------------------
  17. #  处理标题前选择的类。
  18. #============================================================================

  19. class Scene_Xuanze
  20.   #--------------------------------------------------------------------------
  21.   # ● 主处理
  22.   #--------------------------------------------------------------------------
  23.   def main
  24.     # 战斗测试的情况下
  25.     if $BTEST
  26.       battle_test
  27.       return
  28.     end
  29.     # 载入数据库
  30.     $data_actors        = load_data("Data/Actors.rxdata")
  31.     $data_classes       = load_data("Data/Classes.rxdata")
  32.     $data_skills        = load_data("Data/Skills.rxdata")
  33.     $data_items         = load_data("Data/Items.rxdata")
  34.     $data_weapons       = load_data("Data/Weapons.rxdata")
  35.     $data_armors        = load_data("Data/Armors.rxdata")
  36.     $data_enemies       = load_data("Data/Enemies.rxdata")
  37.     $data_troops        = load_data("Data/Troops.rxdata")
  38.     $data_states        = load_data("Data/States.rxdata")
  39.     $data_animations    = load_data("Data/Animations.rxdata")
  40.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
  41.     $data_common_events = load_data("Data/CommonEvents.rxdata")
  42.     $data_system        = load_data("Data/System.rxdata")
  43.     # 生成系统对像
  44.     $game_system = Game_System.new
  45.     # 生成命令窗口
  46.     s1 = "是"
  47.     s2 = "否"
  48.     @command_window = Window_Command.new(192, [s1, s2])
  49.     @command_window.back_opacity = 160
  50.     @command_window.x = 320 - @command_window.width / 2
  51.     @command_window.y = 220
  52.     # 生成提示窗口
  53.     @tishi_window = Window_Tishi.new
  54.     @tishi_window.back_opacity = 160
  55.     @tishi_window.x = 320 - @tishi_window.width / 2
  56.     @tishi_window.y = 162
  57.     # 执行过渡
  58.     Graphics.transition
  59.     # 主循环
  60.     loop do
  61.       # 刷新游戏画面
  62.       Graphics.update
  63.       # 刷新输入信息
  64.       Input.update
  65.       # 刷新画面
  66.       update
  67.       # 如果画面被切换就中断循环
  68.       if $scene != self
  69.         break
  70.       end
  71.     end
  72.     # 准备过渡
  73.     Graphics.freeze
  74.     # 释放窗口
  75.     @tishi_window.dispose
  76.     @command_window.dispose
  77.   end
  78.   #--------------------------------------------------------------------------
  79.   # ● 刷新画面
  80.   #--------------------------------------------------------------------------
  81.   def update
  82.     # 刷新命令窗口
  83.     @command_window.update
  84.     # 按下 C 键的情况下
  85.     if Input.trigger?(Input::C)
  86.       # 命令窗口的光标位置的分支
  87.       case @command_window.index
  88.       when 0  # 是
  89.         # 全屏化
  90.         $keybd = Win32API.new('user32', 'keybd_event', ['i', 'i', 'l', 'l'], 'v')
  91.         $keybd.call(0xA4, 0, 0, 0)
  92.         $keybd.call(13, 0, 0, 0)
  93.         $keybd.call(13, 0, 2, 0)
  94.         $keybd.call(0xA4, 0, 2, 0)
  95.         # 切换到标题画面
  96.         $scene = Scene_Title.new
  97.       when 1  # 否
  98.         # 切换到标题画面
  99.         $scene = Scene_Title.new
  100.       end
  101.     end
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 战斗测试
  105.   #--------------------------------------------------------------------------
  106.   def battle_test
  107.     # 载入数据库 (战斗测试用)
  108.     $data_actors        = load_data("Data/BT_Actors.rxdata")
  109.     $data_classes       = load_data("Data/BT_Classes.rxdata")
  110.     $data_skills        = load_data("Data/BT_Skills.rxdata")
  111.     $data_items         = load_data("Data/BT_Items.rxdata")
  112.     $data_weapons       = load_data("Data/BT_Weapons.rxdata")
  113.     $data_armors        = load_data("Data/BT_Armors.rxdata")
  114.     $data_enemies       = load_data("Data/BT_Enemies.rxdata")
  115.     $data_troops        = load_data("Data/BT_Troops.rxdata")
  116.     $data_states        = load_data("Data/BT_States.rxdata")
  117.     $data_animations    = load_data("Data/BT_Animations.rxdata")
  118.     $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
  119.     $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
  120.     $data_system        = load_data("Data/BT_System.rxdata")
  121.     # 重置测量游戏时间用的画面计数器
  122.     Graphics.frame_count = 0
  123.     # 生成各种游戏对像
  124.     $game_temp          = Game_Temp.new
  125.     $game_system        = Game_System.new
  126.     $game_switches      = Game_Switches.new
  127.     $game_variables     = Game_Variables.new
  128.     $game_self_switches = Game_SelfSwitches.new
  129.     $game_screen        = Game_Screen.new
  130.     $game_actors        = Game_Actors.new
  131.     $game_party         = Game_Party.new
  132.     $game_troop         = Game_Troop.new
  133.     $game_map           = Game_Map.new
  134.     $game_player        = Game_Player.new
  135.     # 设置战斗测试用同伴
  136.     $game_party.setup_battle_test_members
  137.     # 设置队伍 ID、可以逃走标志、战斗背景
  138.     $game_temp.battle_troop_id = $data_system.test_troop_id
  139.     $game_temp.battle_can_escape = true
  140.     $game_map.battleback_name = $data_system.battleback_name
  141.     # 演奏战斗开始 BGM
  142.     $game_system.se_play($data_system.battle_start_se)
  143.     # 演奏战斗 BGM
  144.     $game_system.bgm_play($game_system.battle_bgm)
  145.     # 切换到战斗画面
  146.     $scene = Scene_Battle.new
  147.   end
  148. end
  149. #==============================================================================
  150. # ■ Scene_Title
  151. #------------------------------------------------------------------------------
  152. #  处理标题画面的类。
  153. #==============================================================================

  154. class Scene_Title
  155.   #--------------------------------------------------------------------------
  156.   # ● 主处理
  157.   #--------------------------------------------------------------------------
  158.   def main
  159.     # 生成标题图形
  160.     @sprite = Sprite.new
  161.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
  162.     # 生成命令窗口
  163.     s1 = "新游戏"
  164.     s2 = "继续"
  165.     s3 = "退出"
  166.     @command_window = Window_Command.new(192, [s1, s2, s3])
  167.     @command_window.back_opacity = 160
  168.     @command_window.x = 320 - @command_window.width / 2
  169.     @command_window.y = 288
  170.     # 判定继续的有效性
  171.     # 存档文件一个也不存在的时候也调查
  172.     # 有効为 @continue_enabled 为 true、无效为 false
  173.     @continue_enabled = false
  174.     for i in 0..3
  175.       if FileTest.exist?("Save#{i+1}.rxdata")
  176.         @continue_enabled = true
  177.       end
  178.     end
  179.     # 继续为有效的情况下、光标停止在继续上
  180.     # 无效的情况下、继续的文字显示为灰色
  181.     if @continue_enabled
  182.       @command_window.index = 1
  183.     else
  184.       @command_window.disable_item(1)
  185.     end
  186.     # 演奏标题 BGM
  187.     $game_system.bgm_play($data_system.title_bgm)
  188.     # 停止演奏 ME、BGS
  189.     Audio.me_stop
  190.     Audio.bgs_stop
  191.     # 执行过渡
  192.     Graphics.transition
  193.     # 主循环
  194.     loop do
  195.       # 刷新游戏画面
  196.       Graphics.update
  197.       # 刷新输入信息
  198.       Input.update
  199.       # 刷新画面
  200.       update
  201.       # 如果画面被切换就中断循环
  202.       if $scene != self
  203.         break
  204.       end
  205.     end
  206.     # 装备过渡
  207.     Graphics.freeze
  208.     # 释放命令窗口
  209.     @command_window.dispose
  210.     # 释放标题图形
  211.     @sprite.bitmap.dispose
  212.     @sprite.dispose
  213.   end
  214.   #--------------------------------------------------------------------------
  215.   # ● 刷新画面
  216.   #--------------------------------------------------------------------------
  217.   def update
  218.     # 刷新命令窗口
  219.     @command_window.update
  220.     # 按下 C 键的情况下
  221.     if Input.trigger?(Input::C)
  222.       # 命令窗口的光标位置的分支
  223.       case @command_window.index
  224.       when 0  # 新游戏
  225.         command_new_game
  226.       when 1  # 继续
  227.         command_continue
  228.       when 2  # 退出
  229.         command_shutdown
  230.       end
  231.     end
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ● 命令 : 新游戏
  235.   #--------------------------------------------------------------------------
  236.   def command_new_game
  237.     # 演奏确定 SE
  238.     $game_system.se_play($data_system.decision_se)
  239.     # 停止 BGM
  240.     Audio.bgm_stop
  241.     # 重置测量游戏时间用的画面计数器
  242.     Graphics.frame_count = 0
  243.     # 生成各种游戏对像
  244.     $game_temp          = Game_Temp.new
  245.     $game_system        = Game_System.new
  246.     $game_switches      = Game_Switches.new
  247.     $game_variables     = Game_Variables.new
  248.     $game_self_switches = Game_SelfSwitches.new
  249.     $game_screen        = Game_Screen.new
  250.     $game_actors        = Game_Actors.new
  251.     $game_party         = Game_Party.new
  252.     $game_troop         = Game_Troop.new
  253.     $game_map           = Game_Map.new
  254.     $game_player        = Game_Player.new
  255.     # 设置初期同伴位置
  256.     $game_party.setup_starting_members
  257.     # 设置初期位置的地图
  258.     $game_map.setup($data_system.start_map_id)
  259.     # 主角向初期位置移动
  260.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  261.     # 刷新主角
  262.     $game_player.refresh
  263.     # 执行地图设置的 BGM 与 BGS 的自动切换
  264.     $game_map.autoplay
  265.     # 刷新地图 (执行并行事件)
  266.     $game_map.update
  267.     # 切换地图画面
  268.     $scene = Scene_Map.new
  269.   end
  270.   #--------------------------------------------------------------------------
  271.   # ● 命令 : 继续
  272.   #--------------------------------------------------------------------------
  273.   def command_continue
  274.     # 继续无效的情况下
  275.     unless @continue_enabled
  276.       # 演奏无效 SE
  277.       $game_system.se_play($data_system.buzzer_se)
  278.       return
  279.     end
  280.     # 演奏确定 SE
  281.     $game_system.se_play($data_system.decision_se)
  282.     # 切换到读档画面
  283.     $scene = Scene_Load.new
  284.   end
  285.   #--------------------------------------------------------------------------
  286.   # ● 命令 : 退出
  287.   #--------------------------------------------------------------------------
  288.   def command_shutdown
  289.     # 演奏确定 SE
  290.     $game_system.se_play($data_system.decision_se)
  291.     # BGM、BGS、ME 的淡入淡出
  292.     Audio.bgm_fade(800)
  293.     Audio.bgs_fade(800)
  294.     Audio.me_fade(800)
  295.     # 退出
  296.     $scene = nil
  297.   end
  298. end
  299. #==============================================================================
  300. # ■ Window_Tishi
  301. #------------------------------------------------------------------------------
  302. #  显示提示的窗口。
  303. #==============================================================================

  304. class Window_Tishi < Window_Base
  305.   #--------------------------------------------------------------------------
  306.   # ● 初始化窗口
  307.   #--------------------------------------------------------------------------
  308.   def initialize
  309.     super(0, 0, 192, 58)
  310.     self.contents = Bitmap.new(width - 32, height - 32)
  311.     refresh
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # ● 刷新
  315.   #--------------------------------------------------------------------------
  316.   def refresh
  317.     self.contents.clear
  318.     self.contents.font.color = normal_color
  319.     self.contents.draw_text(0,-12, 172, 52, "是否全屏进入游戏?")
  320.   end
  321. end
复制代码
效果:




  刚刚由于失误,脚本里有个错误的地方,现已改。
作者: 原野清平    时间: 2013-1-13 13:50
直接Alt+Enter不就行了吗,游戏前搞个字幕告诉玩家怎么全屏就好啊……
作者: 315038639    时间: 2013-1-13 14:26
本帖最后由 315038639 于 2013-1-13 14:30 编辑

同意楼上……虽然LZ很辛苦,但确实感觉有点不实用……

而且游戏还没有开始就弹出一个对话框有点不协调……
不过LZ可以外套一个程序……生成游戏窗口之前询问一下比较好……

RM本身的全屏不过就是把小窗口拉伸一下……会不清楚……所以像我们做的不需要大力渲染气氛的话,小游戏窗口就完全可以了。
作者: 黑舞嗜    时间: 2013-1-13 15:27
而且这个脚本和图片标题冲突....
作者: eve592370698    时间: 2013-1-13 16:16
这个脚本我非常支持,比那种流氓性的强制全屏好多了!真的。
不过我正好处理一下然后整合入我的RGSS1.03a中。
作者: 315038639    时间: 2013-1-13 20:41
不是说标题画面的问题……是游戏窗口……就是你对话框显示的那个黑屏……需要打开这个窗口才能运行脚本,这个窗口就多余了。
作者: serena718    时间: 2013-1-13 20:58
現在大部分顯卡的解析度都很高,動不動就1280*960以上
RM的640*480看起來實在疼得可以,雖然有分辨率擴展,但那個效率啊我去。。。
全屏雖然只是畫面拉伸,會模糊,但總比一個小視窗來的好
作者: 精灵使者    时间: 2013-1-14 09:19
精灵温馨提示:
可以通过跳过标题脚本来做LOGO和这些事情
作者: 英顺的马甲    时间: 2013-1-14 23:16
建议直接
  1. @tishi_window = Window_Base.new(0, 0, 192, 58)
  2. @tishi_window.content = Bitmap.new(160,26)
  3. @tishi_window.draw_text(0,-12, 172, 52, "是否全屏进入游戏?")
  4. @tishi_window.back_opacity = 160
  5. @tishi_window.x = 320 - @tishi_window.width / 2
  6. @tishi_window.y = 162
复制代码
p/s:此脚本还有非常大的进步空间。
但是只要肯尝试就是好事==
作者: KUNGE123456    时间: 2013-2-24 20:38
选择是否全屏前如果已经全屏
则按是变成窗口模式,按否依然全屏
作者: Angeliclovewind    时间: 2013-3-12 12:11
老天啊,我还以为弄个全屏只要几句脚本就可以了,没想到要这——么一大长串……
拿回家去看看效果如何。
作者: torysir    时间: 2021-11-3 00:06
英顺的马甲 发表于 2013-1-14 23:16
建议直接p/s:此脚本还有非常大的进步空间。
但是只要肯尝试就是好事==

大佬,请问我已经调到800*600分辨率,但是全屏的话画面会丢失一部分,也就是说,全屏状态下默认640*480,请问怎么解决这个问题




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