Project1

标题: 如何临时更改战斗背景? [打印本页]

作者: 艾路塞尔    时间: 2008-3-2 03:03
标题: 如何临时更改战斗背景?
我用的是这个脚本,似乎一张地图只能固定了一张背景。
不是区域改背景,而是特定时间改背景(例如:早,中,晚)


  1. #==============================================================================
  2. # ★ ExBattle_Background
  3. #------------------------------------------------------------------------------
  4. #  使战斗画面能设定任意背景的脚本素材。
  5. #==============================================================================

  6. # 地图设定。
  7. # 请按照 地图 ID、图片名 的顺序填写。
  8. EXBTL_BACKGR_MAP = {
  9. 22 => "002-Woods01",
  10. 35 => "001-Grassland01",
  11. 25 => "001-Grassland01",
  12. }

  13. # 区域设定。
  14. # 请按照 区域 ID、图片名 的顺序填写。
  15. EXBTL_BACKGR_AREA = {
  16. 1 => "Sunset",
  17. 2 => "CloudySky",
  18. }

  19. # 显示位置。
  20. # 指定图片的显示位置 (0:上 1:中 2:下) 。
  21. EXBTL_BACKGR_POSITION = 1

  22. # 设定战斗地面
  23. # 设定战斗地面是否显示。
  24. # (0:不显示 1:显示)
  25. EXBTL_BACKGR_FLOOR = 0

  26. # 设定文件目录。
  27. # 指定战斗背景图片文件位置 (Graphic/xxx/) 。
  28. # 0:System 1:Parallaxes 2:Pictures
  29. EXBTL_BACKGR_FOLDER = 1

  30. #------------------------------------------------------------------------------

  31. class Spriteset_Battle
  32. alias _exbbackgr_create_battleback create_battleback
  33. alias _exbbackgr_create_battlefloor create_battlefloor
  34. #--------------------------------------------------------------------------
  35. # ○ 建立战斗背景精灵 (附加定义)
  36. #--------------------------------------------------------------------------
  37. def create_battleback
  38.    fixed = false
  39.    for area in $data_areas.values
  40.      if $game_player.in_area?(area) and EXBTL_BACKGR_AREA.has_key?(area.id)
  41.        source = EXBTL_BACKGR_AREA[area.id]
  42.        fixed = true
  43.      end
  44.    end
  45.    unless fixed
  46.      if EXBTL_BACKGR_MAP.has_key?($game_map.map_id)
  47.        source = EXBTL_BACKGR_MAP[$game_map.map_id]
  48.        fixed = true
  49.      end
  50.    end
  51.    if fixed
  52.      case EXBTL_BACKGR_FOLDER
  53.      when 0
  54.        bitmap = Cache.system(source)
  55.      when 1
  56.        bitmap = Cache.parallax(source)
  57.      when 2
  58.        bitmap = Cache.picture(source)
  59.      end
  60.      @battleback_sprite = Sprite.new(@viewport1)
  61.      @battleback_sprite.bitmap = bitmap
  62.      @battleback_sprite.x = (640 - bitmap.width) / 2
  63.      case EXBTL_BACKGR_POSITION
  64.      when 0
  65.        @battleback_sprite.y = 0
  66.      when 1
  67.        @battleback_sprite.y = (300- bitmap.height) / 2
  68.      when 2
  69.        @battleback_sprite.y = 480 - bitmap.height
  70.      end
  71.    else
  72.      _exbbackgr_create_battleback
  73.    end
  74. end
  75. #--------------------------------------------------------------------------
  76. # ○ 建立战斗背景精灵 (附加定义)
  77. #--------------------------------------------------------------------------
  78. def create_battlefloor
  79.    _exbbackgr_create_battlefloor
  80.    @battlefloor_sprite.opacity = 0 if EXBTL_BACKGR_FLOOR == 0
  81. end
  82. end
