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

Project1

 找回密码
 注册会员
搜索
查看: 1782|回复: 0
打印 上一主题 下一主题

[已经解决] 在战斗中如何用变量在不同情况显示不同图片

[复制链接]

Lv3.寻梦者

虚空人形

梦石
0
星屑
4604
在线时间
2037 小时
注册时间
2011-8-11
帖子
3398

贵宾

跳转到指定楼层
1
发表于 2014-2-23 12:53:15 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 hcm 于 2014-3-2 08:22 编辑

我需要在场合或角色不同时,战斗界面的一部分不同,
原本打算使用变量控制。
(变量可以写入角色和地图ID数据,在特定剧情中直接用事件指令赋值也可以)

我是这样做的:
在Spriteset_Battle上面插入:
  1. #==============================================================================
  2. # ■ Spriteset_BattleStateback
  3. #------------------------------------------------------------------------------
  4. #==============================================================================

  5. class Spriteset_BattleStateback
  6.   #--------------------------------------------------------------------------
  7.   # ○ 初始化对象
  8.   #--------------------------------------------------------------------------
  9.   def initialize(viewport)
  10.     super
  11.     @state_back = Sprite.new(viewport)
  12.     @state_back.bitmap = Bitmap.new("Graphics/Stateback/g" + $game_variables[1] + ".png")
  13.     #显示随机图片
  14.    @state_back.z = 0
  15.     @state_back.x = 0
  16.     @state_back.y = 0
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ○ 解放
  20.   #--------------------------------------------------------------------------
  21.   def dispose
  22.     @state_back.dispose
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ○ 更新
  26.   #--------------------------------------------------------------------------
  27.   def update
  28.   end
  29. end
