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

Project1

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

[已经解决] 问一个窗口脚本的问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4169
在线时间
258 小时
注册时间
2013-10-13
帖子
815
跳转到指定楼层
1
发表于 2013-12-4 16:50:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
def initialize(x, y, width, height)                                                为什么初始化可以作为函数?或者哪个才是DEF要执行的函数?
    super()
    @windowskin_name =$game_system.windowskin_name    windowskin是个类吗? 后面为什么要加name,这句话的意思是
                                                                                               windowskin_name这个实例变量被赋上game_system里面的一
                                                                                               个类的值吗?
    self.windowskin = RPG::Cache.windowskin(@windowskin_name)       self是什么意思?RPG::Cache是什么意思?
    self.x = x                                                                              x能被自己赋值吗?
    self.y = y
    self.width = width
    self.height = height
    self.z = 100                                                                          z = 100表示什么?
  end
整个函数是什么意思?

Lv3.寻梦者

梦石
0
星屑
2744
在线时间
2630 小时
注册时间
2013-1-16
帖子
5657

贵宾

2
发表于 2013-12-4 18:45:02 | 只看该作者
1.这个是重新定义了Window类的初始化过程…
2.windowskin_name是窗口皮肤图片的路径。意思如楼主所说。
3.self是指当前这个类本身(现在是Window类)
4.RPG::Cache是调用RPG模块里一个叫Cache的过程
5.等号(其实是赋值号)右边的x是第一行出现的x,是由用户提供的
6.z是窗口显示的优先程度,z值大的会遮盖住小的
(Created by @喵kano)


施工现场:hotege.github.io
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
帖子
768
3
发表于 2013-12-4 19:53:02 | 只看该作者
建议楼主先看F1
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3846
在线时间
1966 小时
注册时间
2013-1-3
帖子
9536
4
发表于 2013-12-4 21:33:55 | 只看该作者
第一个指重定义,因为它要覆盖原来的定义
第二个是指Windowskin里的文件,方便调用
第三个self是对于这个新类而言的,Cache对于这里来说就是调用Windowskin
第四个self可以自己定义
第五个z指这个窗口的优先程度,值越高优先级越高

点评

懂了一点了,还是需要自己仔细研究F1  发表于 2013-12-5 17:19

评分

参与人数 1星屑 +120 收起 理由
myownroc + 120 我很赞同

查看全部评分

《宿愿·寻剑篇》正式版已经发布!快去看看!点击进入论坛发布贴
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4169
在线时间
258 小时
注册时间
2013-10-13
帖子
815
5
 楼主| 发表于 2013-12-7 20:17:24 | 只看该作者
1,super()是调用父类WINDOW的构造方法吗?是什么构造方法的?后面为什么带个不加参数的括号,表示什么?
2,引用RPG类中的常量Cache,PRG有这个程序或者是脚本吗?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4169
在线时间
258 小时
注册时间
2013-10-13
帖子
815
6
 楼主| 发表于 2013-12-7 20:23:22 | 只看该作者
本帖最后由 kvkv97 于 2013-12-7 20:24 编辑

#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
#  游戏中全部窗口的超级类。
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     x      : 窗口的 X 坐标
  #     y      : 窗口的 Y 坐标
  #     width  : 窗口的宽
  #     height : 窗口的宽
  #--------------------------------------------------------------------------
  def initialize(x, y, width, height)
    super()
    @windowskin_name =$game_system.windowskin_name
    self.windowskin =RPG::Cache. windowskin(@windowskin_name)
    self.x = x
    self.y = y
    self.width = width
    self.height = height
    self.z = 100
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  def dispose
    # 如果窗口的内容已经被设置就被释放
    if self.contents != nil
      self.contents.dispose
    end
    super
  end
释放是什么意思?里面为什么还会使用super呢?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
7
发表于 2013-12-8 08:26:56 | 只看该作者
本帖最后由 恋′挂机 于 2013-12-8 08:40 编辑

这个不算挖坟吧。。。。。。。

def initialize(x, y, width, height) # 带有参数的初始化函数,从一般窗口初始化函数传递过来super(x, y, width, height)
    super() # 父类同名函数
    @windowskin_name =$game_system.windowskin_name # 这个只是窗口图片名!!!!!!
    self.windowskin =RPG::Cache. windowskin(@windowskin_name) # 这才是修改皮肤!!并带入图片名称
    self.x = x # X坐标
    self.y = y # Y坐标
    self.width = width # 宽度
    self.height = height # 高度
    self.z = 100 # Z坐标,你可能知道默认窗口的Z都是100,这就是原因!!!
  end

把Scene_Menu的79行注释掉,测试打开菜单看看有什么效果?
发现状态窗口保存在了地图中,所以需要释放(图片,窗口等等)

