| 赞 | 67 |
| VIP | |
| 好人卡 | |
| 积分 | 170 |
| 经验 | |
| 最后登录 | 2026-10-2 |
| 在线时间 | 6058 小时 |
- 梦石
- 0
- 星屑
- 17038
- 在线时间
- 6058 小时
- 注册时间
- 2011-7-18
- 回帖
- 152

|
发表于 2019-12-13 16:00:03
|
显示全部楼层
本帖最后由 gqxastg 于 2019-12-15 12:00 编辑
临时写了一个,时间有点赶没经过详细测试,等有时间了再补全说明,有问题的话可以先告诉我一下【
技能的备注处写<行动文字 说明内容>或者<Action_Text 说明内容>可以加文字说明
点击展开/收起[pre lang="ruby"]# 岚风雷(论坛ID:gqxastg)制作
module SnivyLei; module EnemyActionShow
Sprite = {
pos: [24, -26, 100],
}
Text = {
match: /<(?:ACTION_TEXT|行动文字)[ ](.*)>/i,
font: {
name: Font.default_name,
size: 12,
bold: false,
italic: false,
outline: true,
shadow: true,
color: Font.default_color,
out_color: Font.default_out_color,
},
pos: [0, 14],
width: 64,
height: 24,
align: 1,
}
Bitmap = {
pos: [20, 0],
width: 64,
height: 48,
}
end; end
#==============================================================================
# ■ Sprite_Battler
#==============================================================================
class Sprite_Battler < Sprite_Base
include SnivyLei
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
alias enacts_initialize initialize
def initialize(viewport, battler = nil)
enacts_initialize(viewport, battler)
@old_actions = []
create_action_icon_sprite if battler && battler.is_a?(Game_Enemy)
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
alias enacts_dispose dispose
def dispose
if @action_icon_sprite && !@action_icon_sprite.disposed?
@action_icon_sprite.bitmap.dispose
@action_icon_sprite.dispose
end
enacts_dispose
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
alias enacts_update update
def update
enacts_update
if @battler && @use_sprite #&& @battler.is_a?(Game_Enemy)
create_action_icon_sprite if !@action_icon_sprite
actions = battler.actions.collect{|a| a.item}
if @old_actions != actions
@old_actions = actions
refresh_action_icon_bitmap
end
@action_icon_sprite.visible = @battler.alive? && !@battler.hidden?
else
@action_icon_sprite.bitmap.dispose if @action_icon_sprite
@action_icon_sprite.dispose if @action_icon_sprite
@action_icon_sprite = nil
end
end
#--------------------------------------------------------------------------
# ● 生成行动图标精灵
#--------------------------------------------------------------------------
def create_action_icon_sprite
if @action_icon_sprite && !@action_icon_sprite.disposed?
@action_icon_sprite.bitmap.dispose
@action_icon_sprite.dispose
end
@action_icon_sprite = Sprite.new(self.viewport)
@action_icon_sprite.x = self.x + EnemyActionShow::Sprite[:pos][0]
@action_icon_sprite.y = self.y + EnemyActionShow::Sprite[:pos][1]
@action_icon_sprite.y = self.z + EnemyActionShow::Sprite[:pos][2]
w = EnemyActionShow::Bitmap[:width]
h = EnemyActionShow::Bitmap[:height]
@action_icon_sprite.bitmap = Bitmap.new(w, h)
["name","size","bold","italic","outline",
"shadow","color","out_color"].each do |param|
eval("@action_icon_sprite.bitmap.font.#{param} =
EnemyActionShow::Text[:font][:#{param}]")
end
end
#--------------------------------------------------------------------------
# ● 刷新行动图标位图
#--------------------------------------------------------------------------
def refresh_action_icon_bitmap
return if !@action_icon_sprite || @action_icon_sprite.disposed?
@action_icon_sprite.bitmap.clear
return if @old_actions.compact.size == 0
item = (@old_actions.compact)[0]
pos = EnemyActionShow::Bitmap[:pos]
bitmap = Cache.system("Iconset")
icon_index = item.icon_index
rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
@action_icon_sprite.bitmap.blt(pos[0], pos[1], bitmap, rect)
text = EnemyActionShow::Text
str = text[:match] =~ item.note ? $1 : nil
@action_icon_sprite.bitmap.draw_text(text[:pos][0], text[:pos][1],
text[:width], text[:height], str, text[:align]) if str
end
#--------------------------------------------------------------------------
# ● 坐标同步变更
#--------------------------------------------------------------------------
def x=(x); super; @action_icon_sprite.x = x +
EnemyActionShow::Sprite[:pos][0] if @action_icon_sprite
end
def y=(y); super; @action_icon_sprite.y = y +
EnemyActionShow::Sprite[:pos][1] if @action_icon_sprite
end
def z=(z); super; @action_icon_sprite.z = z +
EnemyActionShow::Sprite[:pos][2] if @action_icon_sprite
end
end[/pre]
一点位置参数的参考
|
评分
-
查看全部评分
|