Project1

标题: VX开头特效的问题 [打印本页]

作者: 水野·迪尔    时间: 2008-6-5 07:17
标题: VX开头特效的问题
  1. #==============================================================================
  2. # ■ Scene_Title
  3. #------------------------------------------------------------------------------
  4. #  タイトル画面の処理を行うクラスです。
  5. #==============================================================================

  6. class Scene_Title < Scene_Base
  7.   WEATHER = 4     # 使用自定义效果(0:无,1:雨,2:暴风雨,3:雪,4:自定义)
  8.   MAXNUMBER = 18  # 天气图片数量
  9.   
  10.   WEATHER_FILE = "Graphics/Pictures/Title_starlong.png"
  11.   # 自定义图片路径,这个文件是流星雨
  12.   
  13.   BLEND_TYPE = 1 # 合成方式(0:普通,1:加法,2:减法)
  14.   WEATHER_X = 5 # X方向每回合减少象素
  15.   WEATHER_Y = 5 # Y方向每回合减少象素
  16.   WEATHER_OPACITY = 2 #每回合减低透明度
  17.   START_OPACITY = 200 #出现时的透明度
  18.   RAND_X = 1200 # 随机X范围
  19.   RAND_Y = 600 # 随机Y范围
  20.   HEIGHT = -600 # 出现时候的屏幕Y
  21.   WIDTH = 100 # 出现时候的屏幕X
  22.   #--------------------------------------------------------------------------
  23.   # ● メイン処理
  24.   #--------------------------------------------------------------------------
  25.   def main
  26.     if $BTEST                         # 戦闘テストの場合
  27.       battle_test                     # 戦闘テストの開始処理
  28.     else                              # 通常のプレイの場合
  29.       super                           # 本来のメイン処理
  30.     end
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 開始処理
  34.   #--------------------------------------------------------------------------
  35.   def start
  36.     super
  37.     load_database                     # データベースをロード
  38.     create_game_objects               # ゲームオブジェクトを作成
  39.     check_continue                    # コンティニュー有効判定
  40.     create_title_graphic   # タイトルグラフィックを作成
  41.     @ox = 0
  42.     @oy = 0
  43.     color1 = Color.new(255, 255, 255, 255)
  44.     color2 = Color.new(255, 255, 255, 128)
  45.     @rain_bitmap = Bitmap.new(7, 56)
  46.     for i in 0..6
  47.       @rain_bitmap.fill_rect(6-i, i*8, 1, 8, color1)
  48.     end
  49.     @storm_bitmap = Bitmap.new(34, 64)
  50.     for i in 0..31
  51.       @storm_bitmap.fill_rect(33-i, i*2, 1, 2, color2)
  52.       @storm_bitmap.fill_rect(32-i, i*2, 1, 2, color1)
  53.       @storm_bitmap.fill_rect(31-i, i*2, 1, 2, color2)
  54.     end
  55.     @snow_bitmap = Bitmap.new(6, 6)
  56.     @snow_bitmap.fill_rect(0, 1, 6, 4, color2)
  57.     @snow_bitmap.fill_rect(1, 0, 4, 6, color2)
  58.     @snow_bitmap.fill_rect(1, 2, 4, 2, color1)
  59.     @snow_bitmap.fill_rect(2, 1, 2, 4, color1)
  60.     @sprites = []
  61.     for i in 1..40
  62.       sprite = Sprite.new
  63.       case WEATHER
  64.       when 1
  65.         sprite.bitmap = @rain_bitmap
  66.       when 2
  67.         sprite.bitmap = @storm_bitmap
  68.       when 3
  69.         sprite.bitmap = @snow_bitmap
  70.       when 4
  71.         sprite.bitmap = Bitmap.new(WEATHER_FILE)
  72.       end
  73.       sprite.z = 1000
  74.       sprite.x = -1000
  75.       sprite.y = -1000
  76.       sprite.visible = (i <= MAXNUMBER)
  77.       sprite.blend_type = BLEND_TYPE
  78.       sprite.opacity = START_OPACITY
  79.       @sprites.push(sprite)
  80.     end
  81.     weather_update
  82.     create_command_window             # コマンドウィンドウを作成
  83.     play_title_music                  # タイトル画面の音楽を演奏
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● トランジション実行
  87.   #--------------------------------------------------------------------------
  88.   def perform_transition
  89.     Graphics.transition(20)
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● 開始後処理
  93.   #--------------------------------------------------------------------------
  94.   def post_start
  95.     super
  96.     open_command_window
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 終了前処理
  100.   #--------------------------------------------------------------------------
  101.   def pre_terminate
  102.     super
  103.     close_command_window
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● 終了処理
  107.   #--------------------------------------------------------------------------
  108.   def terminate
  109.     super
  110.     dispose_command_window
  111.     snapshot_for_background
  112.     @sprite.bitmap.dispose
  113.     @sprite.dispose
  114.     for sprite in @sprites
  115.       sprite.dispose
  116.     end
  117.     @rain_bitmap.dispose
  118.     @storm_bitmap.dispose
  119.     @snow_bitmap.dispose
  120.     dispose_title_graphic
  121.   end
  122.   
  123.   def weather_update
  124.     return if WEATHER == 0
  125.     for i in 1..MAXNUMBER
  126.       sprite = @sprites[i]
  127.       if sprite == nil
  128.         break
  129.       end
  130.       if WEATHER == 1
  131.         sprite.x -= 2
  132.         sprite.y += 16
  133.         sprite.opacity -= 8
  134.       end
  135.       if WEATHER == 2
  136.         sprite.x -= 8
  137.         sprite.y += 16
  138.         sprite.opacity -= 12
  139.       end
  140.       if WEATHER == 3
  141.         sprite.x -= 2
  142.         sprite.y += 8
  143.         sprite.opacity -= 8
  144.       end
  145.       if WEATHER == 4
  146.         sprite.x -= WEATHER_X
  147.         sprite.y += WEATHER_Y
  148.         sprite.opacity -= WEATHER_OPACITY
  149.       end
  150.       x = sprite.x - @ox
  151.       y = sprite.y - @oy
  152.       if sprite.opacity < 32 or x < -100 or x > 750 or y < -1000 or y > 500
  153.         sprite.x = rand(RAND_X) + WIDTH + @ox
  154.         sprite.y = rand(RAND_Y) + HEIGHT + @oy
  155.         sprite.opacity = START_OPACITY
  156.       end
  157.     end
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● フレーム更新
  161.   #--------------------------------------------------------------------------
  162.   def update
  163.     super
  164.     @command_window.update
  165.     if Input.trigger?(Input::C)
  166.       case @command_window.index
  167.       when 0    # ニューゲーム
  168.         command_new_game
  169.       when 1    # コンティニュー
  170.         command_continue
  171.       when 2    # シャットダウン
  172.         command_shutdown
  173.       end
  174.     end
  175.     weather_update
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● データベースのロード
  179.   #--------------------------------------------------------------------------
  180.   def load_database
  181.     $data_actors        = load_data("Data/Actors.rvdata")
  182.     $data_classes       = load_data("Data/Classes.rvdata")
  183.     $data_skills        = load_data("Data/Skills.rvdata")
  184.     $data_items         = load_data("Data/Items.rvdata")
  185.     $data_weapons       = load_data("Data/Weapons.rvdata")
  186.     $data_armors        = load_data("Data/Armors.rvdata")
  187.     $data_enemies       = load_data("Data/Enemies.rvdata")
  188.     $data_troops        = load_data("Data/Troops.rvdata")
  189.     $data_states        = load_data("Data/States.rvdata")
  190.     $data_animations    = load_data("Data/Animations.rvdata")
  191.     $data_common_events = load_data("Data/CommonEvents.rvdata")
  192.     $data_system        = load_data("Data/System.rvdata")
  193.     $data_areas         = load_data("Data/Areas.rvdata")
  194.   end
  195.   #--------------------------------------------------------------------------
  196.   # ● 戦闘テスト用データベースのロード
  197.   #--------------------------------------------------------------------------
  198.   def load_bt_database
  199.     $data_actors        = load_data("Data/BT_Actors.rvdata")
  200.     $data_classes       = load_data("Data/BT_Classes.rvdata")
  201.     $data_skills        = load_data("Data/BT_Skills.rvdata")
  202.     $data_items         = load_data("Data/BT_Items.rvdata")
  203.     $data_weapons       = load_data("Data/BT_Weapons.rvdata")
  204.     $data_armors        = load_data("Data/BT_Armors.rvdata")
  205.     $data_enemies       = load_data("Data/BT_Enemies.rvdata")
  206.     $data_troops        = load_data("Data/BT_Troops.rvdata")
  207.     $data_states        = load_data("Data/BT_States.rvdata")
  208.     $data_animations    = load_data("Data/BT_Animations.rvdata")
  209.     $data_common_events = load_data("Data/BT_CommonEvents.rvdata")
  210.     $data_system        = load_data("Data/BT_System.rvdata")
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   # ● 各種ゲームオブジェクトの作成
  214.   #--------------------------------------------------------------------------
  215.   def create_game_objects
  216.     $game_temp          = Game_Temp.new
  217.     $game_message       = Game_Message.new
  218.     $game_system        = Game_System.new
  219.     $game_switches      = Game_Switches.new
  220.     $game_variables     = Game_Variables.new
  221.     $game_self_switches = Game_SelfSwitches.new
  222.     $game_actors        = Game_Actors.new
  223.     $game_party         = Game_Party.new
  224.     $game_troop         = Game_Troop.new
  225.     $game_map           = Game_Map.new
  226.     $game_player        = Game_Player.new
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ● コンティニュー有効判定
  230.   #--------------------------------------------------------------------------
  231.   def check_continue
  232.     @continue_enabled = (Dir.glob('Save*.rvdata').size > 0)
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   # ● タイトルグラフィックの作成
  236.   #--------------------------------------------------------------------------
  237.   def create_title_graphic
  238.     @sprite = Sprite.new
  239.     @sprite.bitmap = Cache.system("Title")
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● タイトルグラフィックの解放
  243.   #--------------------------------------------------------------------------
  244.   def dispose_title_graphic
  245.     @sprite.bitmap.dispose
  246.     @sprite.dispose
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # ● コマンドウィンドウの作成
  250.   #--------------------------------------------------------------------------
  251.   def create_command_window
  252.     s1 = Vocab::new_game
  253.     s2 = Vocab::continue
  254.     s3 = Vocab::shutdown
  255.     @command_window = Window_Command.new(172, [s1, s2, s3])
  256.     @command_window.x = (544 - @command_window.width) / 2
  257.     @command_window.y = 288
  258.     if @continue_enabled                    # コンティニューが有効な場合
  259.       @command_window.index = 1             # カーソルを合わせる
  260.     else                                    # 無効な場合
  261.       @command_window.draw_item(1, false)   # コマンドを半透明表示にする
  262.     end
  263.     @command_window.openness = 0
  264.     @command_window.open
  265.   end
  266.   #--------------------------------------------------------------------------
  267.   # ● コマンドウィンドウの解放
  268.   #--------------------------------------------------------------------------
  269.   def dispose_command_window
  270.     @command_window.dispose
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ● コマンドウィンドウを開く
  274.   #--------------------------------------------------------------------------
  275.   def open_command_window
  276.     @command_window.open
  277.     begin
  278.       @command_window.update
  279.       Graphics.update
  280.     end until @command_window.openness == 255
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● コマンドウィンドウを閉じる
  284.   #--------------------------------------------------------------------------
  285.   def close_command_window
  286.     @command_window.close
  287.     begin
  288.       @command_window.update
  289.       Graphics.update
  290.     end until @command_window.openness == 0
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ● タイトル画面の音楽演奏
  294.   #--------------------------------------------------------------------------
  295.   def play_title_music
  296.     $data_system.title_bgm.play
  297.     RPG::BGS.stop
  298.     RPG::ME.stop
  299.   end
  300.   #--------------------------------------------------------------------------
  301.   # ● プレイヤーの初期位置存在チェック
  302.   #--------------------------------------------------------------------------
  303.   def confirm_player_location
  304.     if $data_system.start_map_id == 0
  305.       print "プレイヤーの初期位置が設定されていません。"
  306.       exit
  307.     end
  308.   end
  309.   #--------------------------------------------------------------------------
  310.   # ● コマンド : ニューゲーム
  311.   #--------------------------------------------------------------------------
  312.   def command_new_game
  313.     confirm_player_location
  314.     Sound.play_decision
  315.     $game_party.setup_starting_members            # 初期パーティ
  316.     $game_map.setup($data_system.start_map_id)    # 初期位置のマップ
  317.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  318.     $game_player.refresh
  319.     $scene = Scene_Map.new
  320.     RPG::BGM.fade(1500)
  321.     close_command_window
  322.     Graphics.fadeout(60)
  323.     Graphics.wait(40)
  324.     Graphics.frame_count = 0
  325.     RPG::BGM.stop
  326.     $game_map.autoplay
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ● コマンド : コンティニュー
  330.   #--------------------------------------------------------------------------
  331.   def command_continue
  332.     if @continue_enabled
  333.       Sound.play_decision
  334.       $scene = Scene_File.new(false, true, false)
  335.     else
  336.       Sound.play_buzzer
  337.     end
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   # ● コマンド : シャットダウン
  341.   #--------------------------------------------------------------------------
  342.   def command_shutdown
  343.     Sound.play_decision
  344.     RPG::BGM.fade(800)
  345.     RPG::BGS.fade(800)
  346.     RPG::ME.fade(800)
  347.     $scene = nil
  348.   end
  349.   #--------------------------------------------------------------------------
  350.   # ● 戦闘テスト
  351.   #--------------------------------------------------------------------------
  352.   def battle_test
  353.     load_bt_database                  # 戦闘テスト用データベースをロード
  354.     create_game_objects               # ゲームオブジェクトを作成
  355.     Graphics.frame_count = 0          # プレイ時間を初期化
  356.     $game_party.setup_battle_test_members
  357.     $game_troop.setup($data_system.test_troop_id)
  358.     $game_troop.can_escape = true
  359.     $game_system.battle_bgm.play
  360.     snapshot_for_background
  361.     $scene = Scene_Battle.new
  362.   end
  363. end