复制代码
[LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 艾路塞尔    时间: 2008-3-3 02:46
那啥,咋没人回答捏?
作者: yooucs    时间: 2008-3-3 04:29
{/jy}{/jy}
  1. #==============================================================================
  2. # ■ VX-RGSS2 改变战斗背景 [版本.1.0.0]     by Claimh
  3. #------------------------------------------------------------------------------
  4. # 英语翻译 By: Elemental Crisis [http://www.rpgcrisis.net]
  5. # 中文翻译 By: zero2 [http://rpg.blue/web]
  6. #------------------------------------------------------------------------------
  7. # 改变战斗的背景图.
  8. #==============================================================================


  9. module BattleBack
  10. #   选择战斗背景
  11. #   0:当前地图的战斗背景,为战斗背景(默认VX的样式)
  12. #   1:目前使用的地图作为战斗背景
  13. #   2:使用自己的图片,为战斗背景
  14. BB_TYPE = 0  # 在这里输入上面提到的编号

  15. # 显示战斗地面
  16. BT_FLOOR = false

  17. # 使用的图片(如果你选择的编号为2)
  18. M_B_BACK = {
  19.   # 地图编号 => "(Graphics/System/图片名)"
  20.   1 => "001-Grassland01"
  21. }
  22. end


  23. #==============================================================================
  24. # ■ Spriteset_Battle
  25. #==============================================================================
  26. class Spriteset_Battle
  27. #--------------------------------------------------------------------------
  28. # ● Creating Battle Back Sprite
  29. #--------------------------------------------------------------------------
  30. def create_battleback
  31.   case BattleBack::BB_TYPE
  32.   when 0
  33.     source = $game_temp.background_bitmap
  34.     bitmap = Bitmap.new(640, 480)
  35.     bitmap.stretch_blt(bitmap.rect, source, source.rect)
  36.     bitmap.radial_blur(90, 12)
  37.     @battleback_sprite = Sprite.new(@viewport1)
  38.     @battleback_sprite.bitmap = bitmap
  39.     @battleback_sprite.ox = 320
  40.     @battleback_sprite.oy = 240
  41.     @battleback_sprite.x = 272
  42.     @battleback_sprite.y = 176
  43.     @battleback_sprite.wave_amp = 8
  44.     @battleback_sprite.wave_length = 240
  45.     @battleback_sprite.wave_speed = 120
  46.   when 1
  47.     source = $game_temp.background_bitmap
  48.     bitmap = Bitmap.new(640, 480)
  49.     bitmap.stretch_blt(bitmap.rect, source, source.rect)
  50.     @battleback_sprite = Sprite.new(@viewport1)
  51.     @battleback_sprite.bitmap = bitmap
  52.     @battleback_sprite.ox = 320
  53.     @battleback_sprite.oy = 240
  54.     @battleback_sprite.x = 272
  55.     @battleback_sprite.y = 176
  56.   when 2
  57.     @battleback_sprite = BattleBackSprite.new(@viewport1)
  58.   end
  59. end
  60. #--------------------------------------------------------------------------
  61. # ● Creating Battle Floor Sprite
  62. #--------------------------------------------------------------------------
  63. alias create_battlefloor_mbb create_battlefloor
  64. def create_battlefloor
  65.   create_battlefloor_mbb if BattleBack::BT_FLOOR
  66. end
  67. #--------------------------------------------------------------------------
  68. # ● Delete Battle Floor Sprite
  69. #--------------------------------------------------------------------------
  70. alias dispose_battlefloor_mbb dispose_battlefloor
  71. def dispose_battlefloor
  72.   dispose_battlefloor_mbb if BattleBack::BT_FLOOR
  73. end
  74. #--------------------------------------------------------------------------
  75. # ● Update Battle Floor Sprite
  76. #--------------------------------------------------------------------------
  77. alias update_battlefloor_mbb update_battlefloor
  78. def update_battlefloor
  79.   update_battlefloor_mbb if BattleBack::BT_FLOOR
  80. end
  81. end


  82. #==============================================================================
  83. # ■ BattleBackSprite
  84. #==============================================================================
  85. class BattleBackSprite < Sprite
  86. # Background Screen Size
  87. WIDTH  = 544.00
  88. HEIGHT = 288.00
  89. #--------------------------------------------------------------------------
  90. # ● Object Initialization
  91. #     viewport : viewport
  92. #--------------------------------------------------------------------------
  93. def initialize(viewport = nil)
  94.   super(viewport)
  95.   self.bitmap = Cache.system(BattleBack::M_B_BACK[$game_map.map_id])
  96.   # Zoom is carried out according to picture size.
  97.   @x_zoom = WIDTH / self.bitmap.width
  98.   @y_zoom = HEIGHT / self.bitmap.height
  99.   @zoom = @x_zoom > @y_zoom ? @x_zoom : @y_zoom
  100.   # Zoom is carried out.
  101.   self.zoom_x = @zoom
  102.   self.zoom_y = @zoom
  103.   # Made into central display.
  104.   self.ox = self.bitmap.width / 2
  105.   self.oy = self.bitmap.height / 2
  106.   self.x = (self.bitmap.width / 2)  * @zoom
  107.   self.y = (self.bitmap.height / 2) * @zoom
  108. end
  109. end
复制代码

用这个吧。。。这个。。。比较简单的说!
作者: 艾路塞尔    时间: 2008-3-3 06:13
# 使用的图片(如果你选择的编号为2)
M_B_BACK = {
  # 地图编号 => "(Graphics/System/图片名)"
  1 => "001-Grassland01"
}
end



用这个脚本还是一张地图只能用一个背景啊~
作者: 雪风    时间: 2008-3-3 08:06
  1. #--------------------------------------------------------------------------
  2.   # ● 生成战斗背景位图
  3.   #--------------------------------------------------------------------------
  4.   def create_battleback
  5.     case $game_variables[5] #变量5 战斗远景
  6.       when 1
  7.         bitmap = Bitmap.new("Graphics/Parallaxes/StarlitSky")
  8.       when 2
  9.         bitmap = Bitmap.new("Graphics/Parallaxes/CloudySky")
  10.       else
  11.         source = $game_temp.background_bitmap
  12.         bitmap = Bitmap.new(640, 480)
  13.         bitmap.stretch_blt(bitmap.rect, source, source.rect)
  14.       end
  15.     @battleback_sprite = Sprite.new(@viewport1)
  16.     @battleback_sprite.bitmap = bitmap
  17.     @battleback_sprite.tone = Tone.new(0,0,0,255)
  18.     @battleback_sprite.x = 0
  19.     @battleback_sprite.y = 0
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 生成战斗场所活动块
  23.   #--------------------------------------------------------------------------
  24.   def create_battlefloor
  25.     @battlefloor_sprite = Sprite.new(@viewport1)
  26.     case $game_variables[6] #变量6 战斗背景
  27.       when 1
  28.         bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_001")
  29.       when 2
  30.         bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_002")
  31.       when 3
  32.         bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_003")
  33.       when 4
  34.         bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_004")
  35.       when 5
  36.         bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_005")
  37.       when 6
  38.         bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_006")
  39.       when 7
  40.         bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_007")
  41.       when 8
  42.         bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_008")
  43.       when 9
  44.         bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_009")
  45.       when 10
  46.         bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_010")
  47.       else
  48.         bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_001")
  49.       end
  50.     @battlefloor_sprite.bitmap = bitmap
  51.     @battlefloor_sprite.x = 0
  52.     @battlefloor_sprite.y = 0
  53.     @battlefloor_sprite.z = 1
  54.     @battlefloor_sprite.opacity = 255
  55.   end
复制代码


这个是我VX参赛游戏里的办法

修改的东西很少   用变量控制

你可以参考下


PS:葱娘大心 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: wy29    时间: 2008-3-3 10:21
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2008-3-3 12:24
to 雪风:

case $game_variables[6] #变量6 战斗背景
      when 1
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_001")
      when 2
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_002")
......
end

这段也太麻烦了点吧?
每次加一个战斗背景就要在加一条分歧

为什麽不用
name = "Graphics/Battlebacks/Battlebacks_" + $game_variables[6].to_s
就好了?
作者: 雪风    时间: 2008-3-3 18:08
以下引用snstar2006于2008-3-3 4:24:08的发言:

to 雪风:

case $game_variables[6] #变量6 战斗背景
     when 1
       bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_001")
     when 2
       bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_002")
......
end

这段也太麻烦了点吧?
每次加一个战斗背景就要在加一条分歧

为什麽不用
name = "Graphics/Battlebacks/Battlebacks_" + $game_variables[6].to_s
就好了?


俺又不是发布脚本   

游戏里直接复制出来的   

短篇游戏 就几个背景而已  目的是告诉LZ思路
作者: 艾路塞尔    时间: 2008-3-4 05:02
谢谢各位,我先都试一下~
作者: 艾路塞尔    时间: 2008-3-4 06:51
以下引用wy29于2008-3-3 2:21:06的发言:

每次想换背景,就在Scene_Battle里跑:

@spriteset.change_battleback("背景文件的地址")

如果想在任何地方换背景,就得把@spriteset改成global variable.
用 $spriteset


这个怎么用?
作者: 艾路塞尔    时间: 2008-3-4 06:57
以下引用雪风于2008-3-3 0:06:41的发言:

#--------------------------------------------------------------------------
  # ● 生成战斗背景位图
  #--------------------------------------------------------------------------
  def create_battleback
    case $game_variables[5] #变量5 战斗远景
      when 1
        bitmap = Bitmap.new("Graphics/Parallaxes/StarlitSky")
      when 2
        bitmap = Bitmap.new("Graphics/Parallaxes/CloudySky")
      else
        source = $game_temp.background_bitmap
        bitmap = Bitmap.new(640, 480)
        bitmap.stretch_blt(bitmap.rect, source, source.rect)
      end
    @battleback_sprite = Sprite.new(@viewport1)
    @battleback_sprite.bitmap = bitmap
    @battleback_sprite.tone = Tone.new(0,0,0,255)
    @battleback_sprite.x = 0
    @battleback_sprite.y = 0
  end
  #--------------------------------------------------------------------------
  # ● 生成战斗场所活动块
  #--------------------------------------------------------------------------
  def create_battlefloor
    @battlefloor_sprite = Sprite.new(@viewport1)
    case $game_variables[6] #变量6 战斗背景
      when 1
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_001")
      when 2
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_002")
      when 3
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_003")
      when 4
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_004")
      when 5
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_005")
      when 6
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_006")
      when 7
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_007")
      when 8
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_008")
      when 9
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_009")
      when 10
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_010")
      else
        bitmap = Bitmap.new("Graphics/Battlebacks/Battlebacks_001")
      end
    @battlefloor_sprite.bitmap = bitmap
    @battlefloor_sprite.x = 0
    @battlefloor_sprite.y = 0
    @battlefloor_sprite.z = 1
    @battlefloor_sprite.opacity = 255
  end

[本贴由作者于 2008-3-3 0:17:02 最后编辑]


这段加在哪?MAIN前?不是吧?
作者: 雪流星    时间: 2008-3-4 09:12
看脚本的样子应该是加在
Spriteset_Battle最後一个end前面
作者: wy29    时间: 2008-3-4 09:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪风    时间: 2008-3-4 17:33
以下引用艾路塞尔于2008-3-3 22:57:52的发言:

这段加在哪?MAIN前?不是吧?

Spriteset_Battle里

32行到60行左右   覆盖即可
作者: 艾路塞尔    时间: 2008-3-5 21:17
谢谢。应该没有问题了。




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