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

Project1

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

[已经解决] 怎么要把图片变成游戏窗口?

[复制链接]

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

跳转到指定楼层
1
发表于 2012-12-24 20:48:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 美丽晨露 于 2012-12-26 19:55 编辑

并且之前的窗口消失
然后会图片画的窗口来显示
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9443
在线时间
2751 小时
注册时间
2008-9-5
帖子
3544

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

2
发表于 2012-12-24 23:55:29 | 只看该作者
本帖最后由 cinderelmini 于 2012-12-24 23:56 编辑

嗯……总的来说,
就是建立Sprite来实现比较简洁……
在相应的窗口,建立Sprite来实现……

以一个简单的栗子:
  1. class Window_xxx <Window_Base
  2. def initialize
  3. # 在这里先建立精灵
  4. @back = Sprite.new
  5. @back.bitmap = Cache.picture("图片名字") # 图片放在Pictures文件夹里
  6. super(x, y, w, h)
  7. self.opacity = 0 # 让原来的窗口隐藏掉
  8. # 这里接下去的就是一般的窗口初始化内容了
  9. end
  10. # 然后必须写上释放的重载,因为精灵的释放父类里没有,所以要重写,坐标同。
  11. def dispose
  12. @back.dispose
  13. super
  14. end
  15. def x=(x)
  16. @back.x = x
  17. super(x)
  18. end
  19. def y=(y)
  20. @back.y = y
  21. super(y)
  22. end
  23. def z=(z)
  24. @back.z = z-1
  25. super(z)
  26. end

  27. # 到这里为止,必须的都已经写好了,
  28. # 要注意的是,在建立窗口的同时必须设置一下窗口的坐标,否则背景图片则会以默认的左上点为准。
  29. # 当然可以直接在初始化的时候写上
  30. #“self.x = xxx”
  31. # 这样的句子自行设定一下。
复制代码
在窗口建立Sprite的过程就是这样了,
其他的有不明白的再召唤哀家……
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

3
 楼主| 发表于 2012-12-26 17:00:11 | 只看该作者
cinderelmini 发表于 2012-12-24 23:55
嗯……总的来说,
就是建立Sprite来实现比较简洁……
在相应的窗口,建立Sprite来实现……

就是说先把原来的窗口透明吗?
然后再导入图片?
这个不能在Sence类脚本做么?
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9443
在线时间
2751 小时
注册时间
2008-9-5
帖子
3544

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

4
发表于 2012-12-26 17:45:57 | 只看该作者
美丽晨露 发表于 2012-12-26 17:00
就是说先把原来的窗口透明吗?
然后再导入图片?
这个不能在Sence类脚本做么? ...

本来就是把原来的窗口透明掉嘛……
这是明明就是去掉原来窗口框框最简单的办法……

于是导入图片,感觉在窗口里直接写比在Scene里写来得方便……
毕竟在Scene里写的话,还要设定各种坐标于窗口对应起来……
当然……如果菜单只要一张图片并不要其他效果(比如滑动之类)的话,
当然在Scene里直接写比较简单……
方法如下:
在Scene_Menu里的:def main
随便在前面的几行里写上建立背景的Sprite句子(跟在窗口里建立一样做法)
然后在main函数的最后几行的各种窗口的dispose那里再写上Sprite的释放,
当然,坐标什么的,就要在建立的时候顺便设定一下了。
饭粒:
  1. class Scene_Menu
  2. def main
  3. @back = Sprite.new
  4. @back.x = 0
  5. @back.y = 0
  6. @back.z = 0
  7. @back.bitmap = RPG::Cache.picture("xxx")
  8. # 以下是其他的窗口建立和主处理的循环
  9. …………
  10. …………
  11. # 之后这里会是循环结束后的释放,在各种窗口释放后把@back也释放掉
  12. @xxx.dispose
  13. @yyy.dispose
  14. …………
  15. @back.dispose
  16. end
复制代码
显示背景图片的话,基本就是这样了,
如果需要显示多张背景图片的话,
可以依法炮制,再建立几个Sprite……

以上。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9443
在线时间
2751 小时
注册时间
2008-9-5
帖子
3544

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

5
发表于 2012-12-26 17:46:20 | 只看该作者
美丽晨露 发表于 2012-12-26 17:00
就是说先把原来的窗口透明吗?
然后再导入图片?
这个不能在Sence类脚本做么? ...

