Project1

标题: 地图作为战斗背景 [打印本页]

作者: yangff    时间: 2008-1-18 03:14
标题: 地图作为战斗背景
本帖最后由 凌辰 于 2009-7-12 17:23 编辑

脚本1(Spriteset_Battle):

  1. #==============================================================================
  2. # ■ Spriteset_Battle
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的活动块的类。本类在 Scene_Battle 类
  5. # 的内部使用。
  6. #==============================================================================

  7. class Spriteset_Battle
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     create_viewports
  13.     create_battleback
  14.     create_battlefloor
  15.     create_enemies
  16.     create_actors
  17.     create_pictures
  18.     create_timer
  19.     update
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 生成视口
  23.   #--------------------------------------------------------------------------
  24.   def create_viewports
  25.     @viewport1 = Viewport.new(0, 0, 544, 416)
  26.     @viewport2 = Viewport.new(0, 0, 544, 416)
  27.     @viewport3 = Viewport.new(0, 0, 544, 416)
  28.     @viewport2.z = 50
  29.     @viewport3.z = 100
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 生成战斗背景位图
  33.   #--------------------------------------------------------------------------
  34.   def create_battleback
  35. #    source = $game_temp.background_bitmap
  36. #    bitmap = Bitmap.new(640, 480)
  37. #    bitmap.stretch_blt(bitmap.rect, source, source.rect)
  38. #    bitmap.radial_blur(90, 12)
  39. #    @battleback_sprite = Sprite.new(@viewport1)
  40. #    @battleback_sprite.bitmap = bitmap
  41. #    @battleback_sprite.ox = 320
  42. #    @battleback_sprite.oy = 240
  43. #    @battleback_sprite.x = 272
  44. #    @battleback_sprite.y = 176
  45. #    @battleback_sprite.wave_amp = 8
  46. #    @battleback_sprite.wave_length = 240
  47. #    @battleback_sprite.wave_speed = 120
  48.   end
  49.   #--------------------------------------------------------------------------
  50.   # ● 生成战斗场所活动块
  51.   #--------------------------------------------------------------------------
  52.   def create_battlefloor
  53.     @battlefloor_sprite = Sprite.new(@viewport1)
  54.     @battlefloor_sprite.bitmap = Cache.system("BattleFloor")
  55.     @battlefloor_sprite.x = 0
  56.     @battlefloor_sprite.y = 192
  57.     @battlefloor_sprite.z = 1
  58.     @battlefloor_sprite.opacity = 128
  59.   end
  60.   #--------------------------------------------------------------------------
  61.   # ● 生成敌人活动块
  62.   #--------------------------------------------------------------------------
  63.   def create_enemies
  64.     @enemy_sprites = []
  65.     for enemy in $game_troop.members.reverse
  66.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  67.     end
  68.   end
  69.   #--------------------------------------------------------------------------
  70.   # ● 生成角色活动块
  71.   #    默认不显示角色图形,不过,为了方便、己方生成与敌人同样的精灵。
  72.   #--------------------------------------------------------------------------
  73.   def create_actors
  74.     @actor_sprites = []
  75.     @actor_sprites.push(Sprite_Battler.new(@viewport1))
  76.     @actor_sprites.push(Sprite_Battler.new(@viewport1))
  77.     @actor_sprites.push(Sprite_Battler.new(@viewport1))
  78.     @actor_sprites.push(Sprite_Battler.new(@viewport1))
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 生成图片活动块
  82.   #--------------------------------------------------------------------------
  83.   def create_pictures
  84.     @picture_sprites = []
  85.     for i in 1..20
  86.       @picture_sprites.push(Sprite_Picture.new(@viewport2,
  87.         $game_troop.screen.pictures[i]))
  88.     end
  89.   end
  90.   #--------------------------------------------------------------------------  #--------------------------------------------------------------------------
  91.   # ● 生成计时器活动块
  92.   #--------------------------------------------------------------------------
  93.   def create_timer
  94.     @timer_sprite = Sprite_Timer.new(@viewport2)
  95.   end
  96.   #--------------------------------------------------------------------------
  97.   # ● 释放
  98.   #--------------------------------------------------------------------------
  99.   def dispose
  100.     dispose_battleback_bitmap
  101.     dispose_battleback
  102.     dispose_battlefloor
  103.     dispose_enemies
  104.     dispose_actors
  105.     dispose_pictures
  106.     dispose_timer
  107.     dispose_viewports
  108.   end
  109.   #--------------------------------------------------------------------------
  110.   # ● 战斗背景位图释放
  111.   #--------------------------------------------------------------------------
  112.   def dispose_battleback_bitmap
  113.     #@battleback_sprite.bitmap.dispose
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 战斗背景活动块释放
  117.   #--------------------------------------------------------------------------
  118.   def dispose_battleback
  119.     #@battleback_sprite.dispose
  120.   end
  121.   #--------------------------------------------------------------------------
  122.   # ● 战斗场所活动块释放
  123.   #--------------------------------------------------------------------------
  124.   def dispose_battlefloor
  125.     @battlefloor_sprite.dispose
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ● 敌人活动块释放
  129.   #--------------------------------------------------------------------------
  130.   def dispose_enemies
  131.     for sprite in @enemy_sprites
  132.       sprite.dispose
  133.     end
  134.   end
  135.   #--------------------------------------------------------------------------
  136.   # ● 角色活动块释放
  137.   #--------------------------------------------------------------------------
  138.   def dispose_actors
  139.     for sprite in @actor_sprites
  140.       sprite.dispose
  141.     end
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● 图片活动块释放
  145.   #--------------------------------------------------------------------------
  146.   def dispose_pictures
  147.     for sprite in @picture_sprites
  148.       sprite.dispose
  149.     end
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● 计时器活动块释放
  153.   #--------------------------------------------------------------------------
  154.   def dispose_timer
  155.     @timer_sprite.dispose
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ● 视口释放
  159.   #--------------------------------------------------------------------------
  160.   def dispose_viewports
  161.     @viewport1.dispose
  162.     @viewport2.dispose
  163.     @viewport3.dispose
  164.   end
  165.   #--------------------------------------------------------------------------
  166.   # ● 刷新画面
  167.   #--------------------------------------------------------------------------
  168.   def update
  169.     update_battleback
  170.     update_battlefloor
  171.     update_enemies
  172.     update_actors
  173.     update_pictures
  174.     update_timer
  175.     update_viewports
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 刷新战斗背景活动块
  179.   #--------------------------------------------------------------------------
  180.   def update_battleback
  181. #    @battleback_sprite.update
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 刷新战斗场所活动块
  185.   #--------------------------------------------------------------------------
  186.   def update_battlefloor
  187.     @battlefloor_sprite.update
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ● 刷新敌人活动块
  191.   #--------------------------------------------------------------------------
  192.   def update_enemies
  193.     for sprite in @enemy_sprites
  194.       sprite.update
  195.     end
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # ● 刷新角色活动块
  199.   #--------------------------------------------------------------------------
  200.   def update_actors
  201.     @actor_sprites[0].battler = $game_party.members[0]
  202.     @actor_sprites[1].battler = $game_party.members[1]
  203.     @actor_sprites[2].battler = $game_party.members[2]
  204.     @actor_sprites[3].battler = $game_party.members[3]
  205.     for sprite in @actor_sprites
  206.       sprite.update
  207.     end
  208.   end
  209.   #--------------------------------------------------------------------------
  210.   # ● 刷新图片活动块
  211.   #--------------------------------------------------------------------------
  212.   def update_pictures
  213.     for sprite in @picture_sprites
  214.       sprite.update
  215.     end
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 刷新计时器活动块
  219.   #--------------------------------------------------------------------------
  220.   def update_timer
  221.     @timer_sprite.update
  222.   end
  223.   #--------------------------------------------------------------------------
  224.   # ● 刷新视口
  225.   #--------------------------------------------------------------------------
  226.   def update_viewports
  227.     @viewport1.tone = $game_troop.screen.tone
  228.     @viewport1.ox = $game_troop.screen.shake
  229.     @viewport2.color = $game_troop.screen.flash_color
  230.     @viewport3.color.set(0, 0, 0, 255 - $game_troop.screen.brightness)
  231.     @viewport1.update
  232.     @viewport2.update
  233.     @viewport3.update
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ● 动画显示中判定
  237.   #--------------------------------------------------------------------------
  238.   def animation?
  239.     for sprite in @enemy_sprites + @actor_sprites
  240.       return true if sprite.animation?
  241.     end
  242.     return false
  243.   end
  244. end
