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

Project1

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

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

[复制链接]

Lv5.捕梦者

梦石
24
星屑
7017
在线时间
247 小时
注册时间
2020-12-4
帖子
306

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

跳转到指定楼层
1
发表于 2023-5-4 18:49:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 纯属小虫 于 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

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

2
发表于 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 网络脚本 *
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2821
在线时间
585 小时
注册时间
2022-7-13
帖子
89
3
发表于 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
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-28 15:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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