复制代码
然后修改Spriteset_Battle,在update前插入@state_back = Spriteset_BattleStateback.new(@viewport3) ,修改后如下:
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Spriteset_Battle
  4. #------------------------------------------------------------------------------
  5. #  处理战斗画面的精灵的类。本类在 Scene_Battle 类的内部使用。
  6. #==============================================================================

  7. class Spriteset_Battle
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对象
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     create_viewports
  13.     create_battleback1
  14.     create_battleback2
  15.     create_enemies
  16.     create_actors
  17.     create_pictures
  18.     create_timer
  19.     @state_back = Spriteset_BattleStateback.new(@viewport3) #修改
  20.   update
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 生成显示端口
  24.   #--------------------------------------------------------------------------
  25.   def create_viewports
  26.     @viewport1 = Viewport.new
  27.     @viewport2 = Viewport.new
  28.     @viewport3 = Viewport.new
  29.     @viewport2.z = 50
  30.     @viewport3.z = 100
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 生成战场背景(地面)精灵
  34.   #--------------------------------------------------------------------------
  35.   def create_battleback1
  36.     @back1_sprite = Sprite.new(@viewport1)
  37.     @back1_sprite.bitmap = battleback1_bitmap
  38.     @back1_sprite.z = 0
  39.     center_sprite(@back1_sprite)
  40.   end
  41.   #--------------------------------------------------------------------------
  42.   # ● 生成战场背景(墙壁)精灵
  43.   #--------------------------------------------------------------------------
  44.   def create_battleback2
  45.     @back2_sprite = Sprite.new(@viewport1)
  46.     @back2_sprite.bitmap = battleback2_bitmap
  47.     @back2_sprite.z = 1
  48.     center_sprite(@back2_sprite)
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● 获取战场背景(地面)的位图
  52.   #--------------------------------------------------------------------------
  53.   def battleback1_bitmap
  54.     if battleback1_name
  55.       Cache.battleback1(battleback1_name)
  56.     else
  57.       create_blurry_background_bitmap
  58.     end
  59.   end
  60.   #--------------------------------------------------------------------------
  61.   # ● 获取战场背景(墙壁)的位图
  62.   #--------------------------------------------------------------------------
  63.   def battleback2_bitmap
  64.     if battleback2_name
  65.       Cache.battleback2(battleback2_name)
  66.     else
  67.       Bitmap.new(1, 1)
  68.     end
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 生成由地图画面加工而来的战场背景
  72.   #--------------------------------------------------------------------------
  73.   def create_blurry_background_bitmap
  74.     source = SceneManager.background_bitmap
  75.     bitmap = Bitmap.new(640, 480)
  76.     bitmap.stretch_blt(bitmap.rect, source, source.rect)
  77.     bitmap.radial_blur(120, 16)
  78.     bitmap
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 获取战场背景(地面)的文件名
  82.   #--------------------------------------------------------------------------
  83.   def battleback1_name
  84.     if $BTEST
  85.       $data_system.battleback1_name
  86.     elsif $game_map.battleback1_name
  87.       $game_map.battleback1_name
  88.     elsif $game_map.overworld?
  89.       overworld_battleback1_name
  90.     end
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● 获取战场背景(墙壁)的文件名
  94.   #--------------------------------------------------------------------------
  95.   def battleback2_name
  96.     if $BTEST
  97.       $data_system.battleback2_name
  98.     elsif $game_map.battleback2_name
  99.       $game_map.battleback2_name
  100.     elsif $game_map.overworld?
  101.       overworld_battleback2_name
  102.     end
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 获取战场背景(地面)文件名
  106.   #--------------------------------------------------------------------------
  107.   def overworld_battleback1_name
  108.     $game_player.vehicle ? ship_battleback1_name : normal_battleback1_name
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 获取战场背景(墙壁)文件名
  112.   #--------------------------------------------------------------------------
  113.   def overworld_battleback2_name
  114.     $game_player.vehicle ? ship_battleback2_name : normal_battleback2_name
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 获取普通时的战场背景(地面)文件名
  118.   #--------------------------------------------------------------------------
  119.   def normal_battleback1_name
  120.     terrain_battleback1_name(autotile_type(1)) ||
  121.     terrain_battleback1_name(autotile_type(0)) ||
  122.     default_battleback1_name
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● 获取普通时的战场背景(墙壁)文件名
  126.   #--------------------------------------------------------------------------
  127.   def normal_battleback2_name
  128.     terrain_battleback2_name(autotile_type(1)) ||
  129.     terrain_battleback2_name(autotile_type(0)) ||
  130.     default_battleback2_name
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 获取与地形对应的战场背景(地面)文件名
  134.   #--------------------------------------------------------------------------
  135.   def terrain_battleback1_name(type)
  136.     case type
  137.     when 24,25        # 野外
  138.       "Wasteland"
  139.     when 26,27        # 泥地
  140.       "DirtField"
  141.     when 32,33        # 沙漠
  142.       "Desert"
  143.     when 34           # 岩地
  144.       "Lava1"
  145.     when 35           # 岩地(熔岩)
  146.       "Lava2"
  147.     when 40,41        # 雪原
  148.       "Snowfield"
  149.     when 42           # 云端
  150.       "Clouds"
  151.     when 4,5          # 毒沼
  152.       "PoisonSwamp"
  153.     end
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● 获取与地形对应的战场背景(墙壁)文件名
  157.   #--------------------------------------------------------------------------
  158.   def terrain_battleback2_name(type)
  159.     case type
  160.     when 20,21        # 森林
  161.       "Forest1"
  162.     when 22,30,38     # 山丘
  163.       "Cliff"
  164.     when 24,25,26,27  # 野外、泥地
  165.       "Wasteland"
  166.     when 32,33        # 沙漠
  167.       "Desert"
  168.     when 34,35        # 岩地
  169.       "Lava"
  170.     when 40,41        # 雪原
  171.       "Snowfield"
  172.     when 42           # 云端
  173.       "Clouds"
  174.     when 4,5          # 毒沼
  175.       "PoisonSwamp"
  176.     end
  177.   end
  178.   #--------------------------------------------------------------------------
  179.   # ● 获取默认的战场背景(地面)文件名
  180.   #--------------------------------------------------------------------------
  181.   def default_battleback1_name
  182.     "Grassland"
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 获取默认的战场背景(墙壁)文件名
  186.   #--------------------------------------------------------------------------
  187.   def default_battleback2_name
  188.     "Grassland"
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 获取乘船时的战场背景(地面)文件名
  192.   #--------------------------------------------------------------------------
  193.   def ship_battleback1_name
  194.     "Ship"
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 获取乘船时的战场背景(墙壁)文件名
  198.   #--------------------------------------------------------------------------
  199.   def ship_battleback2_name
  200.     "Ship"
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 获取角色脚下的自动原件的种类
  204.   #--------------------------------------------------------------------------
  205.   def autotile_type(z)
  206.     $game_map.autotile_type($game_player.x, $game_player.y, z)
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● 精灵居中
  210.   #--------------------------------------------------------------------------
  211.   def center_sprite(sprite)
  212.     sprite.ox = sprite.bitmap.width / 2
  213.     sprite.oy = sprite.bitmap.height / 2
  214.     sprite.x = Graphics.width / 2
  215.     sprite.y = Graphics.height / 2
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● 敌人精灵生成
  219.   #--------------------------------------------------------------------------
  220.   def create_enemies
  221.     @enemy_sprites = $game_troop.members.reverse.collect do |enemy|
  222.       Sprite_Battler.new(@viewport1, enemy)
  223.     end
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # ● 生成角色精灵
  227.   #    默认下不显示角色的图像。为了方便使用,敌我双方使用共通的精灵。
  228.   #--------------------------------------------------------------------------
  229.   def create_actors
  230.     @actor_sprites = Array.new(4) { Sprite_Battler.new(@viewport1) }
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # ● 生成图片精灵
  234.   #    游戏开始时生成空的数组,在需要使用时才添加内容。
  235.   #--------------------------------------------------------------------------
  236.   def create_pictures
  237.     @picture_sprites = []
  238.   end
  239.   #--------------------------------------------------------------------------
  240.   # ● 计时器精灵生成
  241.   #--------------------------------------------------------------------------
  242.   def create_timer
  243.     @timer_sprite = Sprite_Timer.new(@viewport2)
  244.   end
  245.   #--------------------------------------------------------------------------
  246.   # ● 释放
  247.   #--------------------------------------------------------------------------
  248.   def dispose
  249.     dispose_battleback1
  250.     dispose_battleback2
  251.     dispose_enemies
  252.     dispose_actors
  253.     dispose_pictures
  254.     dispose_timer
  255.     dispose_viewports
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● 释放战场背景的精灵(地面)
  259.   #--------------------------------------------------------------------------
  260.   def dispose_battleback1
  261.     @back1_sprite.bitmap.dispose
  262.     @back1_sprite.dispose
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # ● 释放战场背景的精灵(墙壁)
  266.   #--------------------------------------------------------------------------
  267.   def dispose_battleback2
  268.     @back2_sprite.bitmap.dispose
  269.     @back2_sprite.dispose
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● 释放敌人精灵
  273.   #--------------------------------------------------------------------------
  274.   def dispose_enemies
  275.     @enemy_sprites.each {|sprite| sprite.dispose }
  276.   end
  277.   #--------------------------------------------------------------------------
  278.   # ● 释放角色精灵
  279.   #--------------------------------------------------------------------------
  280.   def dispose_actors
  281.     @actor_sprites.each {|sprite| sprite.dispose }
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ● 释放图片精灵
  285.   #--------------------------------------------------------------------------
  286.   def dispose_pictures
  287.     @picture_sprites.compact.each {|sprite| sprite.dispose }
  288.   end
  289.   #--------------------------------------------------------------------------
  290.   # ● 释放计时器精灵
  291.   #--------------------------------------------------------------------------
  292.   def dispose_timer
  293.     @timer_sprite.dispose
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # ● 释放显示端口
  297.   #--------------------------------------------------------------------------
  298.   def dispose_viewports
  299.     @viewport1.dispose
  300.     @viewport2.dispose
  301.     @viewport3.dispose
  302.   end
  303.   #--------------------------------------------------------------------------
  304.   # ● 更新画面
  305.   #--------------------------------------------------------------------------
  306.   def update
  307.     update_battleback1
  308.     update_battleback2
  309.     update_enemies
  310.     update_actors
  311.     update_pictures
  312.     update_timer
  313.     update_viewports
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ● 更新战场背景的精灵(地面)
  317.   #--------------------------------------------------------------------------
  318.   def update_battleback1
  319.     @back1_sprite.update
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ● 更新战场背景的精灵(墙壁)
  323.   #--------------------------------------------------------------------------
  324.   def update_battleback2
  325.     @back2_sprite.update
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   # ● 更新敌人的精灵
  329.   #--------------------------------------------------------------------------
  330.   def update_enemies
  331.     @enemy_sprites.each {|sprite| sprite.update }
  332.   end
  333.   #--------------------------------------------------------------------------
  334.   # ● 更新角色的精灵
  335.   #--------------------------------------------------------------------------
  336.   def update_actors
  337.     @actor_sprites.each_with_index do |sprite, i|
  338.       sprite.battler = $game_party.members[i]
  339.       sprite.update
  340.     end
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● 更新图片精灵
  344.   #--------------------------------------------------------------------------
  345.   def update_pictures
  346.     $game_troop.screen.pictures.each do |pic|
  347.       @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
  348.       @picture_sprites[pic.number].update
  349.     end
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ● 更新计时器精灵
  353.   #--------------------------------------------------------------------------
  354.   def update_timer
  355.     @timer_sprite.update
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   # ● 更新显示端口
  359.   #--------------------------------------------------------------------------
  360.   def update_viewports
  361.     @viewport1.tone.set($game_troop.screen.tone)
  362.     @viewport1.ox = $game_troop.screen.shake
  363.     @viewport2.color.set($game_troop.screen.flash_color)
  364.     @viewport3.color.set(0, 0, 0, 255 - $game_troop.screen.brightness)
  365.     @viewport1.update
  366.     @viewport2.update
  367.     @viewport3.update
  368.   end
  369.   #--------------------------------------------------------------------------
  370.   # ● 获取敌人和角色的精灵
  371.   #--------------------------------------------------------------------------
  372.   def battler_sprites
  373.     @enemy_sprites + @actor_sprites
  374.   end
  375.   #--------------------------------------------------------------------------
  376.   # ● 判定是否动画显示中
  377.   #--------------------------------------------------------------------------
  378.   def animation?
  379.     battler_sprites.any? {|sprite| sprite.animation? }
  380.   end
  381.   #--------------------------------------------------------------------------
  382.   # ● 判定效果是否执行中
  383.   #--------------------------------------------------------------------------
  384.   def effect?
  385.     battler_sprites.any? {|sprite| sprite.effect? }
  386.   end
  387. end
复制代码
请问问题出在什么地方(变量貌似不认),该如何解决?

用事件的显示图片,其图片会被战斗的动画闪烁效果覆盖,
我要的图片算是界面的一部分,所以纯事件感觉不大可能做得出。



下面是工程和示意图:

捕获.PNG (392.13 KB, 下载次数: 42)

捕获.PNG

点评

hcm
解答http://bbs.66rpg.com/forum.php?mod=redirect&goto=findpost&ptid=313180&pid=2443719  发表于 2014-3-2 08:23
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-12-23 06:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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