Project1
标题:
封装
[打印本页]
作者:
yagami
时间:
2014-1-11 21:53
标题:
封装
刚接触脚本很容易写出这样的代码
xx = "aaaa"
self.contents.draw_text(27, 20, 100, 32, xx)
xx = "bbbb"
self.contents.draw_text(27, 40, 100, 32, xx)
xx = "cccc"
self.contents.draw_text(27, 60, 100, 32, xx)
xx = "dddd"
self.contents.draw_text(27, 80, 100, 32, xx)
复制代码
如果东西再多点 脚本会无比长的赶脚 观察下这脚本好多重复的地方 于是乎把关键的地方抽出来可以写成这样
tex =["aaaa","bbbb","cccc","dddd"]
for i in 0..tex.size
self.contents.draw_text(27, 20*i+20, 100, 32, tex[i])
end
复制代码
但发现后面很多地方要调用类似的功能 比如
xx = "aaaa"
self.contents.draw_text(33, 10, 110, 32, xx)
xx = "bbbb"
self.contents.draw_text(33, 40, 110, 32, xx)
xx = "cccc"
self.contents.draw_text(33, 70, 110, 32, xx)
xx = "dddd"
self.contents.draw_text(33, 100, 110, 32, xx)
复制代码
这样每次写个for循环也很烦 于是就要写个函数
def drawtex(tex,x,y,w,h,starty)
for i in 0..tex.size
self.contents.draw_text(x, y*i+starty, w, h, tex[i])
end
end
复制代码
现在用起来调用函数 方便多了 又不小心遇到了如下的情况 y变随机了
xx = "aaaa"
self.contents.draw_text(33, 33, 110, 32, xx)
xx = "bbbb"
self.contents.draw_text(33, 40, 110, 32, xx)
xx = "cccc"
self.contents.draw_text(33, 20, 110, 32, xx)
xx = "dddd"
self.contents.draw_text(33, 70, 110, 32, xx)
复制代码
还是老样子 抽出关键的地方
y= [33,40,20,70]
def drawtex(tex,x,y,w,h)
for i in 0..tex.size
self.contents.draw_text(x, y[i], w, h, tex[i])
end
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逐渐变得丧心病狂,最后……
text=RGSSTextWriter.new(0,0,10,10,"1","258"...)
text.binding = self.contents
text.show(0)
text.showall_inorder(0,20)
text.showall_inorder do |str,i|
[0,[40,70,90,30].[](i),*TextMeasure.call(str),str]
end
#......
复制代码
作者:
晴兰
时间:
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