| 赞 | 1 |
| VIP | 0 |
| 好人卡 | 0 |
| 积分 | 2 |
| 经验 | 0 |
| 最后登录 | 2026-5-12 |
| 在线时间 | 23 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 198
- 在线时间
- 23 小时
- 注册时间
- 2026-1-7
- 帖子
- 11
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
由于失业原因,贴主回想起来以前特别喜欢的rmva(都6202年了,还有人学习rgss3。 ),
然后就开始了一系列学习,并写出了人生中第一个能跑的插件。
特此发帖纪念一下。
以下是原代码。(由于是新手,注释和书写都不是很规范,请见谅。)
如果有大佬帮忙指正最好了。有需要的同学可以自取。
1.利用rm引擎自带的方法实现了一个简易的截取当前场景作为战斗背景的小插件。
# 2026/1/19 修正了战斗测试时的bug
#修正图片释放问题。
class Spriteset_Battle
def initialize
create_viewports
create_battleback1
create_enemies
create_actors
create_pictures
create_timer
update
end
def create_battleback1
@back1_sprite=Sprite.new(@viewport1)
@back1_sprite.bitmap= battleback1_bitmap
@back1_sprite.z=0
@back1_sprite.opacity=128
center_sprite(@back1_sprite)
end
def create_battleback2
end
# ● 生成由地图画面加工而来的战场背景
#--------------------------------------------------------------------------
def create_blurry_background_bitmap
if $BTEST
p "你执行了测试战斗"
color_bg=Color.new(0,0,0)
bitmap=Bitmap.new(Graphics.width, Graphics.height)
bitmap.fill_rect(0,0,Graphics.width,Graphics.height,color_bg)
bitmap
else
source = SceneManager.background_bitmap
if source
bitmap = Bitmap.new(Graphics.width, Graphics.height)
bitmap.stretch_blt(bitmap.rect, source, source.rect)
bitmap.blur
bitmap
end
end
end
def battleback1_bitmap
create_blurry_background_bitmap
end
def update
update_battleback1
update_enemies
update_actors
update_pictures
update_timer
update_viewports
end
# ● 释放战场背景的精灵(墙壁)
#--------------------------------------------------------------------------
def dispose_battleback2
end
def dispose_battleback1
if @back1_sprite
p "战斗背景图释放了"
@back1_sprite.bitmap.dispose
@back1_sprite.dispose
end
end
end
2.为敌人添加了一个简易血条。(肥肠丑陋)
class Sprite_Enemy_Hp<Sprite_Base
attr_accessor :battler
def initialize(viewport,battler=nil)
super(viewport)
p "血条初始化了"
@battler=battler
@last_hp=nil
draw_enemy_hpbar if @battler
end
#绘制血条
def draw_enemy_hpbar
@enemy_bitmap=Cache.battler(@battler.battler_name,@battler.battler_hue)
if @battler.alive?
@width=@enemy_bitmap.width
@height=10
self.bitmap.dispose if self.bitmap
self.bitmap=Bitmap.new(@width,@height)
init_visibility
draw_real_enemy_hpbar
end
end
#实际绘制血条bitmap
def draw_real_enemy_hpbar
@[email protected]
puts "获取怪物最后血量了"
color_g=Color.new(10, 255, 50)
color_r=Color.new(255, 16, 16)
#设置血条比例
rate1=(@last_hp.to_f)/@battler.mhp
#设置血条实际长度
width_enemy_hp=(@width*rate1).to_i
[email protected]_x-@width/2
[email protected]_y+4
self.z=200
if @battler.alive?
self.bitmap.fill_rect(0,0,@width,@height,Color.new(10,20,64))
end
self.bitmap.gradient_fill_rect(2,2,width_enemy_hp-4,@height-4,color_g,color_r)
end
#初始化可视状态
def init_visibility
@[email protected]?
self.opacity=0 unless @battler_visible
end
#刷新实时血条
def update
super
refresh if @last_hp [email protected]
end
# 有变化才更新血条绘制
def refresh
return unless self.bitmap
self.bitmap.clear
draw_real_enemy_hpbar
end
def dispose
self.bitmap.dispose
puts "图片释放了!"
super
end
end
class Spriteset_Battle
alias hp_initialize initialize
def initialize
hp_initialize
p "【DEBUG】Spriteset_Battle 初始化,准备创建敌人血条"
@enemy_hp_sprites=[]
create_enemies_hp
end
# 敌人血条精灵生成
def create_enemies_hp
return unless $game_troop
@enemy_hp_sprites=$game_troop.members.map do |enemy|
Sprite_Enemy_Hp.new(@viewport1,enemy)
end
p "血条数组创建了"
end
alias hp_dispose dispose
def dispose
hp_dispose
dispose_enemies_hp
end
def dispose_enemies_hp
@enemy_hp_sprites.each{|sprite|sprite.dispose}
end
alias hp_update update
def update
hp_update
update_enemies_hp
end
def update_enemies_hp
return unless @enemy_hp_sprites
@enemy_hp_sprites.each{|sprite|sprite.update}
end
end
感谢大家! |
|