复制代码

脚本2:

  1. class Scene_Battle < Scene_Base
  2.   #--------------------------------------------------------------------------
  3.   # ● 开始处理
  4.   #--------------------------------------------------------------------------
  5.   def start
  6.     super
  7.     create_menu_background
  8.     $game_temp.in_battle = true
  9.     @spriteset = Spriteset_Battle.new
  10.     @message_window = Window_BattleMessage.new
  11.     @action_battlers = []
  12.     create_info_viewport
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 结束处理
  16.   #--------------------------------------------------------------------------
  17.   def terminate
  18.     super
  19.     dispose_menu_background
  20.     dispose_info_viewport
  21.     @message_window.dispose
  22.     @spriteset.dispose
  23.     unless $scene.is_a?(Scene_Gameover)
  24.       $scene = nil if $BTEST
  25.     end
  26.   end

  27. end
复制代码



              [本贴由 御灵 于 2008-1-17 23:34:14 进行了编辑]
作者: tranpol    时间: 2008-1-18 04:28
谢谢~~
VX脚本出的也很快啊
作者: yanzhenguo    时间: 2008-1-18 04:56
牛X啊
作者: yanzhenguo    时间: 2008-1-18 07:16
结束战斗的时候有问题,发生错误了
作者: v2sam    时间: 2008-1-18 07:24
{/se}{/pz}