复制代码

1、默认图片都是从右上角往左下脚飘,怎么改成从最底下往上面升?
2、最好天气图片在升起时能够不停地旋转…… [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 雪流星    时间: 2008-6-5 07:56
修改weather_update

sprite.x -= 2
sprite.y += 16
改成
#sprite.x -= 2
sprite.y -= 16
就变成值值往上飞了

还有start里面的
sprite.y = -1000
要修改成
sprite.y = 1000

数字方面如果有问题的话自己微调吧
这里只是给个修改方法和思路而已
作者: 水野·迪尔    时间: 2008-6-5 21:12
这好像只适用于前3个,
自定义的和这个不同哦...
作者: hitlerson    时间: 2008-6-5 22:12
其实作者是很人性化的,都为你考虑到了

  WEATHER_X = -5 # X方向每回合减少象素
  WEATHER_Y = -5 # Y方向每回合减少象素

  HEIGHT = -100 # 出现时候的屏幕Y
  WIDTH = -600 # 出现时候的屏幕X

就是最上面的这些个参数,改改就好了

行147修改:
      if WEATHER == 4
        sprite.x -= WEATHER_X
        sprite.y += WEATHER_Y
        sprite.angle += ANGLE
        sprite.angle = 0 if sprite.angle > 360


PS: 我到8500 也想当水精灵王 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~




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