Project1

标题: RTAB_sixRice_017b版的战斗背景问题 [打印本页]

作者: 阿尔卑斯    时间: 2013-4-30 10:40
标题: RTAB_sixRice_017b版的战斗背景问题
它的战斗系统战斗背景会变大和变小,我喜欢这效果,但当我想把敌人战斗图放在一个特定的位置,例如我的战斗背景图是一片山地,有山腰和山坡。我在数据库里把一个弓箭手放在山坡上。但测试时它的位置在山腰。怎么解决。我复制它的脚本吧
  1. class Spriteset_Battle
  2.   #--------------------------------------------------------------------------
  3.   # ● 公開インスタンス変数
  4.   #--------------------------------------------------------------------------
  5.   attr_reader   :real_x                   # x座標補正(現在値)
  6.   attr_reader   :real_y                   # y座標補正(現在値)
  7.   attr_reader   :real_zoom                # 拡大率(現在値)
  8.   #--------------------------------------------------------------------------
  9.   # ● オブジェクト初期化
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     # ビューポートを作成
  13.     @viewport1 = Viewport.new(0, 0, 640, 480)
  14.     @viewport2 = Viewport.new(0, 0, 640, 480)
  15.     @viewport3 = Viewport.new(0, 0, 640, 480)
  16.     @viewport4 = Viewport.new(0, 0, 640, 480)
  17.     @viewport2.z = 101
  18.     @viewport3.z = 200
  19.     @viewport4.z = 5000
  20.     [url=home.php?mod=space&uid=36110]@Wait[/url] = 0
  21.     @real_x = 0
  22.     @real_y = 0
  23.     @real_zoom = 1.0
  24.     @target_x = 0
  25.     @target_y = 0
  26.     @target_zoom = 1.0
  27.     @gap_x = 0
  28.     @gap_y = 0
  29.     @gap_zoom = 0.0
  30.     # バトルバックスプライトを作成
  31.     @battleback_sprite = Sprite.new(@viewport1)
  32.     # エネミースプライトを作成
  33.     @enemy_sprites = []
  34.     for enemy in $game_troop.enemies.reverse
  35.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  36.     end
  37.     # アクタースプライトを作成
  38.     @actor_sprites = []
  39.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  40.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  41.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  42.     @actor_sprites.push(Sprite_Battler.new(@viewport2))
  43.     # 天候を作成
  44.     @weather = RPG::Weather.new(@viewport1)
  45.     # ピクチャスプライトを作成
  46.     @picture_sprites = []
  47.     for i in 51..100
  48.       @picture_sprites.push(Sprite_Picture.new(@viewport3,
  49.         $game_screen.pictures[i]))
  50.     end
  51.     # タイマースプライトを作成
  52.     @timer_sprite = Sprite_Timer.new
  53.     # フレーム更新
  54.     update
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● フレーム更新
  58.   #--------------------------------------------------------------------------
  59.   def update
  60.     # アクタースプライトの内容を更新 (アクターの入れ替えに対応)
  61.     @actor_sprites[0].battler = $game_party.actors[0]
  62.     @actor_sprites[1].battler = $game_party.actors[1]
  63.     @actor_sprites[2].battler = $game_party.actors[2]
  64.     @actor_sprites[3].battler = $game_party.actors[3]
  65.     # バトルバックのファイル名が現在のものと違う場合
  66.     if @battleback_name != $game_temp.battleback_name
  67.       make_battleback
  68.     end
  69.     # 画面のスクロール
  70.     screen_scroll
  71.     # モンスターの位置補正
  72.     for enemy in $game_troop.enemies
  73.       enemy.real_x = @real_x
  74.       enemy.real_y = @real_y
  75.       enemy.real_zoom = @real_zoom
  76.     end
  77.     # バトラースプライトを更新
  78.     for sprite in @enemy_sprites + @actor_sprites
  79.       sprite.update
  80.     end
  81.     # 天候グラフィックを更新
  82.     @weather.type = $game_screen.weather_type
  83.     @weather.max = $game_screen.weather_max
  84.     @weather.update
  85.     # ピクチャスプライトを更新
  86.     for sprite in @picture_sprites
  87.       sprite.update
  88.     end
  89.     # タイマースプライトを更新
  90.     @timer_sprite.update
  91.     # 画面の色調とシェイク位置を設定
  92.     @viewport1.tone = $game_screen.tone
  93.     @viewport1.ox = $game_screen.shake
  94.     # 画面のフラッシュ色を設定
  95.     @viewport4.color = $game_screen.flash_color
  96.     # ビューポートを更新
  97.     @viewport1.update
  98.     @viewport2.update
  99.     @viewport4.update
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● バトル背景の設定
  103.   #--------------------------------------------------------------------------
  104.   def make_battleback
  105.     @battleback_name = $game_temp.battleback_name
  106.     if @battleback_sprite.bitmap != nil
  107.       @battleback_sprite.bitmap.dispose
  108.     end
  109.     @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
  110.     if @battleback_sprite.bitmap.width == 640 and
  111.        @battleback_sprite.bitmap.height == 320
  112.       @battleback_sprite.src_rect.set(0, 0, 1280, 640)
  113.       @base_zoom = 2.0
  114.       @battleback_sprite.zoom_x = @base_zoom
  115.       @battleback_sprite.zoom_y = @base_zoom
  116.       @real_y = 4
  117.       @battleback_sprite.x = 320
  118.       @battleback_sprite.y = @real_y
  119.       @battleback_sprite.ox = @battleback_sprite.bitmap.width / 2
  120.       @battleback_sprite.oy = @battleback_sprite.bitmap.height / 4
  121.     elsif @battleback_sprite.bitmap.width == 640 and
  122.           @battleback_sprite.bitmap.height == 480
  123.       @battleback_sprite.src_rect.set(0, 0, 960, 720)
  124.       @base_zoom = 1.5
  125.       @battleback_sprite.zoom_x = @base_zoom
  126.       @battleback_sprite.zoom_y = @base_zoom
  127.       @battleback_sprite.x = 320
  128.       @battleback_sprite.y = 0
  129.       @battleback_sprite.ox = @battleback_sprite.bitmap.width / 2
  130.       @battleback_sprite.oy = @battleback_sprite.bitmap.height / 4
  131.     else
  132.       @battleback_sprite.src_rect.set(0, 0, @battleback_sprite.bitmap.width,
  133.                                       @battleback_sprite.bitmap.height)
  134.       @base_zoom = 1.0
  135.       @battleback_sprite.zoom_x = @base_zoom
  136.       @battleback_sprite.zoom_y = @base_zoom
  137.       @battleback_sprite.x = 320
  138.       @battleback_sprite.y = 0
  139.       @battleback_sprite.ox = @battleback_sprite.bitmap.width / 2
  140.       @battleback_sprite.oy = @battleback_sprite.bitmap.height / 4
  141.     end
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● 画面のスクロール目標の位置・拡大率設定
  145.   #--------------------------------------------------------------------------
  146.   def screen_target(x, y, zoom)
  147.     return unless $scene.drive
  148.     @wait = $scene.scroll_time
  149.     @target_x = x
  150.     @target_y = y
  151.     @target_zoom = zoom
  152.     screen_over
  153.     @gap_x = @target_x - @real_x
  154.     @gap_y = @target_y - @real_y
  155.     @gap_zoom = @target_zoom - @real_zoom
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ● 画面のスクロール
  159.   #--------------------------------------------------------------------------
  160.   def screen_scroll
  161.     if @wait > 0
  162.       @real_x = @target_x - @gap_x * (@wait ** 2) / ($scene.scroll_time ** 2)
  163.       @real_y = @target_y - @gap_y * (@wait ** 2) / ($scene.scroll_time ** 2)
  164.       @real_zoom = @target_zoom -
  165.                     @gap_zoom * (@wait ** 2) / ($scene.scroll_time ** 2)
  166.       @battleback_sprite.x = 320 + @real_x
  167.       @battleback_sprite.y = @real_y
  168.       @battleback_sprite.zoom_x = @base_zoom * @real_zoom
  169.       @battleback_sprite.zoom_y = @base_zoom * @real_zoom
  170.       @battleback_sprite.ox = @battleback_sprite.bitmap.width / 2
  171.       @battleback_sprite.oy = @battleback_sprite.bitmap.height / 4
  172.       @wait -= 1
  173.     end
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ● スクリーンが画面外に出た時の補正処理
  177.   #--------------------------------------------------------------------------
  178.   def screen_over
  179.     width = @battleback_sprite.bitmap.width * @base_zoom * @target_zoom / 2
  180.     unless 324 + @target_x > width and 324 - @target_x > width
  181.       if 324 + @target_x > width
  182.         @target_x = width - 324
  183.       elsif 324 - @target_x > width
  184.         @target_x = 324 - width
  185.       end
  186.     end
  187.     height = @battleback_sprite.bitmap.height * @base_zoom * @target_zoom / 4
  188.     unless @target_y > height - 4 and 484 - @target_y > 3 * height
  189.       if @target_y > height - 4
  190.         @target_y = height - 4
  191.       elsif 484 - @target_y > 3 * height
  192.         @target_y = 484 - 3 * height
  193.       end
  194.     end
  195.   end
  196. end
