Project1

标题: 45度战斗角的问题 [打印本页]

作者: 亮F    时间: 2008-7-25 01:13
标题: 45度战斗角的问题
我用这个脚本
#图片血槽显示Ver 1.0(清爽版)
#              by逐月

#描画HP槽
def HP (actor,x,y)         
@bitmap3 = Bitmap.new("Graphics/Pictures/底")
@src_rect3 = Rect.new(0,0,@bitmap3.width, @bitmap3.height)
self.contents.blt(x,y, @bitmap3, @src_rect3)
#HP显示
@bitmap3 = Bitmap.new("Graphics/Pictures/hp")
w3 = @bitmap3.width * actor.hp/actor.maxhp
@src_rect3 = Rect.new(0,0,w3, @bitmap3.height)
self.contents.blt(x+4,y+2, @bitmap3, @src_rect3)
end
#描画SP槽
def SP (actor,x,y)
@bitmap1 = Bitmap.new("Graphics/Pictures/底")
@src_rect1 = Rect.new(0,0,@bitmap1.width, @bitmap1.height)
self.contents.blt(x,y, @bitmap1, @src_rect1)
#SP显示           
@bitmap1 = Bitmap.new("Graphics/Pictures/sp")
w1 = @bitmap1.width * actor.sp/actor.maxsp
@src_rect1 = Rect.new(0,0,w1, @bitmap1.height)
self.contents.blt(x+4,y+2, @bitmap1, @src_rect1)
end

#==============================================================================
# 45度战斗坐标
#    来自 ikki
#==============================================================================

class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 取得战斗画面的 X 坐标
#--------------------------------------------------------------------------
def screen_x
   case self.index
   when 0
     return 350
     when 1
       return 430
       when 2
         return 510
         when 3
           return 580
           else
             return 600
             end
            end
#--------------------------------------------------------------------------
# ● 取得战斗画面的 Y 坐标
#--------------------------------------------------------------------------
def screen_y
   case self.index
   when 0
     return 430
     when 1
       return 400
       when 2
         return 360
         when 3
           return 320
           else
             return 1000
             end
            end
#--------------------------------------------------------------------------
# ● 取得战斗画面的 Z 坐标
#--------------------------------------------------------------------------
def screen_z
   case self.index
   when 0
     return 10
     when 1
       return 9
       when 2
         return 8
         when 3
           return 7
           else   
             return 0   
             end
            end
end
#==============================================================================
# ■ Spriteset_Battle
#------------------------------------------------------------------------------
#  处理战斗画面的活动块的类。本类在 Scene_Battle 类
# 的内部使用。
#==============================================================================

class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● 定义实例变量
  #--------------------------------------------------------------------------
  attr_reader   :viewport1                # 敌人方的显示端口
  attr_reader   :viewport2                # 角色方的显示端口
  #--------------------------------------------------------------------------
  # ● 初始化变量
  #--------------------------------------------------------------------------
  def initialize
    # 生成显示端口
    @viewport1 = Viewport.new(0, 0, 640, 480)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport4 = Viewport.new(0, 0, 640, 480)
    @viewport2.z = 101
    @viewport3.z = 200
    @viewport4.z = 5000
    # 生成战斗背景活动块
    @battleback_sprite = Sprite.new(@viewport1)
    # 生成敌人活动块
    @enemy_sprites = []
    for enemy in $game_troop.enemies.reverse
      @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
    end
    # 生成敌人活动块
    @actor_sprites = []
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    @actor_sprites.push(Sprite_Battler.new(@viewport2))
    # 生成天候
    @weather = RPG::Weather.new(@viewport1)
    # 生成图片活动块
    @picture_sprites = []
    for i in 51..100
      @picture_sprites.push(Sprite_Picture.new(@viewport3,
        $game_screen.pictures))
    end
    # 生成计时器块
    @timer_sprite = Sprite_Timer.new
    # 刷新画面
    update
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  def dispose
    # 如果战斗背景位图存在的情况下就释放
    if @battleback_sprite.bitmap != nil
      @battleback_sprite.bitmap.dispose
    end
    # 释放战斗背景活动块
    @battleback_sprite.dispose
    # 释放敌人活动块、角色活动块
    for sprite in @enemy_sprites + @actor_sprites
      sprite.dispose
    end
    # 释放天候
    @weather.dispose
    # 释放图片活动块
    for sprite in @picture_sprites
      sprite.dispose
    end
    # 释放计时器活动块
    @timer_sprite.dispose
    # 释放显示端口
    @viewport1.dispose
    @viewport2.dispose
    @viewport3.dispose
    @viewport4.dispose
  end
  #--------------------------------------------------------------------------
  # ● 显示效果中判定
  #--------------------------------------------------------------------------
  def effect?
    # 如果是在显示效果中的话就返回 true
    for sprite in @enemy_sprites + @actor_sprites
      return true if sprite.effect?
    end
    return false
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    # 刷新角色的活动块 (对应角色的替换)
    @actor_sprites[0].battler = $game_party.actors[0]
    @actor_sprites[1].battler = $game_party.actors[1]
    @actor_sprites[2].battler = $game_party.actors[2]
    @actor_sprites[3].battler = $game_party.actors[3]
    # 战斗背景的文件名与现在情况有差异的情况下
    if @battleback_name != $game_temp.battleback_name
      @battleback_name = $game_temp.battleback_name
      if @battleback_sprite.bitmap != nil
        @battleback_sprite.bitmap.dispose
      end
      @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
      @battleback_sprite.src_rect.set(0, 0, 640, 480)
    end
    # 刷新战斗者的活动块
    for sprite in @enemy_sprites + @actor_sprites
      sprite.update
    end
    # 刷新天气图形
    @weather.type = $game_screen.weather_type
    @weather.max = $game_screen.weather_max
    @weather.update
    # 刷新图片活动块
    for sprite in @picture_sprites
      sprite.update
    end
    # 刷新计时器活动块
    @timer_sprite.update
    # 设置画面的色调与震动位置
    @viewport1.tone = $game_screen.tone
    @viewport1.ox = $game_screen.shake
    # 设置画面的闪烁色
    @viewport4.color = $game_screen.flash_color
    # 刷新显示端口
    @viewport1.update
    @viewport2.update
    @viewport4.update
  end
