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

Project1

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

[已经解决] 求助吖!怎么在一个window里加入图片?

[复制链接]

Lv2.观梦者

花开堪折直须折

梦石
0
星屑
681
在线时间
943 小时
注册时间
2010-7-17
帖子
4963

贵宾

跳转到指定楼层
1
发表于 2011-3-15 20:07:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如果用显示图片,那么退出后又怎么消除?
求助呀………………
看了一些原脚本和大神们写的都还是毫无头绪吖……
大家好,我叫节操,有一天,我被吃了。
http://forever-dream.5d6d.com
永恒の梦制作组论坛

129993099
永恒の梦制作组QQ群

Lv1.梦旅人

百合乡の蕾咪

梦石
0
星屑
55
在线时间
151 小时
注册时间
2011-1-12
帖子
198
2
发表于 2011-3-15 20:35:08 | 只看该作者
表示没看明白. 在 Window 这个类里面显示一个图片么??
回复

使用道具 举报

Lv2.观梦者

花开堪折直须折

梦石
0
星屑
681
在线时间
943 小时
注册时间
2010-7-17
帖子
4963

贵宾

3
 楼主| 发表于 2011-3-15 20:39:32 | 只看该作者
大家好,我叫节操,有一天,我被吃了。
http://forever-dream.5d6d.com
永恒の梦制作组论坛

129993099
永恒の梦制作组QQ群
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
255
在线时间
4 小时
注册时间
2011-3-12
帖子
3
4
发表于 2011-3-15 21:08:43 | 只看该作者
self.contents = Bitmap.new(filename)

我不是受,是帝王攻!这是赤果果的事实!!!
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1281 小时
注册时间
2006-8-27
帖子
590
5
发表于 2011-3-15 21:23:50 | 只看该作者
class Window
  alias old_initialize initialize
  def initialize
    old_initialize
    @sprite = Sprite.new
  end
  alias old_dispose dispose
  def dispose
    old_dispose
    @sprite.dispose
  end
end
回复

使用道具 举报

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5754
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
6
发表于 2011-3-15 21:33:55 | 只看该作者
方法有二:
一:
self.contents = Bitmap.new(参数)
# 此方法会把写出来的文字、图片覆盖
二:
xxx = Sprite.new
xxx.bitmap = Bitmap.new(参数)
# 此方法不会把window里面的东西覆盖,然而需要:
xxx.x = self.x + 32   # 还是16?(为了对准窗口内)
xxx.x = self.y + 32   # 还是16?(为了对准窗口内)
xxx.z = 101

点评

self.contents 这个图片最好不要改. 除非有什么特殊要求~~~  发表于 2011-3-15 21:36
应该是xxx.y = self.y + 32 而不是 xxx.x = self.y + 32  发表于 2011-3-15 21:34
回复

使用道具 举报

Lv1.梦旅人

百合乡の蕾咪

梦石
0
星屑
55
在线时间
151 小时
注册时间
2011-1-12
帖子
198
7
发表于 2011-3-15 21:35:57 | 只看该作者
写法1: 使用 Bitmap 的 blt
   Window类的 update 或者 refresh 里添加

   self.contents.blt(0, 0, Cache.system("IconSet"), Rect.new(0, 0, 384, 416), 128)
   其中的 Cache.system("IconSet") 表示加载一个在 system目录下的 IconSet 文件.
               Rect.new(0, 0, 384, 416) 表示截取这个文件 (0, 0) 开始, 到 (384, 416) 之间的矩形部分.

方法二: 使用 Sprite
    在任意地方(一般是 initialize) 里添加:

    @bitmap = Sprite.new()
    @bitmap.bitmap = Cache.system("IconSet")
    @bitmap.x = 0
    @bitmap.y = 0
    @bitmap.z = 3
    @bitmap.opacity  = 128

     然后再不需要这个图片的时候, 使用
     @bitmap.bitmap.dispose
     @bitmap.dispose
     释放图片.
回复

使用道具 举报

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5754
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
8
发表于 2011-3-15 21:49:44 | 只看该作者
回复 蕾米莉亚·斯卡雷特 的帖子

其实原意并不是直接(new)改动的= =
blt这个搬字过纸的方法, 搬了半透明图案进无透明图案会令无透明图案清除...(好头疼= =)。
用sprite的方法x坐标和y坐标应该要:
sprite.x = self.x + 32;sprite.y = self.y + 32   # 32是窗口边,还是16?
记得window的z坐标好像是100?(以前偶尔的测试...)所以应该要sprite.z = 101。

个人感觉Cache的方法名很乱,我倒不如Bitmap.new("Graphics/System/IconSet")
特别是少得用的图案不要用Cache, 反而耗内存.
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2011-1-12
帖子
42
9
发表于 2011-3-15 21:56:58 | 只看该作者
Cache 有 Hash 来维护, 对于加载次数多的图片, 使用 Cache 来加载更加节约内存.

直接使用 new 来加载的话, 加载一次内存添加一次. 虽然有 GC 的帮忙, 不过能避免的话, 总是好的.

对于第一次加载的 Bitmap , 最多内存消耗比直接使用 Bitmap.new 大那么一点点.

总体感觉 Cache 还是不错的.
回复

使用道具 举报

Lv4.逐梦者

弓箭手?剑兰

梦石
0
星屑
5754
在线时间
833 小时
注册时间
2010-11-17
帖子
1140
10
发表于 2011-3-15 22:11:22 | 只看该作者
回复 爱丽丝·玛格特罗依德 的帖子

用得少也就是用一下就被dispose掉(dispose会在内存消失?),
这样一直放在Cache的哈希里面不占内存么?
如果Cache也能个别式的clear就好了。
(GC也只限制在Cache.clear中)

其实如果再好一些的话,可以:
@sprite = Sprite.new(Viewport.new(self.x + 32, self.y + 32, self.width-32, self,height-32))
用viewport来锁定显示范围为window。
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-27 13:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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