复制代码

作者: wingzeroplus    时间: 2013-4-30 10:52
因为RTAB的背景有拉伸效果,所以设置背景并不是真正的战斗效果,你只要选好合适的图就行(什么图是合适的,这个就要靠经验了)
比如看截图,设置和实际显示是不同的
作者: 阿尔卑斯    时间: 2013-4-30 11:05
wingzeroplus 发表于 2013-4-30 10:52
因为RTAB的背景有拉伸效果,所以设置背景并不是真正的战斗效果,你只要选好合适的图就行(什么图是合适的, ...

懂了。但因为战斗背景是全部拉伸,一张战斗背景图拉伸到全画面(640*480),而画面320以下的是状态栏,不能显示敌人战斗图,而我的战斗背景图的下面部分要放置敌人,这个在数据库怎么也办不了。 ,我要在右下角的那片草上放一条蛇,但测试时蛇跑到上面去了,而草显示在状态栏的位置,怎么办
作者: wingzeroplus    时间: 2013-4-30 11:12
本帖最后由 wingzeroplus 于 2013-4-30 11:16 编辑

自己用PS把你的图下面添一块长方形,多测试几次应该就可以解决

PS:如果使用镜头拉伸效果 最好准备战斗背景为1280*640或者960*720两种尺寸(或者以上)的图片作为战斗背景 否则马赛克严重
作者: 阿尔卑斯    时间: 2013-4-30 11:40
wingzeroplus 发表于 2013-4-30 11:12
自己用PS把你的图下面添一块长方形,多测试几次应该就可以解决

PS:如果使用镜头拉伸效果 最好准备战斗背 ...

我加了长方块来试,试了N次效果还不是很好,我果断放弃把蛇放到草地上了。呵呵。还有马赛克毁了这战斗背景图,但1280*640的图片导不入,我直接把它复制到battleback也不行,
作者: 阿尔卑斯    时间: 2013-4-30 11:45
不能通过修改脚本上的参数来解决吗?




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