有没全景图做战斗背景的?
作者: yangff    时间: 2008-1-18 19:20
以下引用v2sam于2008-1-17 23:24:40的发言:



有没全景图做战斗背景的?

包含了远景
作者: clamp135    时间: 2008-1-18 19:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: link006007    时间: 2008-1-18 19:30
多脚本不如好脚本
作者: yangff    时间: 2008-1-18 20:16
以下引用yanzhenguo于2008-1-17 23:16:12的发言:

结束战斗的时候有问题,发生错误了

把Scene_Battle的ispose_menu_background换成dispose_menu_background
Spriteset_Battle的
  #--------------------------------------------------------------------------
  # ● 战斗场所活动块释放
  #--------------------------------------------------------------------------
  def dispose_battlefloor
    @battlefloor_sprite.dispose
  end
修改成
  #--------------------------------------------------------------------------
  # ● 战斗场所活动块释放
  #--------------------------------------------------------------------------
  def dispose_battlefloor
  end

即可
作者: 很H很BL    时间: 2008-1-18 20:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: 天涯孤客    时间: 2008-1-29 21:11
谢谢

作者: 亿万星辰    时间: 2008-1-30 00:21
那个怎么说来着...泛用型?     囧

  1. class Spriteset_Battle
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化
  4.   #--------------------------------------------------------------------------
  5.   alias old_ini initialize
  6.   def initialize
  7.     old_ini
  8.     @battleback_sprite.visible = false
  9.   end
  10. end
  11. class Scene_Battle < Scene_Base
  12.   #--------------------------------------------------------------------------
  13.   # ● 开始处理
  14.   #--------------------------------------------------------------------------
  15.   alias old_start start
  16.   def start
  17.     old_start
  18.     @sprite = Sprite.new
  19.     @sprite.z = -1
  20.     @sprite.bitmap = $game_temp.background_bitmap
  21.   end
  22.   alias old_terminate terminate
  23.   def terminate
  24.     old_terminate
  25.     @sprite.bitmap.dispose
  26.     @sprite.dispose
  27.   end
  28. end
复制代码

作者: yangff    时间: 2008-1-30 01:49
以下引用亿万星辰于2008-1-29 16:21:25的发言:

那个怎么说来着...泛用型?     囧

class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  alias old_ini initialize
  def initialize
    old_ini
    @battleback_sprite.visible = false
  end
end
class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● 开始处理
  #--------------------------------------------------------------------------
  alias old_start start
  def start
    old_start
    @sprite = Sprite.new
    @sprite.z = -1
    @sprite.bitmap = $game_temp.background_bitmap
  end
  alias old_terminate terminate
  def terminate
    old_terminate
    @sprite.bitmap.dispose
    @sprite.dispose
  end
end




[本贴由作者于 2008-1-29 17:18:18 最后编辑]

表整合型?
作者: 雪流星    时间: 2008-1-30 03:47
不是我潑冷水

但是真的有必要那麽麻烦吗?
我把默认的Spriteset_Battle删了五行脚本後就得到这样的效果:

事实上,默认的战斗背景也就是地图截图+模糊+波浪+旋转效果而已
所以只要把这些效果删去就好了。
作者: 亿万星辰    时间: 2008-1-30 03:55
以下引用snstar2006于2008-1-29 19:47:32的发言:

不是我潑冷水

但是真的有必要那麽麻烦吗?
我把默认的Spriteset_Battle删了五行脚本後就得到这样的效果:

没错啊,比如像下面这样改,方法还有很多的

class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● バトルバックスプライトの作成
  #--------------------------------------------------------------------------
  def create_battleback
    source = $game_temp.background_bitmap
    @battleback_sprite = Sprite.new(@viewport1)
    @battleback_sprite.bitmap = source
  end
end




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