Project1

标题: 新手教程——函数外的常量(实战篇)_(4) [打印本页]

作者: 一箭烂YiJL    时间: 2010-12-11 11:49
标题: 新手教程——函数外的常量(实战篇)_(4)
本帖最后由 一箭烂YiJL 于 2010-12-11 15:21 编辑

课序号:4
作者:一箭烂YiJL
出版社:VX教程出版社
售价:完全免费
VX教程出版社的其它教程

上一课:
新手教程——函数外的常量(理论篇)


再看这一课之前请看:
新手教程——函数外的常量(理论篇)
新手教程——计算累计时间Window


序:
这一课时联系着上一课的函数外的常量,
此课是实战。我们要开刀的是上一次的新手教程——计算累计时间Window


正式开始:
还记得上一次我介绍了两种大方法吗?
这一次我会两种都用上的。


先看看脚本:
  1. class WindowPlayTime < Window_Base
  2.   
  3.   def initialize(x, y, w = 160, h = 90)
  4.     super(x, y, w, h)
  5.     update
  6.   end

  7.   def update
  8.     self.contents.clear
  9.     @total_sec = Graphics.frame_count / Graphics.frame_rate
  10.     hrs = @total_sec / 60 / 60
  11.     min = @total_sec / 60 % 60
  12.     sec = @total_sec % 60
  13.     playtime = sprintf("%02d:%02d:%02d", hrs, min, sec)
  14.     self.contents.font.color = normal_color
  15.     self.contents.draw_text(x, 30, 126, WLH, playtime, 2)
  16.     time_text = "游戏时间:"
  17.     self.contents.draw_text(x, -30, 160, 90, time_text,0)
  18.   end
  19. end
复制代码
先想一想有什么我们可以抽出来的:
w、h、time_text、时分秒之间的冒号":"
有人会问:怎么不把xy一并抽出来?
xy是待留用@a = WindowPlayTime.new(1, 2)    # xy坐标



A.类内常量的方法:

先把wh的160和90抽出来,名字统一为WH一个常量
并且把initialize的那里的w和h删掉:
  1. class WindowPlayTime < Window_Base
  2.   WH = [160, 90]
  3.   def initialize(x, y)
  4.     super(x, y, WL[0], WL[1])    #记得数组是从0开始数起
  5.     update
  6.   end
复制代码
再把time_text的"游戏时间:"抽出来:
  1. class WindowPlayTime < Window_Base
  2.   WH = [160, 90]     # 这里用的是字串式
  3.   Text = "游戏时间:"
复制代码
然后在原版的17行做手脚,变成:
  1. time_text = Text
复制代码
最后,把时分秒之间的冒号改变,
在类中(以及函数外)添加这种哈希式:

  1. Colon = {时=>":", "分"=>":", "秒"=>":"}
复制代码
再在原版的14行动手脚,变成:

  1. playtime = sprintf("%02d#{Colon["时"]}%02d#{Colon["分"]}%02d#{Colon["秒"]}", hrs, min, sec)
复制代码
等等!为什么要用#{}括着Colon["时"]?
因为在""里用变量是要用#{}来括住。


若有看过上两课的同学则会知道上边在做什么。

制成品最后那里有



B.module模块类的方法:

开一个module,把上面的所有常量塞进去:

  1. module TimeSet
  2.   WH = [160, 90]
  3.   Text = "游戏时间:"
  4.   Colon = {"时"=>"时", "分"=>"分", "秒"=>"秒"}
  5. end
复制代码
然后在class的第一行加进:

  1. include TimeSet
复制代码
这样TimeSet的函数否会全部加进来。

修改initialize成为:

  1. def initialize(x, y)
  2.   super(x, y, WL[0], WL[1])
  3.   update
  4. end
复制代码
之后下一步就是update了,
update我们用"TimeSet::常量"这种方法,
修改原版的17行,成为:
  1. time_text = TimeSet::Text
复制代码
再修改原版的14行,成为:

  1. playtime = sprintf("%02d#{TimeSet::Colon["时"]}%02d#{TimeSet::Colon["分"]}%02d#{TimeSet::Colon["秒"]}", hrs, min, sec)
复制代码
还有大功告成!


C.完成作品在这儿:


一.类内常量的方法:
  1. class WindowPlayTime < Window_Base
  2.   WH = [160, 90]
  3.   Text = "游戏时间:"
  4.   Colon = { "时" => "时", "分" => "分", "秒" => "秒"}
  5.   def initialize(x, y)
  6.     super(x, y, WH[0], WH[1])
  7.     update
  8.   end

  9.   def update
  10.     self.contents.clear
  11.     @total_sec = Graphics.frame_count / Graphics.frame_rate
  12.     hrs = @total_sec / 60 / 60
  13.     min = @total_sec / 60 % 60
  14.     sec = @total_sec % 60
  15.     playtime = sprintf("%02d#{Colon["时"]}%02d#{Colon["分"]}%02d#{Colon["秒"]}", hrs, min, sec)
  16.     self.contents.font.color = normal_color
  17.     self.contents.draw_text(x, 30, 126, WLH, playtime, 2)
  18.     time_text = Text
  19.     self.contents.draw_text(x, -30, 160, 90, time_text,0)
  20.   end
  21. end
复制代码
二.module模块类的方法:
  1. module TimeSet
  2.   WH = [160, 90]
  3.   Text = "游戏时间:"
  4.   Colon = { "时" => "时", "分" => "分", "秒" => "秒"}
  5. end

  6. class WindowPlayTime < Window_Base
  7.   include  TimeSet
  8.   def initialize(x, y)
  9.     super(x, y, WH[0], WH[1])
  10.     update
  11.   end

  12.   def update
  13.     self.contents.clear
  14.     @total_sec = Graphics.frame_count / Graphics.frame_rate
  15.     hrs = @total_sec / 60 / 60
  16.     min = @total_sec / 60 % 60
  17.     sec = @total_sec % 60
  18.     playtime = sprintf("%02d#{TimeSet::Colon["时"]}%02d#{TimeSet::Colon["分"]}%02d#{TimeSet::Colon["秒"]}", hrs, min, sec)
  19.     self.contents.font.color = normal_color
  20.     self.contents.draw_text(x, 30, 126, WLH, playtime, 2)
  21.     time_text = TimeSet::Text
  22.     self.contents.draw_text(x, -30, 160, 90, time_text,0)
  23.   end
  24. end
复制代码
总结,我们实战了:
1.使用类外的常量
2.module模块类
3.调用module里的常量
4.数组(Array)
5.哈希(Hash)


总结,我们学到了:
1.""中的变量#{}




看完教程请回复,
我们需要的是支持!!


好了,这堂实战课上完了,谢谢大家。

下一课:
新手教程——细说数组与哈希

作者: summer92    时间: 2010-12-12 15:57
内部变量和外部变量,跟这个的概念一样把?下次讲一讲~~~~


summer92于2010-12-13 10:03补充以下内容:
是啊,全局和局部,呵呵




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1