end



#==============================================================================
# ■ Window_BattleStatus
#------------------------------------------------------------------------------
#  显示战斗画面同伴状态的窗口。
#==============================================================================

class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
#$data_system_level_up_me = "Audio/ME/升级音乐"
def initialize
   super(0, 0, 640, 480)
   self.contents = Bitmap.new(width - 10, height - 32)
   self.opacity = 0
   @level_up_flags = [false, false, false, false]
   refresh
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
def dispose
   super
end
#--------------------------------------------------------------------------
# ● 设置升级标志
#     actor_index : 角色索引
#--------------------------------------------------------------------------
def level_up(actor_index)
   @level_up_flags[actor_index] = true
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
   self.contents.clear
   @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
     actor = $game_party.actors
     case i
       when 0
        x = 310
        y = 390
       when 1
        x = 390
        y = 340
       when 2
        x = 480
        y = 300
       when 3
        x = 550
        y = 270
      end
     if @level_up_flags
       self.contents.font.color = normal_color
       self.contents.draw_text(x, y, 80, 24, "LEVEL UP!")
       Audio.me_stop
#        Audio.me_play($data_system_level_up_me)
     else
    end
   end
end

#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
   super
   # 主界面的不透明度下降
   if $game_temp.battle_main_phase
     self.contents_opacity -= 50 if self.contents_opacity > 1
   else
     self.contents_opacity += 50 if self.contents_opacity < 255
   end
end
end


#==============================================================================
# ■ Window_BattleStatus
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# ● 初始化
#--------------------------------------------------------------------------
alias xrxs_bp2_refresh refresh
def refresh
   xrxs_bp2_refresh
   @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
     actor = $game_party.actors
     case i
       when 0
        x = 310
        y = 390
       when 1
        x = 390
        y = 340
       when 2
        x = 480
        y = 300
       when 3
        x = 550
        y = 270
      end
      ###########################一切自改##############################
     HP(actor, x-10, y)
     SP(actor, x-10, y + 10)
     #######################################一切自改###############
   end
end
end

范例的工程图是这样

我复制了脚本,也弄了图,可是我用怎么会变成这样

怎么回事 [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 电子最终龙    时间: 2008-7-25 01:20
Window_BattleStatus被定义了两次
你把用的脚本里面Window_BattleStatus的函数都放在同一页,然后把重复定义的函数整合到一起去就行了.
(抱着不养伸那啥党的态度,成品代码就不放老)
作者: 暗F    时间: 2008-7-25 04:28
提示: 作者被禁止或删除 内容自动屏蔽
作者: 电子最终龙    时间: 2008-7-25 04:49
- -这次看清楚是什么问题了,估计是你还用了其他对Window_BattleStatus作了重定义的脚本.
试下把你发上来的脚本移到其他在别人那里复制过来的脚本后面.
如还是没有改善就只能建议你自己想办法整合了
作者: 灯笼菜刀王    时间: 2008-7-25 04:55
很明显,楼主还使用了别的血槽- -,看那不正常的状态显示,上面明显有N条血槽。

不会整合,不明白脚本原理的话,除了主要的脚本,其他的有关战斗类的脚本就都别使用了。不管是什么东东,免得出现很奇怪的东西.... [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 暗F    时间: 2008-7-25 05:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: redant    时间: 2008-7-25 06:33
很明显…… 囧 和菜刀说的一样
lz用了显示敌人血量百分比 两个血条
所以 要把不用的血条 删掉

这个其实很简单 只要把 除了这个的血条 HP sp
那个注释掉 就行了……

出错不要紧 可以试试自己做

PS 这个血条 就很PL了 再PL 就要自己做

去下七夕小雨的血槽绘制录像




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