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

Project1

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

[已经解决] 窗口皮肤的素材怎样才能突破规定分辨率

[复制链接]

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
跳转到指定楼层
1
发表于 2015-8-9 19:23:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
想用个高清点的窗口皮肤素材,但素材放在64*64的格子里再拉伸放大边缘全是锯齿。。
在脚本里翻了一下,决定窗口皮肤的属性是Window类下的windowskin
这个属性好像是在内部代码中被定义的,无法修改,所以是没办法改动它对素材图片(只读左上64*64范围作窗口皮肤等等)的读取方式?
把window素材替换成一个高清单图后试运行发现果然对话框读取错乱了。

我目前想到的笨办法是把窗口皮肤改成透明,单独写一个绘制位图的方法,跟Window_Message每次对窗口皮肤的调用绑定在一起,每次对话让它出现在底层达到背景的效果
但写出来之后这个图片一进游戏就存在,永远不消失...也不知道是哪里出了问题
RUBY 代码复制
  1. module Cache
  2.   def self.WindowSkinImage(filename)
  3.     load_bitmap("Graphics/System/", filename)
  4.   end
  5. end
  6.  
  7. class Window_Message < Window_Base
  8.   alias x20150809_initialize initialize
  9.   def initialize
  10.     x20150809_initialize
  11.     create_DIY_sprite
  12.   end
  13.   def create_DIY_sprite
  14.     @DIYBack_sprite = Sprite.new
  15.     @DIYBack_sprite.bitmap = Cache.WindowSkinImage("Chip_Location"#素材文件名)
  16.   end
  17.   alias x20150809_dispose dispose
  18.   def dispose
  19.     x20150809_dispose
  20.     dispose_DIY_sprite
  21.   end
  22.   def dispose_DIY_sprite
  23.     @DIYBack_sprite.dispose
  24.   end
  25. end

上面代码中大小位置什么的还没设定,请大家看看是什么导致它不是随着对话窗出现而出现的

另外,不知道这个问题有没有更好的解决方案呢?可以改变Windowskin素材图的读取方式吗?

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2015-8-9 19:34:57 | 只看该作者
本帖最后由 taroxd 于 2015-8-9 19:47 编辑

即使 window 被隐藏了,@DIYBack_sprite 也没有被隐藏啊。
你可以试试
RUBY 代码复制
  1. class Window_Message < Window_Base
  2.   def visible= v
  3.     super
  4.     @DIYBack_sprite.visible = v
  5.   end
  6.  
  7.   def initialize
  8.     create_DIY_sprite # 在前面调用,防止原来初始化时隐藏了窗口
  9.     x20150809_initialize
  10.   end
  11. end


另外你的注释把括号也注释掉了。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
3
 楼主| 发表于 2015-8-9 21:02:14 | 只看该作者
taroxd 发表于 2015-8-9 19:34
即使 window 被隐藏了,@DIYBack_sprite 也没有被隐藏啊。
你可以试试

@taroxd
用了,没有效果..
def visible = v
这句没看懂,没找到父类里有visible这个方法啊?
“隐藏”这个流程是在哪里出现的?我是在Window_Message里照着背景生成的方法改写的,所以按理来说不应该是跟背景的生成时机相同么(´゚Д゚`)
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

4
发表于 2015-8-9 21:20:34 | 只看该作者
acv255 发表于 2015-8-9 21:02
@taroxd
用了,没有效果..
def visible = v


啊,好吧,原来是用 openness 控制出现的。

Window 里面有 visible= 这个方法。

Window_Message#initialize 里面 self.openness = 0 就相当于隐藏了。

生成的时机不代表出现的时机。

这样再试试
RUBY 代码复制
  1. class Window_Message < Window_Base
  2.   def visible= v
  3.     @DIYBack_sprite.visible = v
  4.     super
  5.   end
  6.  
  7.   def openness= v
  8.     @DIYBack_sprite.opacity = v
  9.     super
  10.   end
  11.  
  12.   def initialize
  13.     create_DIY_sprite # 在前面调用,防止原来初始化时隐藏了窗口
  14.     x20150809_initialize
  15.   end
  16. end
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22953
在线时间
8638 小时
注册时间
2011-12-31
帖子
3367
5
发表于 2015-8-9 21:38:21 | 只看该作者
https://rpg.blue/thread-382096-1-1.html
9楼
Message Background
v.1.0
可用関数設定用不用圖片做对话框背景(預設開関1)
可在事件劇本中指定圖片做对话框背景
例:msgbg("MsgImage2", -98)
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
6
 楼主| 发表于 2015-8-9 22:32:48 | 只看该作者
taroxd 发表于 2015-8-9 21:20
啊,好吧,原来是用 openness 控制出现的。

Window 里面有 visible= 这个方法。

可以了 好神奇
但为什么需要专门往openness=方法里把自己的opacity赋值过程加进去才可以?
Initialize里不是明明有self.openness=0吗?
是因为@DIYBack_sprite不是Window_Message的而是Sprite的实例变量吗?

点评

因为@DIYBack_sprite不是Window_Message的而是Sprite的实例  发表于 2015-8-10 07:22
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
7
 楼主| 发表于 2015-8-9 22:38:01 | 只看该作者
tseyik 发表于 2015-8-9 21:38
https://rpg.blue/thread-382096-1-1.html
9楼
Message Background

不知道你是想说9L还是10L,我都看了下
9L新建的还是窗口类,应该还会受到读取素材规则的限制;
10L看了下简介好像是符合我要求的,但为什么会这么长...容我研究一下
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 12:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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