Project1

标题: 在窗口中描绘的icon能否进行缩放(已自问自答) [打印本页]

作者: 纯属小虫    时间: 2023-5-4 18:49
标题: 在窗口中描绘的icon能否进行缩放(已自问自答)
本帖最后由 纯属小虫 于 2023-5-4 20:54 编辑

通常,窗口中描绘icon的方式如下

bitmap = RPG::Cache.icon(item.icon_name)
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)

那么,有什么方法能够把 24*24 的icon,放大成 48*48 或者 72 * 72 呢?




emmmm......研究了一下别的脚本,成功自问自答了
Sprite真强大!

    # 描绘图标
    if @图标 != nil
      @图标.dispose
    end
    @图标 = Sprite.new
    @图标.bitmap = RPG::Cache.icon(item.icon_name)
    @图标.zoom_x = 2
    @图标.zoom_y = 2
    @图标.x = self.x + x + 16 + (self.width-32) / @column_max / 2 - 24
    @图标.y = self.y + y + 64
    @图标.z = self.z + 4

然后重新定义窗口dispose,把 @图标.dispose 也带上,以同时释放。

当然,如果 @图标 是多个的话,就用数组的方式去做
最后释放的时候也需要
for i in @图标
   i.dispose if i != nil
end

作者: guoxiaomi    时间: 2023-5-5 20:01
最后那个应该是:
  1. i.dispose if !i.disposed?
复制代码
,dispose掉的Sprite不会自动变成nil。
作者: 我为鱼肉    时间: 2023-5-6 13:48
本帖最后由 我为鱼肉 于 2023-5-6 13:58 编辑

如果没有其他特殊需求,可以使用
self.contents.stretch_blt(dest_rect, src_bitmap, src_rect[, opacity])描绘该图标
第一个参数是坐标及大小也就是拉伸成什么样
第二个参数图标bitmap
第三个参数图标的矩形
第四个参数透明度

这样就不需要单独生成精灵了
哪怕是描绘一个动态逐帧动画,也可以用这样的方法。


另外,我发现bitmap可以不必clear
只需把需要擦除的位置fill_rect一个透明块就行了,
这样一来就算你在bitmap上draw了非常多的text也不必担心卡顿。
精准擦除,精准描绘




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