赞 | 2 |
VIP | 0 |
好人卡 | 0 |
积分 | 15 |
经验 | 4586 |
最后登录 | 2019-7-8 |
在线时间 | 120 小时 |
Lv3.寻梦者
- 梦石
- 1
- 星屑
- 472
- 在线时间
- 120 小时
- 注册时间
- 2016-3-6
- 帖子
- 83
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
如上,无论我怎么点选这个选项,未出战的替补队员都无法获得经验.
之前我从论坛下了个成员仓库的脚本(PMCC超级仓库),平时替补队员未出战时是存放在成员仓库里.会不会与这个有关?
脚本链接:https://rpg.blue/thread-332492-1-1.html
脚本:
- #————————————————————————————————————————
- # ●PMSYS By.Clov
- # *口袋怪兽系列系统
- # Ver:1.0 Date:2011.5.29 项目原型
- # Ver:1.1 Date:2013.8.19 生成部分
- # Ver:1.2 Date:2013.9.15 仓库部分
- # Ver:1.2.1 Date:2013.9.18 仓库部分更新
- # Ver:1.2.2 Date:2013.9.28 仓库部分纠错
- # Ver:1.2.3 Date:2013.9.30 仓库位图优化
- # *声明:
- # -1.本系列脚本版权归原作者所有
- # -2.编写的初衷是无偿共享给爱好者
- # -3.如是用于免费作品只需要注明 不需要任何虚拟或实际利益
- # -4.如用于商业 请先询问作者获得版权
- # -5.若发现BUG或改善意见 可以提出或纠正
- # *Email:[email protected]
- #————————————————————————————————————————
- module PMSYS
- #————————————————————————————————————————
- #●仓库类设置
- #————————————————————————————————————————
- PMCC_ALL = 100 #仓库的容量(默认)
- PMCC_MAX = 4 #队伍最多人数(nil为无限)
- PMCC_MIN = 1 #队伍最少人数(nil为无限)
- PMCC_DEF = nil #队伍固定这个数(nil为不设)
- PMCC_NOPM = [99] #不能存放的角色(默认)
- #————————————————————————————————————————
- #●窗口类设置
- #————————————————————————————————————————
- PMCCWIN_FACE = true #true使用头像作背景false使用中渐变做背景
- PMCCWIN_C = false #true使用总成长率false使用总能力值
- PMCCWIN_PBHPMP = 100 #总能力值HP MP的占比
- PMCCWIN_PCNAME = "总能力值" #成长率或能力值的标题
- PMCCWIN_CR_NAME = Color.new(255,255,255,255) #普通名字描绘色
- PMCCWIN_CR_SNAME = Color.new(255,50,50,255) #禁止存/取名字描绘色
- PMCCWIN_CR_XD = Color.new(0,160,230,128) #雄性背景色
- PMCCWIN_CR_CD = Color.new(230,60,100,128) #雌性背景色
- PMCCWIN_CR_XN = Color.new(255,255,255,128) #无性别性背景色
- PMCCWIN_CR_BACK = Color.new(180,230,255,88) #默认背景色
- PMCCWIN_CR_LBACK = Color.new(255,100,255,88) #收藏背景色
- PMCCWIN_CR_CIB = Color.new(255,255,255,100) #标题项背景颜色
- PMCCWIN_CR_CII = Color.new(255,100,100,160) #标题项标志颜色
- PMCCWIN_CR_CCP = Color.new(255,100,100,160) #成员项背景颜色
- PMCCWIN_CR_CCL = Color.new(200,200,100,160) #成长率/能力值背景色
- end
- #————————————————————————————————————————
- # ●Game_Party By.Clov
- # *存取角色(宠物)
- # *Ver:1.0 Date:2013.9.12
- # 使用:$game_party.pmxx
- # -$game_party.pmcc_actor 读取仓库全部角色
- # -$game_party.pmcc_pcts(pi,ci) 队伍/仓库项目ID替换
- # -$game_party.pmcc_idts(pi,ci) 队伍/仓库角色ID替换
- # -$game_party.pmcc_add(id) 直接添加ID号角色入仓库
- # -$game_party.pmcc_ove(id) 直接删除仓库里ID号角色
- # -$game_party.pmcc_no(id=nil) 添加ID号角色禁存/取(不设参数可读)
- # -$game_party.pmcc_ok(id) 删除被禁存/取ID号角色
- # -$game_party.pmcc_like(id=nil) 添加/删除收藏的ID号角色(不设参数可读)
- # -$game_party.pmcc_max(num=nil) 限制队伍最大人数(不设参数可读)
- # -$game_party.pmcc_min(num=nil) 限制队伍最小人数(不设参数可读)
- # -$game_party.pmcc_def(num=nil) 直接指定队伍固定数(不设参数可读)
- # -$game_party.pmcc_all(num=nil,del=true/false)
- # -更改仓库最大格数(不设参数可读)
- # -del:true 整理全部角色到容量内,删除多出容量的角色
- # -del:false 不整理,只限制容量,不删除多出容量的角色
- # *Ver:1.1 Date:2013.9.18
- # -更新批量操作
- # -$game_party.pmcc_allove 清空仓库全部角色
- # -$game_party.pmcc_arrove(arractor) 批量删除仓库角色(参数为数组)
- # -$game_party.pmcc_arradd(arractor) 批量添加仓库角色(参数为数组)
- # -$game_party.arr_add_actor(arractor)批量添加队伍角色(参数为数组)
- # -$game_party.arr_remove_actor(arractor)批量删除队伍角色(参数为数组)
- #————————————————————————————————————————
- class Game_Party < Game_Unit
- #———————————————————————————————————————
- #初始化仓库
- #———————————————————————————————————————
- alias :pmcc_initialize :initialize
- def initialize
- pmcc_initialize
- @pmcc = Array.new(pmcc_all)
- end
- #———————————————————————————————————————
- #角色入队
- #———————————————————————————————————————
- alias :pmcc_add_actor :add_actor
- def add_actor(actor_id)
- pmcc_add_actor(actor_id)
- @pmcc.delete(actor_id)
- end
- #———————————————————————————————————————
- #角色离队
- #———————————————————————————————————————
- alias :pmcc_remove_actor :remove_actor
- def remove_actor(actor_id)
- pmcc_remove_actor(actor_id)
- @pmcc.delete(actor_id)
- end
- #———————————————————————————————————————
- #存入、拿出角色(项目型)
- #pi:队伍的项目ID ci:仓库的项目ID
- #———————————————————————————————————————
- def pmcc_pcts(pi,ci)
- #取得目前仓库位置角色ID
- cact = @pmcc[ci]
- #放置新角色ID到该仓库位置
- @pmcc[ci] = @actors[pi]
- #该仓库位置有角色的情况下加入到队伍位置
- #没有角色的话直接从队伍删除
- cact ? @actors[pi] = cact : @actors.delete_at(pi)
- #刷新队伍、及地图
- $game_player.refresh
- $game_map.need_refresh = true
- end
- #———————————————————————————————————————
- #存入、拿出角色(指定型)
- #pa:队伍的角色ID ca:仓库的角色ID
- #———————————————————————————————————————
- def pmcc_idts(pa, ca)
- #查看队伍窗口是否存在角色
- pa = @actors.include?(pa) ? pa : nil
- ca = @pmcc.include?(ca) ? ca : nil
- #全部存在的情况下执行替换
- if pa && ca
- pi = @actors.index(pa)
- ci = @pmcc.index(ca)
- pmcc_pcts(pi,ci)
- end
- end
- #———————————————————————————————————————
- #直接存入仓库
- #———————————————————————————————————————
- def pmcc_add(id)
- #仓库是否有空位
- index = @pmcc.index(nil)
- if [email protected]?(id) && index
- #存入仓库
- @pmcc[index] = id
- #在队伍的话离队
- @actors.delete(id)
- #刷新队伍、及地图
- $game_player.refresh
- $game_map.need_refresh = true
- end
- end
- #———————————————————————————————————————
- #直接从仓库删除
- #———————————————————————————————————————
- def pmcc_ove(id)
- index = @pmcc.index(id)
- @pmcc[index] = nil
- end
- #———————————————————————————————————————
- #不能存放的角色(队伍仓库通用)
- #———————————————————————————————————————
- def pmcc_no(id=nil)
- @pmcc_no ||= PMSYS::PMCC_NOPM
- @pmcc_no << id if id && !@pmcc_no.include?(id);@pmcc_no
- end
- #———————————————————————————————————————
- #解除不可存放的角色(队伍仓库通用)
- #———————————————————————————————————————
- def pmcc_ok(id)
- @pmcc_no.delete(id)
- end
- #———————————————————————————————————————
- #仓库的角色
- #———————————————————————————————————————
- def pmcc_actor
- @pmcc.collect {|id| id ? $game_actors[id] : id }
- end
- #———————————————————————————————————————
- #收藏的角色
- #———————————————————————————————————————
- def pmcc_like(id=nil)
- @pmcc_like ||= []
- @pmcc_like.include?(id) ? @pmcc_like.delete(id) : @pmcc_like.push(id) if id
- @pmcc_like
- end
- #———————————————————————————————————————
- #队伍的最大人数
- #———————————————————————————————————————
- def pmcc_max(num=nil)
- @pmcc_max ||= PMSYS::PMCC_MAX
- @pmcc_max = num if num ; @pmcc_max
- end
- #———————————————————————————————————————
- #队伍的最少人数
- #———————————————————————————————————————
- def pmcc_min(num=nil)
- @pmcc_min ||= PMSYS::PMCC_MIN
- @pmcc_min = num if num ; @pmcc_min
- end
- #———————————————————————————————————————
- #队伍的指定人数
- #———————————————————————————————————————
- def pmcc_def(num=nil)
- @pmcc_def ||= PMSYS::PMCC_DEF
- @pmcc_def = num if num ; @pmcc_def
- end
- #———————————————————————————————————————
- #仓库的容量 del:false:限制容量 true:真实容量
- #———————————————————————————————————————
- def pmcc_all(num=nil,del=false)
- @pmcc_all ||= PMSYS::PMCC_ALL
- if num
- #获得当前、新的容量
- now = @pmcc_all
- new = @pmcc_all = num
- c = new - now
- #被扩大仓库情况
- if now < new ; @pmcc += Array.new(c)
- #被缩小仓库情况(del为开启时)角色全部前移容量外的删除
- elsif now > new && del
- @pmcc_all = num
- pmcc = @pmcc.compact
- c = [new - pmcc.size, 0].max
- @pmcc = pmcc[0,new] + Array.new(c) ; end
- end ; @pmcc_all
- end
- #———————————————————————————————————————
- #清空仓库(V1.1)
- #———————————————————————————————————————
- def pmcc_allove
- @pmcc = Array.new(pmcc_all)
- end
- #———————————————————————————————————————
- #批量删除库存(V1.1)
- #———————————————————————————————————————
- def pmcc_arrove(arractor)
- arractor.each {|id| pmcc_ove(id) }
- end
- #———————————————————————————————————————
- #批量添加入库(V1.1)
- #———————————————————————————————————————
- def pmcc_arradd(arractor)
- arractor.each {|id|
- #仓库是否有空位
- index = @pmcc.index(nil)
- if [email protected]?(id) && index
- #存入仓库
- @pmcc[index] = id
- #在队伍的话离队
- @actors.delete(id)
- end }
- #刷新队伍、及地图
- $game_player.refresh
- $game_map.need_refresh = true
- end
- #———————————————————————————————————————
- #批量加入队伍(V1.1)
- #———————————————————————————————————————
- def arr_add_actor(arractor)
- arractor.each {|id| unless @actors.include?(id)
- @actors.push(id) ; @pmcc.delete(id) ; end }
- #刷新队伍、及地图
- $game_player.refresh
- $game_map.need_refresh = true
- end
- #———————————————————————————————————————
- #批量离开队伍(V1.1)
- #———————————————————————————————————————
- def arr_remove_actor(arractor)
- arractor.each {|id| @actors.delete(id) }
- #刷新队伍、及地图
- $game_player.refresh
- $game_map.need_refresh = true
- end
- end
- #————————————————————————————————————————
- # ●Window_PMCC By.Clov
- # *宠物仓库窗口
- # *Ver:1.0 Date:2013.9.9
- # *使用:Window_PMCC.new(x, y, w, h, l, type, viewport)
- # *实例方法:
- # -self.one=true/false 更改本窗口行走图选择/全部动态
- # -self.dy_type=:W/:H/:WH 更改本窗口行走图动态类型
- # -self.actives=true/false 窗口是否可活动(行走图动态开关)
- # -self.sproxoy 各精灵跟踪本窗口原点
- # -self.new_bit_rect 执行排序 可乱序
- # *Ver:1.1 Date:2013.9.18
- # -增加状态窗口定义
- # *Ver:1.2 Date:2013.9.28
- # -修正预留数据的错误
- # *Ver:1.3 Date:2013.9.30
- # -优化内容位图尺寸
- #————————————————————————————————————————
- class Window_PMCC < Window_Selectable
- #———————————————————————————————————————
- #初始化对象
- #———————————————————————————————————————
- def initialize(x, y, w, h, l, type, viewport)
- #列数及类型
- @l = l ; @type = type
- #使用父类
- super(x, y, w, h)
- #选项位置
- self.index = -1
- #显示端口
- self.viewport = viewport
- #预留空位(窗口)
- self.padding_bottom = dnh
- #生成动态行走图(z提高)
- [url=home.php?mod=space&uid=911532]@dych[/url] = Dynamic_Character.new(x, y, self.z, viewport)
- #记录隐蔽行走图的标准选项
- @dychtfi = 0
- #生成信息精灵
- @info = Sprite.new(viewport)
- #生成位图,宽、高继承预留空位
- @info.bitmap = Bitmap.new(contents_width, dnh)
- #信息坐标(边距同步)
- @info.x = x+standard_padding
- @info.y = page_row_max*(item_height+hk)+standard_padding
- #信息高于本窗口
- @info.z = self.z
- #生成成长率信息精灵
- @info_ccl = Sprite.new(viewport)
- @info_ccl.bitmap = Bitmap.new(contents_width, dnh)
- @info_ccl.x = @info.x ; @info_ccl.y = @info.y ; @info_ccl.z = @info.z
- #生成成员信息精灵
- @info_pc = Sprite.new(viewport)
- @info_pc.bitmap = Bitmap.new(contents_width, dnh)
- @info_pc.x = @info.x ; @info_pc.y = @info.y ; @info_pc.z = @info.z
- #生成背景精灵
- @back = Sprite.new(viewport)
- #生成位图,宽、高继承本窗口绘制内容
- @back.bitmap = Bitmap.new(contents_width, contents_height)
- #背景坐标(边距同步)
- @back.x , @back.y = x+standard_padding, y+standard_padding
- #背景高于本窗口
- @back.z = self.z
- #记录当前窗口选项
- @sindex = 0
- #绘制信息>内容
- info ; refresh
- end
- #———————————————————————————————————————
- #获取数据
- #———————————————————————————————————————
- def data
- case @type ; when :L ; ldata ; when :R ; rdata ; end
- end
- #———————————————————————————————————————
- #预留数据
- #———————————————————————————————————————
- def data2(data2=nil)
- @data2 = data2 ? data2 : @data2 ; @data2
- end
- #———————————————————————————————————————
- #基本数据
- #———————————————————————————————————————
- def ldata ; $game_party.members ; end
- def rdata ; $game_party.pmcc_actor ; end
- #———————————————————————————————————————
- #获得、设置当前角色数据(V1.1)
- #———————————————————————————————————————
- def index_actor ; @index_actor ; end
- def index_actor=(actor) ; @index_actor = actor ; end
- #———————————————————————————————————————
- #动态行走图选择项动态
- #———————————————————————————————————————
- def one=(tf) ; @dych.one=@dy_one=tf ; end
- #———————————————————————————————————————
- #动态行走图显示类型更改
- #———————————————————————————————————————
- def dy_type=(type) ; @dych.type=@dy_type=type ; end
- #———————————————————————————————————————
- #获取项目数
- #———————————————————————————————————————
- def item_max
- case @type
- when :L ; ldata.size + 1
- when :R ; $game_party.pmcc_all ; end
- end
- #———————————————————————————————————————
- #获取列数
- #———————————————————————————————————————
- def col_max ; @l ; end
- #———————————————————————————————————————
- #宽高间隔
- #———————————————————————————————————————
- def wk ; return 2 ; end
- def hk ; return 2 ; end
- #———————————————————————————————————————
- #获取行高
- #———————————————————————————————————————
- def line_height ; return 24 ; end
- #———————————————————————————————————————
- #获取项目宽度、高度
- #———————————————————————————————————————
- def item_width ; return 96 ; end
- def item_height ; return 96 ; end
- #———————————————————————————————————————
- #获取标准边距
- #———————————————————————————————————————
- def standard_padding ; return 12 ; end
- #———————————————————————————————————————
- #下端空白内容高度
- #———————————————————————————————————————
- def dnh ; return 110 ; end
- #———————————————————————————————————————
- #计算窗口内容的高度
- #———————————————————————————————————————
- def contents_height
- [super - super % item_height, all_row_max * (item_height + hk)].max
- end
- #———————————————————————————————————————
- # ● 获取队伍、仓库全部行数
- #———————————————————————————————————————
- def all_row_max
- case @type
- when :L ; all_item_max = ldata.size + rdata.compact.size
- when :R ; all_item_max = rdata.size ; end
- [(all_item_max + col_max - 1) / col_max, 1].max
- end
- #———————————————————————————————————————
- #获取顶行位置
- #———————————————————————————————————————
- def top_row
- oy / (item_height + hk)
- end
- #———————————————————————————————————————
- #设置顶行位置
- #———————————————————————————————————————
- def top_row=(row)
- #窗口原点坐标更新
- row = 0 if row < 0
- row = row_max - 1 if row > row_max - 1
- self.oy = row * (item_height + hk)
- #必要精灵原点更新
- sproxoy
- #预留空位更新
- bachno
- end
- #———————————————————————————————————————
- #更新必要精灵原点(背景、行走图)
- #———————————————————————————————————————
- def sproxoy
- @dych.oy = @back.oy = self.oy
- end
- #———————————————————————————————————————
- #自定义“下端边距”隐蔽超出项目的精灵
- #———————————————————————————————————————
- def bachno
- #预留空位高(下端:矩形更新)
- h = top_row * (item_height + hk)+(self.height-padding-dnh)
- @back.src_rect.height = h
- #预留空位高(行走图隐蔽)
- dychtfi = page_item_max+top_row*col_max #计算隐蔽行走图的标准选项
- col_max.times {|i|@dych.visible(@dychtfi+i, true)}
- @dychtfi = dychtfi
- col_max.times {|i|@dych.visible(@dychtfi+i, false)}
- end
- #———————————————————————————————————————
- #获取项目的绘制矩形
- #———————————————————————————————————————
- def item_rect(index)
- rect = Rect.new
- rect.width = item_width
- rect.height = item_height
- rect.x = index % col_max * (item_width + wk)
- rect.y = index / col_max * (item_height + hk)
- rect
- end
- #———————————————————————————————————————
- #更新光标
- #———————————————————————————————————————
- def update_cursor
- super
- #更新当前角色
- update_actor
- #更新动态行走图光标
- @dych.index = self.index if @dy_one && @dych
- #更新成长率信息
- info_ccl if @info_ccl
- end
- #———————————————————————————————————————
- #更新当前角色(V1.1)
- #———————————————————————————————————————
- def update_actor
- #当前项目角色
- new_actor = data[self.index]
- #更新角色,没有的情况清除指令
- @index_actor = new_actor ? new_actor : :clear
- end
- #———————————————————————————————————————
- #绘制内容
- #———————————————————————————————————————
- def refresh
- #清除全体
- contents.clear
- @dych.clear
- @back.bitmap.clear
- #开始绘制
- item_max.times {|index|
- draw_item(index)}
- #更新内容
- data_refresh
- end
- #———————————————————————————————————————
- #更新内容
- #———————————————————————————————————————
- def data_refresh
- #更新当前角色
- update_actor
- #信息描绘
- info_ccl
- info_pc
- #预留空位(背景与行走图)
- bachno
- #必要精灵原点更新
- sproxoy
- end
- #———————————————————————————————————————
- #更新背景
- #———————————————————————————————————————
- def back_refresh
- #清除背景
- @back.bitmap.clear
- #开始绘制
- item_max.times {|index|
- #项目数据
- actor = data[index]
- #项目矩形
- rect = item_rect(index)
- #项目坐标
- x = rect.x + 1 ; y = rect.y + 1
- #描绘背景
- back(x, y, index, actor)}
- end
- #———————————————————————————————————————
- #绘制项目(替换时更新)
- #———————————————————————————————————————
- def draw_item(index)
- #项目数据
- actor = data[index]
- #项目矩形
- rect = item_rect(index)
- #项目坐标
- x = rect.x + 1 ; y = rect.y + 1
- #描绘背景
- back(x, y, index, actor)
- #角色不存在则返回
- return unless actor
- #行走图
- @dych.draw_character(x+60, y+75, actor, index)
- #头像
- draw_face(actor, rect.x + 1, rect.y + 1) if PMSYS::PMCCWIN_FACE
- #描绘基本色
- contents.font.color = PMSYS::PMCCWIN_CR_NAME
- #性别、等级背景
- lh = (line_height) * 3 - 2 #Y坐标增量
- c = Color.new(255,255,255,48)
- contents.fill_rect(x,y+lh,item_width-1,line_height,c)
- #性别
- xb = $game_pmsc[:pmxb][actor.id] if $game_pmsc
- case xb
- when "雄性" ; xb = "♂" ; c=PMSYS::PMCCWIN_CR_XD
- when "雌性" ; xb = "♀" ; c=PMSYS::PMCCWIN_CR_CD
- when nil ; c=PMSYS::PMCCWIN_CR_XN ; end
- contents.draw_text(x, y+lh, item_width, line_height, xb) if xb
- #等级
- contents.draw_text(x+28, y+lh, item_width, line_height, "Lv:#{actor.level}")
- #名字背景
- lh = (line_height) * 0
- contents.back_w(x,y+lh,item_width,line_height,0.25,c)
- #是否可存取角色
- pmcc_no = $game_party.pmcc_no.include?(actor.id)
- contents.font.color = PMSYS::PMCCWIN_CR_SNAME if pmcc_no
- #名字
- contents.draw_text(x, y+lh, item_width, line_height, actor.name, 1)
- end
- #———————————————————————————————————————
- #绘制角色肖像图
- #———————————————————————————————————————
- def draw_face(actor, x, y)
- #图像名 没有的话返回
- face_name = actor.face_name
- #没有图像
- return unless face_name
- #索引种类
- face_index = actor.face_index
- #传送位图
- bitmap = Cache.face(face_name)
- zx = face_index % 4 * 96
- zy = face_index / 4 * 96
- cw = ch = 94
- rect = Rect.new(zx, zy, cw, ch)
- contents.blt(x, y, bitmap, rect)
- bitmap.dispose
- end
- #———————————————————————————————————————
- #绘制背景
- #———————————————————————————————————————
- def back(x, y, index, actor)
- #存在角色的情况下
- if actor
- actor_like = $game_party.pmcc_like.include?(actor.id)
- #显示头像的话不绘制背景(空位、收藏除外)
- if PMSYS::PMCCWIN_FACE && !actor_like
- return
- end
- #不显示头像或有收藏的情况下(选择默认、收藏背景)
- if actor_like
- #收藏背景颜色
- c = PMSYS::PMCCWIN_CR_LBACK
- else
- #默认背景颜色
- c = PMSYS::PMCCWIN_CR_BACK
- end
- else
- #默认背景颜色
- c = PMSYS::PMCCWIN_CR_BACK
- end
- #描绘背景
- @back.bitmap.back_h(x,y,item_width-1,item_height-1,0.5,c)
- #描绘编号
- @back.bitmap.draw_text(x, y, item_width, item_height, index+1, 1)
- end
- #———————————————————————————————————————
- #绘制收藏背景(更新用)
- #———————————————————————————————————————
- def back_like(index)
- #项目数据
- actor = data[index]
- #项目矩形
- rect = item_rect(index)
- #项目坐标
- x = rect.x + 1 ; y = rect.y + 1
- #消除背景
- @back.bitmap.clear_rect(rect)
- #描绘背景
- back(x, y, index, actor)
- end
- #———————————————————————————————————————
- #绘制信息标题
- #———————————————————————————————————————
- def info
- #清除旧信息
- @info.bitmap.clear
- #基本坐标、边距
- x = 0 ; y = 5
- sp = standard_padding/2
- #标题项背景颜色
- cib = PMSYS::PMCCWIN_CR_CIB
- #标题项标志颜色
- cii = PMSYS::PMCCWIN_CR_CII
- #成员项背景颜色
- ccp = PMSYS::PMCCWIN_CR_CCP
- #更改字体大小
- @info.bitmap.font.size = 20
- #---------------------------------------------------------------------------
- #显示类型
- case @type
- #显示宽度为队伍窗口
- when :L ; w = contents_width - sp
- #显示宽度为仓库窗口
- when :R ; w = contents_width - item_width - sp
- #---------------------------------------------------------------------------
- #描绘队伍成员标题项背景
- x2 = x+w ; y2 = y
- @info.bitmap.fill_rect(x2+3,y2,item_width,line_height,cib)
- #描绘标志
- @info.bitmap.fill_rect(x2+4,y2+1,5,line_height-2,cii)
- #描绘说明
- @info.bitmap.draw_text(x2+12,y2+1,item_width,line_height,"队伍成员")
- #描绘队伍成员项背景
- @info.bitmap.back_w(x2+3,line_height+y2+2,item_width,line_height-2,0.5,ccp)
- #---------------------------------------------------------------------------
- #描绘仓库成员标题项背景
- x2 = x+w ; y2 = line_height*2
- @info.bitmap.fill_rect(x2+3,y2+7,item_width,line_height,cib)
- #描绘标志
- @info.bitmap.fill_rect(x2+4,y2+8,5,line_height-2,cii)
- #描绘说明
- @info.bitmap.draw_text(x2+12,y2+8,item_width,line_height,"仓库成员")
- #描绘仓库成员项背景
- @info.bitmap.back_w(x2+3,line_height+y2+9,item_width,line_height-2,0.5,ccp)
- #---------------------------------------------------------------------------
- end #仓库右侧信息描绘结束
- #---------------------------------------------------------------------------
- #描绘成长率标题项背景
- @info.bitmap.fill_rect(x,y,w,line_height,cib)
- #描绘标志
- @info.bitmap.fill_rect(x+1,y+1,5,line_height-2,ccp)
- #描绘说明
- @info.bitmap.draw_text(x+10,y+1,w,line_height,PMSYS::PMCCWIN_PCNAME)
- #---------------------------------------------------------------------------
- #设置成长率字体
- #---------------------------------------------------------------------------
- #更改字体
- @info_ccl.bitmap.font.name = "黑体"
- #更改字体大小
- @info_ccl.bitmap.font.size = 76
- #更改字体透明度
- @info_ccl.bitmap.font.color.alpha = 180
- #---------------------------------------------------------------------------
- #设置背景编号字体
- #---------------------------------------------------------------------------
- #更改字体大小
- @back.bitmap.font.size = 72
- #更改字体透明度
- @back.bitmap.font.color.alpha = 12
- end
- #———————————————————————————————————————
- #绘制成员数量信息(更新用)
- #———————————————————————————————————————
- def info_pc
- @info_pc.bitmap.clear
- x = 194; y = line_height
- #队伍成员数量
- pall = ldata.size
- #描绘队伍成员数量
- @info_pc.bitmap.draw_text(x+4,y+6,item_width,line_height,pall,1)
- #仓库成员数量
- call = rdata.compact.size
- #描绘仓库成员数量
- @info_pc.bitmap.draw_text(x+4,y*3+8,item_width,line_height,call,1)
- end
- #———————————————————————————————————————
- #绘制成长率&总能力值信息(更新用)
- #———————————————————————————————————————
- def info_ccl
- @info_ccl.bitmap.clear
- #取得当前选项
- index = self.index
- #项目不再窗口内或当前选项没有角色时返回
- return if index < 0 || !data[index]
- #取得角色
- actor = data[index]
- #取得角色总成长率
- allc = PMSYS::PMCCWIN_C ? $game_pmsc.allc(actor.id) : param_base(actor)
- #绘制坐标
- x = 0 ; y = line_height-1
- #描绘的宽、高
- w, h = 114, 76
- #背景颜色
- ccl = PMSYS::PMCCWIN_CR_CCL
- #描绘背景
- @info_ccl.bitmap.back_h(x,y+6,194,h-6,0.5,ccl)
- #描绘总成长率
- @info_ccl.bitmap.draw_text(x, y, w*2, h, allc)
- end
- #———————————————————————————————————————
- #重定义激活方法
- #———————————————————————————————————————
- def actives=(tf)
- #是否关闭未激活窗口的动态行走图
- @dych.type = tf ? @dy_type : nil
- #记录和使用该窗口位置
- if tf ; self.index = @sindex
- else ; @sindex = [self.index,0].max ; end
- #窗口是否激活
- self.active = tf
- end
- #———————————————————————————————————————
- #获取总能力值(基础)
- #———————————————————————————————————————
- def param_base(actor)
- all_param_base = 0
- 8.times {|i| f = i > 1 ? 1 : PMSYS::PMCCWIN_PBHPMP
- all_param_base += actor.param_base(i)/f}
- all_param_base
- end
- #———————————————————————————————————————
- #位图剪切排序法
- #———————————————————————————————————————
- def new_bit_rect
- #获得新的数据
- new_d = data
- #获得旧的数据
- now_d = data2
- #获得当前位图
- bit = contents
- #以旧的数据长度循环
- new_d.each_index {|index|
- #当前循环项对应的新数据
- new_d_i = new_d[index]
- #查找新的数据在旧的数据里的位置(旧项目、继承矩形用)
- new_now_index = now_d.index(new_d_i)
- #新旧位置相同时不重绘,进入下个循环项
- next unless new_now_index && index != new_now_index
- #新位置的矩形
- new_rect = item_rect(index)
- #旧位置的矩形
- now_rect = item_rect(new_now_index)
- #清除新项目上的矩形
- contents.clear_rect(new_rect)
- #绘制旧项目上的矩形
- contents.blt(new_rect.x, new_rect.y ,bit,now_rect)
- #清除旧项目上的矩形
- contents.clear_rect(now_rect)}
- end
- #———————————————————————————————————————
- #消除项目
- #———————————————————————————————————————
- def clear_item(index)
- #要消除的项目矩形
- rect = item_rect(index)
- #本窗口消除
- contents.clear_rect(rect)
- #背景消除
- @back.bitmap.clear_rect(rect)
- #队伍窗口的情况查看是否要排序
- if @type == :L
- #项目数量没有变化时不执行排序
- return if data.size == data2.size
- #释放行走图精灵(队伍)
- @dych.dispose_index(index)
- #显示隐蔽的行走图
- @dych.visible(@dychtfi-1, true)
- #行走图排序开始
- @dych.new_spr_xy
- #位图排序开始
- new_bit_rect
- #背景排序开始
- back_refresh
- elsif @type == :R
- #预留数据不存在的情况下
- return unless data2[index]
- #释放行走图精灵(仓库)
- @dych.dispose_index(index,true)
- end
- end
- #———————————————————————————————————————
- #重绘项目
- #———————————————————————————————————————
- def redraw_item(index)
- #消除项目
- clear_item(index)
- #绘制项目
- draw_item(index)
- end
- #———————————————————————————————————————
- #排序绘制
- #———————————————————————————————————————
- def new_refresh
- #重绘项目
- redraw_item(self.index)
- #更新内容
- data_refresh
- end
- #———————————————————————————————————————
- #按下确定键时的处理
- #———————————————————————————————————————
- def a_c
- #refresh #常规绘制(*预留)
- new_refresh #排序绘制
- end
- #———————————————————————————————————————
- #按下CTRL键时的处理
- #———————————————————————————————————————
- def a_ctrl
- #获取当前选项
- index = self.index
- #对应角色数据
- actor = data[index]
- #角色不存在则反回
- return unless actor
- #收藏、取消收藏角色
- $game_party.pmcc_like(actor.id)
- #更新收藏背景
- back_like(index)
- end
- #———————————————————————————————————————
- #全部刷新
- #———————————————————————————————————————
- def update
- super
- @dych.update
- #各种精灵(*预留)
- #@info.update @info_ccl.update @info_pc.update @back.update
- end
- #———————————————————————————————————————
- #全部释放
- #———————————————————————————————————————
- def dispose
- super
- @dych.dispose
- @info.bitmap.dispose ; @info.dispose
- @info_ccl.bitmap.dispose ; @info_ccl.dispose
- @info_pc.bitmap.dispose ; @info_pc.dispose
- @back.bitmap.dispose ; @back.dispose
- end
- end
- #————————————————————————————————————————
- # ●Window_PMCC_Status By.Clov
- # *宠物仓库的状态窗口
- # *Ver:1.0 Date:2013.9.18
- #————————————————————————————————————————
- class Window_PMCC_Status < Window_Base
- #———————————————————————————————————————
- # ● 初始化对象
- #———————————————————————————————————————
- def initialize(x, y, viewport)
- super(x, y, Graphics.width, 110)
- #显示端口
- self.viewport = viewport
- end
- #———————————————————————————————————————
- #刷新角色
- #———————————————————————————————————————
- def actor=(actor)
- #相同角色的话返回不描绘
- return if @actor == actor
- #切换角色的话进行描绘
- @actor = actor ; refresh
- end
- #———————————————————————————————————————
- #刷新
- #———————————————————————————————————————
- def refresh
- #清除窗口
- contents.clear
- #清除指令的话 清除完毕返回
- return if @actor == :clear
- #进行状态窗口描绘
- contents.font.size = 21
- draw_parameters(1,1)
- draw_equipments(250,0)
- contents.font.size = Font.default_size
- end
- #———————————————————————————————————————
- #绘制能力值
- #———————————————————————————————————————
- def draw_parameters(x, y)
- #绘制能力值背景
- contents.back_w(0,0,245,86,0.2,Color.new(255,255,255,96))
- 8.times {|i|
- #能力值的显示位置
- x2 = i/4*130 ; y2 = i%4
- #描绘能力值
- change_color(system_color)
- draw_text(x+x2, y + 21 * y2, 86, line_height, Vocab::param(i))
- change_color(normal_color)
- draw_text(x+x2+80, y + 21 * y2, 64, line_height, @actor.param(i))}
- end
- #———————————————————————————————————————
- #绘制装备
- #———————————————————————————————————————
- def draw_equipments(x, y)
- @actor.equips.each_with_index do |item, i|
- #武器的显示位置
- if i == 0 ; x2 = 0 ; y2 = 0
- #装备的显示位置
- else ; x2 = (i-1)/2*130 ; y2 = (i-1)%2+1 ; end
- #描绘武器装备
- draw_item_name(item, x+x2, y + 30 * y2)
- end
- end
- end
- #————————————————————————————————————————
- # ●Scene_PMCC By.Clov
- # *仓库界面
- # *Ver:1.0 Date:2013.9.14
- # *使用:SceneManager.call(Scene_PMCC)
- # -ENTER: 确认/返回
- # -ESC: 返回
- # -L/R: 换页
- # -CTRL: 添加收藏/取消收藏
- # *Ver:1.1 Date:2013.9.18
- # -增加状态窗口显示
- # -ALT: 显示/隐蔽状态窗口
- #————————————————————————————————————————
- class Scene_PMCC
- #———————————————————————————————————————
- #数据内容
- #———————————————————————————————————————
- def data
- #生成端口
- @viewport = Viewport.new
- @viewport.z = 200
- #生成队伍窗口
- @pmck_window_l = Window_PMCC.new(0,0,224,416,2,:L,@viewport)
- @pmck_window_l.one = false
- @pmck_window_l.dy_type = :W
- @pmck_window_l.actives = !false
- #生成仓库窗口
- @pmck_window_r = Window_PMCC.new(224,0,320,416,3,:R,@viewport)
- @pmck_window_r.one = true
- @pmck_window_r.dy_type = :WH
- @pmck_window_r.actives = false
- #生成状态窗口(V1.1)
- @pmck_window_sta = Window_PMCC_Status.new(0, 306,@viewport)
- @pmck_window_sta.z = @pmck_window_r.z + 1
- @pmck_window_sta.visible = false
- #生成结束窗口
- @pmck_window_end = Window_Base.new(22,160,500,96)
- @pmck_window_end.viewport = @viewport
- @pmck_window_end.z = @pmck_window_r.z + 1
- @pmck_window_end.visible = false
- #生成背景
- create_background
- #仓库确认计数(循环替换状态计数,操作流畅度提高用)
- @ok2 = 0
- end
- #———————————————————————————————————————
- #主循环
- #———————————————————————————————————————
- def main
- #准备数据
- data
- #执行过渡
- Graphics.transition
- #进行更新
- update until SceneManager.scene != self
- #准备过渡
- Graphics.freeze
- #释放全部
- dispose
- end
- #———————————————————————————————————————
- #主更新
- #———————————————————————————————————————
- def update
- #画面、输入更新
- Graphics.update
- Input.update
- #按键更新
- updata_c
- updata_b
- updata_ctrl
- updata_alt
- #窗口更新
- @pmck_window_l.update
- @pmck_window_r.update
- @pmck_window_sta.update
- @pmck_window_end.update
- #状态内容更新
- updata_sta
- end
- #———————————————————————————————————————
- #状态内容更新(V1.1)
- #———————————————————————————————————————
- def updata_sta
- if @pmck_window_sta.visible
- if @pmck_window_l.active ; if @pmck_window_l.index_actor
- @pmck_window_sta.actor = @pmck_window_l.index_actor
- @pmck_window_l.index_actor = nil ; end ; end
- if @pmck_window_r.active ; if @pmck_window_r.index_actor
- @pmck_window_sta.actor = @pmck_window_r.index_actor
- @pmck_window_r.index_actor = nil ; end ; end
- end
- end
- #———————————————————————————————————————
- #结束窗口的描绘
- #———————————————————————————————————————
- def end_txt(txt)
- @pmck_window_end.contents.clear
- @pmck_window_end.contents.draw_text(0,4,500,24,txt,1)
- @pmck_window_end.contents.draw_text(0,36,500,24,"[ESC] [ENTER]",1)
- end
- #———————————————————————————————————————
- #是否可以退出仓库
- #———————————————————————————————————————
- def end_ok?
- pmcc_max = $game_party.pmcc_max
- pmcc_min = $game_party.pmcc_min
- pmcc_def = $game_party.pmcc_def
- pas = $game_party.members.size
- maxb = pmcc_max <=> pas # 1 ok 0
- minb = pmcc_min <=> pas #-1 ok 0
- defb = pmcc_def <=> pas # 0 ok 0
- tf = true
- tf = false if maxb == -1 or minb == 1
- tf = false if (maxb && minb) && (maxb == -1 && minb == 1)
- tf = false if defb && defb != 0
- tf = true if defb && defb == 0
- unless tf
- Sound.play_buzzer
- if defb ; txt = "队伍人数必须等于#{pmcc_def}名"
- else ;
- pmcc_min = pmcc_min ? "最少#{pmcc_min}名" : ""
- pmcc_max = pmcc_max ? "最多#{pmcc_max}名" : ""
- txt = "队伍人数必须#{pmcc_min}#{pmcc_max}" ; end
- end_txt(txt+"(目前#{pas}名)")
- end ; tf
- end
- #———————————————————————————————————————
- #是否可以替换角色
- #———————————————————————————————————————
- def pcts_ok?(t,i)
- #获得禁止角色
- pmcc_no = $game_party.pmcc_no
- case t
- when :L ; id = $game_party.members[i].id if $game_party.members[i]
- when :R ; id = $game_party.pmcc_actor[i].id if $game_party.pmcc_actor[i] ; end
- tf = !pmcc_no.include?(id)
- #禁止的情况下演奏声效并返回禁止/不禁止状态
- Sound.play_buzzer unless tf ; tf
- end
- #———————————————————————————————————————
- #生成背景 VA
- #———————————————————————————————————————
- def create_background
- @background_sprite = Sprite.new
- @background_sprite.bitmap = SceneManager.background_bitmap
- @background_sprite.color.set(16, 16, 16, 128)
- end
- #———————————————————————————————————————
- #替换队伍、仓库成员
- #———————————————————————————————————————
- def pcts
- #演奏声效
- Sound.play_reflection
- #队伍、仓库当前选择项
- pi = @pmck_window_l.index
- ci = @pmck_window_r.index
- #预留数据
- @pmck_window_l.data2($game_party.members)
- @pmck_window_r.data2($game_party.pmcc_actor)
- #更换成员执行
- $game_party.pmcc_pcts(pi,ci)
- #更新绘制
- @pmck_window_l.a_c
- @pmck_window_r.a_c
- end
- #———————————————————————————————————————
- #进入队伍窗口
- #———————————————————————————————————————
- def pwin
- @pmck_window_r.actives = false
- @pmck_window_l.actives = true
- @pmck_window_end.visible = false
- end
- #———————————————————————————————————————
- #进入仓库窗口
- #———————————————————————————————————————
- def cwin
- @pmck_window_r.actives = true
- @pmck_window_l.actives = false
- @pmck_window_end.visible = false
- end
- #———————————————————————————————————————
- #进入结束窗口
- #———————————————————————————————————————
- def ewin
- @pmck_window_r.actives = false
- @pmck_window_l.actives = false
- @pmck_window_end.visible = true
- end
- #———————————————————————————————————————
- #按下确定键
- #———————————————————————————————————————
- def updata_c
- #按下确定键的情况下
- if Input.trigger?(:C)
- #结束窗口的情况下
- if @pmck_window_end.visible
- #返回队伍窗口
- pwin ; return
- end
- #队伍窗口的情况下
- if @pmck_window_l.active && pcts_ok?(:L, @pmck_window_l.index)
- case @ok2
- #替换成员、仓库确认计数1(进入循环替换状态)
- when 2 ; pcts ; @ok2 = 1 ; cwin
- #进入仓库窗口
- when 0 ; cwin ; end
- #仓库窗口的情况下
- elsif @pmck_window_r.active && pcts_ok?(:R, @pmck_window_r.index)
- #仓库确认计数+1
- @ok2 += 1
- case @ok2
- #替换成员(转入循环替换状态前)
- when 1 ; pcts
- #进入队伍窗口
- when 2 ; pwin ; end
- end
- end
- end
- #———————————————————————————————————————
- #按下返回键
- #———————————————————————————————————————
- def updata_b
- #按下返回键的情况下
- if Input.trigger?(:B)
- #结束窗口的情况下
- if @pmck_window_end.visible
- #返回队伍窗口
- pwin ; return
- end
- #队伍窗口的情况下
- if @pmck_window_l.active
- #不可以退出仓库的情况下
- unless end_ok?
- #进入结束窗口
- ewin ; return
- end
- case @ok2
- #循环替换状态的话返回仓库窗口
- when 2 ; @ok2 = 1; cwin ; return ; end
- #返回上个界面
- SceneManager.return
- #仓库窗口的情况下
- elsif @pmck_window_r.active
- #仓库确认计数重置
- @ok2 = 0
- #返回队伍窗口
- pwin
- end
- end
- end
- #———————————————————————————————————————
- #按下CTRL键
- #———————————————————————————————————————
- def updata_ctrl
- #按下返回键的情况下
- if Input.trigger?(:CTRL)
- #队伍窗口的情况下
- if @pmck_window_l.active
- @pmck_window_l.a_ctrl
- #仓库窗口的情况下
- elsif @pmck_window_r.active
- @pmck_window_r.a_ctrl
- end
- end
- end
- #———————————————————————————————————————
- #按下ALT键(V1.1)
- #———————————————————————————————————————
- def updata_alt
- #按下返回键的情况下
- if Input.trigger?(:ALT)
- @pmck_window_sta.visible = !@pmck_window_sta.visible
- end
- end
- #———————————————————————————————————————
- #全部释放
- #———————————————————————————————————————
- def dispose
- #端口释放
- @viewport.dispose
- #窗口释放
- @pmck_window_l.dispose
- @pmck_window_r.dispose
- @pmck_window_sta.dispose
- @pmck_window_end.dispose
- #背景释放
- @background_sprite.dispose
- end
- end
- #————————————————————————————————————————
- # ●Dynamic_Character By.Clov
- # *多类型动态行走图
- # *Ver:1.0 Date:2013.9.7
- # *使用:Dynamic_Character.new
- # *必须:update dispose
- # -draw_character(x, y, actor, index)主描绘
- # -@type 动态类型 :W行走动态 :H转向动态 :WH行走转并行动态
- # -@one 是否独立选择角色动态
- # -@speed 每个动作的更新周期
- # -@wa 行走动作表
- # -@ha 转向动作表
- # *实例方法:
- # -self.one=true/false 更改选择/全部动态
- # -self.type=:W/:H/:WH 更改动态类型
- # -self.index=index 选择动态必须传递值
- # -self.new_spr_xy 执行排序 可乱序
- # -self.clear 建立新位图必要
- #————————————————————————————————————————
- class Dynamic_Character
- #———————————————————————————————————————
- #初始化数据
- #———————————————————————————————————————
- def initialize(x, y, z, viewport)
- #基本坐标
- @x = x ; @y = y ; @z = z
- #显示端口
- @viewport = viewport
- #生成精灵
- @sprs = []
- #实际精灵
- @sprs_true = []
- #记录矩形坐标
- @xa = [] ; @ya = []
- #记录精灵坐标
- @sx = [] ; @sy = []
- #是否使用动态行走图
- @type = :W
- #是否选中角色才动态
- @one = true
- #当前选项
- @index = 0
- #初始显示坐标
- #cx:0>右脚 1>并脚 2>左脚
- #cy:0>正面 1>左面 2>右面 3>背面
- @cx = 1 ; @cy = 0
- #行走图坐标数据(动作数据,循环以下动作显示)
- @wa = [0,1,1,2] ; @ha = [0,1,3,2]
- #动作更新速度(帧)
- @speed = 25
- #速度计时器
- @dcs = 0
- #数据计时器
- @dcx = 0
- @dcy = 0
- end
- #———————————————————————————————————————
- #绘制行走图
- #———————————————————————————————————————
- def draw_character(x, y, actor, index)
- #实际坐标
- x = x + @x ; y = y + @y
- #图像名 没有的话返回
- character_name = actor.character_name
- #没有图像
- return unless character_name
- #生成独立精灵
- @sprs[index] ||= Sprite.new(@viewport)
- #取得位图
- bitmap = bit("Graphics/Characters/"+character_name)
- @sprs[index].bitmap = bitmap
- #标准行走图宽高
- cw = bitmap.width / 12
- ch = bitmap.height / 8
- #索引角色种类
- n = actor.character_index
- #角色种类x,y @wi:显示第几横 @hi:显示第几列
- zx = (n%4*3)*cw
- zy = (n/4*4)*ch
- #更新精灵坐标
- @sprs[index].x = @sx[index] = x - cw / 2
- @sprs[index].y = @sy[index] = y - ch
- @sprs[index].z = @z
- #记录矩形坐标
- @xa[index] = zx ; @ya[index] = zy
- #显示坐标
- zx = zx+@cx*cw ; zy = zy+@cy*ch
- #位图矩形
- src_rect = Rect.new(zx, zy, cw, ch)
- @sprs[index].src_rect = src_rect
- #实际存在的精灵
- @sprs_true = @sprs.compact
- end
- #———————————————————————————————————————
- #位图资源
- #———————————————————————————————————————
- def bit(f)
- @bit ||= {}
- unless @bit[f] && !@bit[f].disposed?
- @bit[f] = Bitmap.new(f) ; end ; @bit[f]
- end
- #———————————————————————————————————————
- #选中角色动态开关设置
- #———————————————————————————————————————
- def one=(tf)
- @one = tf
- end
- #———————————————————————————————————————
- #选项更新(选中角色动态必须传递选项位置)
- #———————————————————————————————————————
- def index=(index)
- #指定的动态角色项
- @index = index
- #姿势矫正
- mrc
- end
- #———————————————————————————————————————
- #姿势矫正
- #———————————————————————————————————————
- def mrc(cx=1, cy=0)
- #更改显示坐标
- @cx = cx ; @cy = cy
- #更新位图
- update_src
- end
- #———————————————————————————————————————
- #更改显示类型
- #———————————————————————————————————————
- def type=(t, cx=1, cy=0)
- #更改显示类型
- @type = t
- #静态类型的话强制更新到设定坐标
- mrc(cx, cy) unless @type
- end
- #———————————————————————————————————————
- #精灵是否可见
- #———————————————————————————————————————
- def visible(index, tf)
- #获取精灵
- spr = @sprs[index]
- #没有精灵
- return unless spr
- spr.visible = tf
- end
- #———————————————————————————————————————
- #精灵继位排序法
- #———————————————————————————————————————
- def new_spr_xy
- @sprs_true.each_index {|i|
- #获取精灵
- spr = @sprs_true[i]
- #开始排位
- spr.x = @sx[i]
- spr.y = @sy[i]}
- end
- #———————————————————————————————————————
- #精灵原点坐标(列数情况(t>开头列 h>项目高 oy>ox)
- #———————————————————————————————————————
- def oy=(y)
- @sprs_true.each {|spr| spr.oy = y}
- end
- def ox=(x)
- @sprs_true.each {|spr| spr.ox = x}
- end
- def oy2(top, h)
- @sprs_true.each {|spr| spr.oy = top*h}
- end
- def ox2(top, w)
- @sprs_true.each {|spr| spr.ox = top*w}
- end
- #———————————————————————————————————————
- #主更新
- #———————————————————————————————————————
- def update
- #数据更新
- update_data
- #精灵更新(*预留)
- #@sprs_true.each {|spr| spr.update}
- end
- #———————————————————————————————————————
- #更新位图矩形(全体)
- #———————————————————————————————————————
- def update_src
- @sprs.each_index {|i|
- #获取精灵
- spr = @sprs[i]
- #没有精灵
- next unless spr
- #获取矩形
- src = spr.src_rect
- #更新矩形x,y
- spr.src_rect.x = @xa[i]+src.width*@cx
- spr.src_rect.y = @ya[i]+src.height*@cy }
- end
- #———————————————————————————————————————
- #更新位图矩形(指定)
- #———————————————————————————————————————
- def update_src2(i)
- #获取精灵
- spr = @sprs[i]
- #没有精灵
- return unless spr
- #获取矩形
- src = spr.src_rect
- #更新矩形x,y
- spr.src_rect.x = @xa[i]+src.width*@cx
- spr.src_rect.y = @ya[i]+src.height*@cy
- end
- #———————————————————————————————————————
- #计时器及显示坐标更新
- #———————————————————————————————————————
- def update_data
- if @type
- @dcs += 1
- if @dcs == @speed
- case @type
- when :W
- @dcx += 1
- @dcx = @dcx < @wa.size ? @dcx : 0
- @cx = @wa[@dcx]
- when :H
- @dcy += 1
- @dcy = @dcy < @ha.size ? @dcy : 0
- @cy = @ha[@dcy]
- when :WH
- @dcx += 1 ; @dcy += 1
- @dcx = @dcx < @wa.size ? @dcx : 0
- @dcy = @dcy < @ha.size ? @dcy : 0
- @cx = @wa[@dcx] ; @cy = @ha[@dcy]
- end
- @one ? update_src2(@index) : update_src
- @dcs = 0
- end
- end
- end
- #———————————————————————————————————————
- #指定释放
- #———————————————————————————————————————
- def dispose_index(index,index_nil=false)
- #获取精灵
- spr = @sprs[index]
- #没有精灵
- return unless spr
- #释放精灵
- spr.dispose
- #是否占位(占位处理)
- if index_nil ; @sprs[index] = nil
- @sprs_true = @sprs.compact ; return ; end
- #删除精灵数据
- @sprs.delete_at(index)
- @xa.delete_at(index)
- @ya.delete_at(index)
- #实际存在的精灵
- @sprs_true = @sprs.compact
- end
- #———————————————————————————————————————
- #清除位图
- #———————————————————————————————————————
- def clear
- @sprs_true.each {|spr| spr.bitmap.dispose}
- end
- #———————————————————————————————————————
- #全部释放
- #———————————————————————————————————————
- def dispose
- @sprs_true.each {|spr| spr.bitmap.dispose ; spr.dispose}
- end
- end
- #————————————————————————————————————————
- # ●位图的追加绘制方法 By.Clov
- # *渐透明描绘以及RGSS1用gradient_fill_rect
- #————————————————————————————————————————
- class Bitmap
- #———————————————————————————————————————
- # ● 渐透明描绘(宽)
- #———————————————————————————————————————
- def back_w(x,y,w,h,bl=0.3,c=Color.new(0,200,230,128))
- r = c.red ; g = c.green ; b = c.blue ; o = c.alpha
- l = (w*bl).round
- all = [l,w-l*2,l]
- all.each_index {|i| ; w2 = all[i]
- case i
- when 0 ; x2 = 0 ; o1 = 0 ; o2 = o
- when 1 ; x2 = all[0] ; o1 = o2 = o
- when 2 ; x2 = all[0] + all[1] ; o1 = o ; o2 = 0 ; end
- c1 = Color.new(r,g,b,o1) ; c2 = Color.new(r,g,b,o2)
- gradient_fill_rect(x+x2, y, w2, h, c1, c2) if w2 > 0 }
- end
- #———————————————————————————————————————
- # ● 渐透明描绘(高)
- #———————————————————————————————————————
- def back_h(x,y,w,h,bl=0.3,c=Color.new(0,200,230,128))
- r = c.red ; g = c.green ; b = c.blue ; o = c.alpha
- l = (h*bl).round
- all = [l,h-l*2,l]
- all.each_index {|i| ; h2 = all[i]
- case i
- when 0 ; y2 = 0 ; o1 = 0 ; o2 = o
- when 1 ; y2 = all[0] ; o1 = o2 = o
- when 2 ; y2 = all[0] + all[1] ; o1 = o ; o2 = 0 ; end
- c1 = Color.new(r,g,b,o1) ; c2 = Color.new(r,g,b,o2)
- gradient_fill_rect(x, y+y2, w, h2, c1, c2, true) if h2 > 0 }
- end
- #———————————————————————————————————————
- # ●GFR>RGSS3>gradient_fill_rect
- #———————————————————————————————————————
- def gfr(x, y, width, height, color1, color2, vertical = false)
- r1 = color1.red;g1 = color1.green;b1 = color1.blue;o1 = color1.alpha
- r2 = color2.red;g2 = color2.green;b2 = color2.blue;o2 = color2.alpha
- case vertical
- when false
- w = (width-1).to_f;plus_r = (r2-r1)/w;plus_g = (g2-g1)/w
- plus_b = (b2-b1)/w;plus_o = (o2-o1)/w;width.times {|k|
- fill_rect(x+k, y, 1, height, Color.new(r1,g1,b1,o1))
- r1+=plus_r;g1+=plus_g;b1+=plus_b;o1+=plus_o}
- when true
- h = (height-1).to_f;plus_r = (r2-r1)/h;plus_g = (g2-g1)/h
- plus_b = (b2-b1)/h;plus_o = (o2-o1)/h;height.times {|i|
- fill_rect(x, y+i, width, 1, Color.new(r1,g1,b1,o1))
- r1+=plus_r;g1+=plus_g;b1+=plus_b;o1+=plus_o}
- end
- end
- end
复制代码
因为我只要仓库,不需要其他功能,所以我只用了上面这个脚本而已.
跪求大触们帮忙分析下是什么情况= =
|
|