本来就是把原来的窗口透明掉嘛……
这是明明就是去掉原来窗口框框最简单的办法……

于是导入图片,感觉在窗口里直接写比在Scene里写来得方便……
毕竟在Scene里写的话,还要设定各种坐标于窗口对应起来……
当然……如果菜单只要一张图片并不要其他效果(比如滑动之类)的话,
当然在Scene里直接写比较简单……
方法如下:
在Scene_Menu里的:def main
随便在前面的几行里写上建立背景的Sprite句子(跟在窗口里建立一样做法)
然后在main函数的最后几行的各种窗口的dispose那里再写上Sprite的释放,
当然,坐标什么的,就要在建立的时候顺便设定一下了。
饭粒:
  1. class Scene_Menu
  2. def main
  3. @back = Sprite.new
  4. @back.x = 0
  5. @back.y = 0
  6. @back.z = 0
  7. @back.bitmap = RPG::Cache.picture("xxx")
  8. # 以下是其他的窗口建立和主处理的循环
  9. …………
  10. …………
  11. # 之后这里会是循环结束后的释放,在各种窗口释放后把@back也释放掉
  12. @xxx.dispose
  13. @yyy.dispose
  14. …………
  15. @back.dispose
  16. end
复制代码
显示背景图片的话,基本就是这样了,
如果需要显示多张背景图片的话,
可以依法炮制,再建立几个Sprite……

以上。

点评

啊咧……怎么搞得…………为什么发一次说错误,再发就连帖了……  发表于 2012-12-26 17:46
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

6
 楼主| 发表于 2012-12-26 19:08:11 | 只看该作者
cinderelmini 发表于 2012-12-26 17:46
本来就是把原来的窗口透明掉嘛……
这是明明就是去掉原来窗口框框最简单的办法……

谢谢啊
可是如果窗口有滑动效果或者有两级菜单
又应该怎么做?
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9443
在线时间
2751 小时
注册时间
2008-9-5
帖子
3544

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

7
发表于 2012-12-26 19:47:01 | 只看该作者
所以说啊……
在窗口的脚本本体里面建立精灵,也就是之前说的那个办法就能解决这样的问题了啊……
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

8
 楼主| 发表于 2012-12-26 19:53:03 | 只看该作者
cinderelmini 发表于 2012-12-26 19:47
所以说啊……
在窗口的脚本本体里面建立精灵,也就是之前说的那个办法就能解决这样的问题了啊…… ...

虽然还是有些不懂
但是按你的方法做出来了
谢谢啊
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv4.逐梦者

「Pemercyia」


Urhurrenna

梦石
0
星屑
9443
在线时间
2751 小时
注册时间
2008-9-5
帖子
3544

开拓者短篇八RM组冠军短篇九导演组亚军白银编剧

9
发表于 2012-12-27 00:10:08 | 只看该作者
这个办法的道理就是:
在一个窗口脚本里,建立窗口内容的时候同时建立一个现实图片用的精灵(Sprite),
然后之后的 def x=(x)这样的函数是RGSS里默认的Window脚本内置函数,这里只是重新写了一次,
也就是重新定义了这个函数,以用来每次调用这个函数的时候用我们新写的这个,
这个函数的调用基本为:
1,在其他脚本里以变量的形式建立了这个脚本的实例(@xxx_window = Window_xxx.new)这样的形式,
然后调用 def x=(x) 的形式为: @xxx_window.x = 8989 这样的形式
2,在脚本内部使用,也就是在脚本内任何地方(大概吧),用 self.x = 8989 这样的式子调用。

而新写的 def x=(x) 这样的函数里面加了一个 @back.x = x 这样的一句,
表示背景精灵的x坐标跟仓库的坐标一致(当然也可以略调,-1,+1之类的),
而下面的 super(x) 则是这个函数本身的继承句子,表示继承了父类,并赋值x进去……

好吧……只需要理解这样的一组函数可以在窗口脚本里做一个图片背景就好了……
其他的以后慢慢用着用着就会一点点明白了的……

评分

参与人数 1梦石 +1 收起 理由
hcm + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

10
 楼主| 发表于 2012-12-27 17:12:18 | 只看该作者
cinderelmini 发表于 2012-12-27 00:10
这个办法的道理就是:
在一个窗口脚本里,建立窗口内容的时候同时建立一个现实图片用的精灵(Sprite),
然 ...

明白了
谢谢你指导我那么多
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-9 00:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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