def dispose
    # 如果窗口的内容已经被设置就被释放
   if self.contents != nil # 如果窗口的contents属性生成了Bitmap
      self.contents.dispose # 释放
    end
    super
  end

为什么要super这个好难解释。。。
你只释放了他的Bitmap,让窗口本身释放掉并不是在Window_Base里定义的,
应该在Window类吧所以需要super。


不过看主楼,LZ连实例变量、方法<或称函数>、类等概念还很模糊的建议去看看某侠的录像!

@windowskin_name 只是一个实例变量,和windowskin是不是一个类这根本就是八竿子打不着。

# 其实看完F1基础篇就能创作脚本了,只是新手没有方向而已,老鸟都说F1好,新手却不会用!!!
# 你去搜索看看啊!!!!在F1中搜索windowskin,发现是Window类的属性(应该是用attr定义的)
# 就又设计到了属性(attr)在Game_Temp中添上一个attr_accessor :aaa
# $game_temp.aaa = 10
# p $game_temp.aaa
# attr_accessor和attr_reader都是可以直接“.xxx”取到值,所以“.xxx” xxx可能是某方法也可能是某属性!!!和类根本不是一个概念!!!
self.windowskin = RPG::Cache. windowskin(@windowskin_name)
现在你去搜索RPG::Cache,看看吧,可以找到RPG::Cache. windowskin是模块方法
RPG::Cache这个模块就是读取各种图片的!!!!!!!

contents是Window的属性,也就是说任何一个窗口都具有这样的属性
搜索contents看看吧,窗口内容的位图

既然是位图当然要Bitmap.new了
在Bitmap去再去描绘文本矩形图片等等

点评

两天也算坟?  发表于 2013-12-9 16:11
申请加精  发表于 2013-12-8 11:18
谢谢热心指导,能否告诉我某大侠的教程的网址  发表于 2013-12-8 11:14

评分

参与人数 1梦石 +1 收起 理由
myownroc + 1 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4169
在线时间
258 小时
注册时间
2013-10-13
帖子
815
8
 楼主| 发表于 2013-12-10 17:50:01 | 只看该作者
我想在这里把这个问题仔细研究下去:
1,窗口被几个定义分割成几块,剩下显示状态的窗口没变,我把X坐标变了,只能变这个部分的X坐标。我想问,为什么X能自己赋值?这个值为什么能起到切换状态栏的时候能随机变化(效果可以把X =100试试看)
2,super(),为什么这个关键词后面括号里面没东西?没东西不是不需要括号吗?
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4169
在线时间
258 小时
注册时间
2013-10-13
帖子
815
9
 楼主| 发表于 2013-12-10 17:51:22 | 只看该作者
本帖最后由 kvkv97 于 2013-12-10 17:58 编辑

继续这个脚本:
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update                                                                                                         为什么需要刷新,我把这个注释掉了,结果看不出有什么?
    super                                                                                                               super是引用了Window类的结构
    # 如果窗口的外观被变更了、再设置
    if $game_system.windowskin_name != @windowskin_name                          在上面, @windowskin_name =$game_system.windowskin_name ,后面的量已经被赋在@windowskin_name 上面了
                                                                      为什么还需要有这个条件? 不是多此一举吗?                                                                     
   @windowskin_name = $game_system.windowskin_name
      self.windowskin = RPG::Cache.windowskin(@windowskin_name)
    end
  end
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

10
发表于 2013-12-10 18:15:10 | 只看该作者
我来解释一下:
这里的update是定义的一种方法,习惯上,我们要把需要经常执行的方法都定义成update(当然你可以把它定义成别的,这不过是RGSS一种习惯),意思就是说,update方法是要定期执行的方法。在场景画面中,你会看到Graphics.update等方法(当然这个update和这里窗口的update不同),不过这个方法几乎是每一帧都要执行的,因此不能省去。
因为这个是Window_Base的update方法,里面的内容非常简单,第一个super是调用父类Window的同名方法,而后面,则是设置窗口的样式。因此,如果你在游戏中改变了默认窗口皮肤,这里会及时作出反应,但如果你不调用update方法,那么就会系统会无动于衷。

再说第二个问题,这里不是多此一举,我们恰恰需要这个判断。你注意到上面@windowskin_name = $game_system.windowskin_name是定义在initialize方法里面的,而initialize方法一般只执行一次。如果你在初始化之后,又改变了$game_system.windowskin_name的值,这时候initialize不起作用,只能通过update来判断,即如果窗口样式变化了再设置。

顺便问下,问得这么细,LZ是要学习脚本么?

评分

参与人数 1星屑 +180 收起 理由
myownroc + 180 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-30 06:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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