设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 596|回复: 2
打印 上一主题 下一主题

[交流讨论] rm萌旧的第一个脚本纪念。

[复制链接]

Lv1.梦旅人

梦石
0
星屑
198
在线时间
23 小时
注册时间
2026-1-7
帖子
11
跳转到指定楼层
1
发表于 2026-1-20 09:34: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
感谢大家!  

Lv6.析梦学徒

老鹰

梦石
40
星屑
37240
在线时间
7038 小时
注册时间
2012-5-26
帖子
3346

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

2
发表于 2026-1-20 10:46:43 | 只看该作者
现在可以直接问 deepseek 来撰写 RMVA 使用的脚本了,当然,还是可能会有冲突或者数据结构错误,需要自己改正,不过简单的优化应该都没问题了,你可以去试试看。

比如询问
我想将RPG Maker VX Ace中默认菜单里的状态界面的展示八维属性值,修改为展示八边型雷达图,中心点的属性值为0,且不同属性可以设置不同的最大值


它给出了
DS回复


但实际运行时就发现,bitmap类没有 draw_line 方法,那继续问
补充 draw_line(x1.to_i, y1.to_i, x2.to_i, y2.to_i, color) 的具体实现


它再回复
DS回复


基于以上,我修改后就获得了一个可以通用的雷达图绘制方法,一是形状绘制,二是雷达图绘制,比以前效率高出不少。

也因此,挺推荐新人尝试在编写独立功能插件时,先问问AI。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
198
在线时间
23 小时
注册时间
2026-1-7
帖子
11
3
 楼主| 发表于 2026-1-20 11:08:47 | 只看该作者
百里_飞柳 发表于 2026-1-20 10:46
现在可以直接问 deepseek 来撰写 RMVA 使用的脚本了,当然,还是可能会有冲突或者数据结构错误,需要自己改 ...

好的,感谢大佬
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2026-6-4 14:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表