Project1

标题: 封装 [打印本页]

作者: yagami    时间: 2014-1-11 21:53
标题: 封装
刚接触脚本很容易写出这样的代码
  1.    xx = "aaaa"     
  2.    self.contents.draw_text(27, 20, 100, 32, xx)
  3.    xx = "bbbb"
  4.    self.contents.draw_text(27, 40, 100, 32, xx)
  5.    xx = "cccc"
  6.    self.contents.draw_text(27, 60, 100, 32, xx)
  7.    xx = "dddd"
  8.    self.contents.draw_text(27, 80, 100, 32, xx)
复制代码
如果东西再多点 脚本会无比长的赶脚 观察下这脚本好多重复的地方 于是乎把关键的地方抽出来可以写成这样
  1. tex =["aaaa","bbbb","cccc","dddd"]
  2. for i in 0..tex.size
  3.   self.contents.draw_text(27, 20*i+20, 100, 32, tex[i])
  4. end
复制代码
但发现后面很多地方要调用类似的功能 比如
  1.    xx = "aaaa"     
  2.    self.contents.draw_text(33, 10, 110, 32, xx)
  3.    xx = "bbbb"
  4.    self.contents.draw_text(33, 40, 110, 32, xx)
  5.    xx = "cccc"
  6.    self.contents.draw_text(33, 70, 110, 32, xx)
  7.    xx = "dddd"
  8.    self.contents.draw_text(33, 100, 110, 32, xx)
复制代码
这样每次写个for循环也很烦 于是就要写个函数
  1. def drawtex(tex,x,y,w,h,starty)
  2.   for i in 0..tex.size
  3.     self.contents.draw_text(x, y*i+starty, w, h, tex[i])
  4.   end
  5. end
复制代码
现在用起来调用函数 方便多了 又不小心遇到了如下的情况 y变随机了
  1.    xx = "aaaa"     
  2.    self.contents.draw_text(33, 33, 110, 32, xx)
  3.    xx = "bbbb"
  4.    self.contents.draw_text(33, 40, 110, 32, xx)
  5.    xx = "cccc"
  6.    self.contents.draw_text(33, 20, 110, 32, xx)
  7.    xx = "dddd"
  8.    self.contents.draw_text(33, 70, 110, 32, xx)
复制代码
还是老样子 抽出关键的地方
y= [33,40,20,70]
  1. def drawtex(tex,x,y,w,h)
  2.   for i in 0..tex.size
  3.     self.contents.draw_text(x, y[i], w, h, tex[i])
  4.   end
  5. end
复制代码
调用drawtex(tex,33,y,110,32)
作者: 上贺茂润    时间: 2014-1-11 21:56
脚本盲表示头疼
作者: 美丽晨露    时间: 2014-1-11 22:11
请问这个脚本有什么作用吗?
输出文本,封装内容?
作者: kuerlulu    时间: 2014-1-12 00:14
这脚本是用来演示用的,目的是告诉我们什么叫封装并且提供一种写代码的思路,就是更简洁,更容易,更实用
lz提供的思路是:1.寻找已知代码重复的地方,利用它做成方法
2.无顺序怎么办,数组来帮忙
个人补充:3.就示范脚本的方法来说,真正有用的参数是x,y,tex,而w,h可以通过已知方法得到(具体我忘了 要翻f1 或者直接str.length*32←_←),还有for可以换成each,具体如下:(参数什么的)
def drawtexs(*aaaaa)
  raise ArgumentError,"好像有什么不对" if  *aaaaa.empty?
  # 参数规定: 数组形式[x,y,tex]不限制个数
  # 你可以drawtexs([1,1,"a"],[33,33"b"])往后写无数个 注意引号不能少
  *aaaaa.each do |aaa|
    self.contents.draw_text(aaa[0],aaa[1],w,h,aaa[2])#这里的w,h是我不清楚那个预制方法 所以直接复制运行会引发未知方法错误哟(pia
  end
end
这样就完成了
作者: myownroc    时间: 2014-1-12 00:58
直接说"自顶而下,逐步求精"不是更简单一些(虽然很多人不知道这是什么意思)
作者: 无脑之人    时间: 2014-1-12 19:05
最后脚本er逐渐变得丧心病狂,最后……
  1. text=RGSSTextWriter.new(0,0,10,10,"1","258"...)
  2. text.binding = self.contents
  3. text.show(0)
  4. text.showall_inorder(0,20)
  5. text.showall_inorder do |str,i|
  6.   [0,[40,70,90,30].[](i),*TextMeasure.call(str),str]
  7. end
  8. #......
复制代码

作者: 晴兰    时间: 2014-1-12 21:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: 天使喝可乐    时间: 2014-1-12 21:57
这头像真鬼畜……
作者: 紫英晓狼1130    时间: 2014-1-13 08:52
受教了,以前一直以为第3个是最简的,原来定义函数就可以




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