查看: 1673|回复: 5

[已经解决] 在窗口中描绘的icon能否进行缩放(已自问自答)

[复制链接]
梦石
24
星屑
8942
在线时间
248 小时
注册时间
2020-12-4
回帖
259

极短24获奖极短23获奖极短22获奖

发表于 2023-5-4 18:49:32 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本帖最后由 纯属小虫 于 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
梦石
1
星屑
24088
在线时间
3339 小时
注册时间
2011-7-8
回帖
3862

开拓者

发表于 2023-5-5 20:01:55 | 显示全部楼层
最后那个应该是:
  1. i.dispose if !i.disposed?
复制代码
,dispose掉的Sprite不会自动变成nil。

点评

RGSS中这种做法很常见,但不是必须的。  发表于 2023-5-5 20:06
嗷嗷!!! 所以是在.dispose后面手动加一个 = nil 吗?  发表于 2023-5-5 20:04
熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复

使用道具 举报

梦石
0
星屑
2821
在线时间
585 小时
注册时间
2022-7-13
回帖
81
发表于 2023-5-6 13:48:27 | 显示全部楼层
本帖最后由 我为鱼肉 于 2023-5-6 13:58 编辑

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

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


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

点评

强啊!!!F1了一下才发现还有stretch_blt 这个方法,以前从来没见过~~o.0  发表于 2023-5-6 14:01
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部