Project1
标题:
【伪教程·封装】果然我们只需要参数就可以了
[打印本页]
作者:
kuerlulu
时间:
2014-4-6 15:10
标题:
【伪教程·封装】果然我们只需要参数就可以了
本帖最后由 kuerlulu 于 2014-4-6 16:20 编辑
【话唠】
当高中僧真是太苦逼了网都没得上(那你是怎么发这个帖子的(不要在意细节
排版什么的在下不是很擅长啊
那么【正题】
写这个伪教程其实是以前有人在水区发过关于"封装"的脚本和一些说明(顺便在下也发个帖刷存在感(喂
在讲什么是封装之前,让我们看一段简单的脚本,为了让示范更实用,在下就从F1-脚本入门-显示图片的脚本开始
def ms(sym, *args) # 方法名我乱取的
eval("@#{sym} = Sprite.new; @#{sym}.bitmap = Bitmap.new(*args)")
end
复制代码
解释: 作成一个装有Bitmap的Sprite。
比如在下面写一句 ms :a, "pic_path" 就会生成名叫@a的Sprite对象并载入"pic_path"的Bitmap,这里的"pic_path"也可以换成640,480 (因为是传入Bitmap.new方法的)
插嘴: 看出什么了吗
def center(sprite)
raise "不是一个Sprite对象啦" if sprite.class != Sprite
sprite.ox = sprite.bitmap.width / 2; sprite.oy = sprite.bitmap.height / 2
end
复制代码
解释: 不用解释了吧、、
那么原显示图片的脚本就可以变成
ms :devil, "Graphics/Battlers/075-Devil01"
center(@devil)
devil.x,devil.y = 240,320
复制代码
还是不废话了吧..
目前我们有两个关于【封装】的结论:
【功能1】省字数
【功能2】让别人看不懂你的脚本
接下来才是【正文】:
我们已经知道如果定义一个方法
def method(参数1, 参数2, 参数3, *参数卍) # xp中最后一个参数可能会被报错
复制代码
可以传递n个参数进去,就像draw_text(x,y,w,h,t,d)一共可以传递6个参数
那么,如果把许多方法丢到一个方法里面,再在外面传递所有的参数,这么一看果然我们只需要参数就可以了嘛
def dt(s, t, x, y) # 跟一行代码过不去系列
s.bitmap.draw_text(x,y,s.bitmap.text_size(t).width,s.bitmap.font.size+2,t)
end
复制代码
这是一个在s(sprite)的x,y位置描画t(text)的方法(未居中)
你们一定注意到h(高)位置的参数居然+2了,这是为什么呢(快给我去想啊魂淡
def dtx(s,t_ary,x,y) # 跟一行代码过不去系列*2
t_ary.each_with_index{|t,i| dt(s, t, x, y+i*(s.bitmap.font.size+2)) }
end
复制代码
这是调用了dt方法,一次描绘多行文本(但是全部左对齐)的方法(t_ary是一个数组,它可以是["哈哈", "嘿嘿", "来咬我呀"]的样子)
下面我们运行一下试试
Graphics.freeze
ms :s, 640,480
20.times{
dtx(@s, [rand(120).chr,rand(120).chr,rand(120).chr], rand(640), rand(480))
}
Graphics.transition
复制代码
# chr = 取对应字符
QQ图片20140406150535.jpg
(67.94 KB, 下载次数: 19)
下载附件
保存到相册
2014-4-6 15:07 上传
然后屏幕上就粗线了一堆乱码 = =||||
嘛,,封装就是这么回事了,
小盆友们学会了吗
【预告】其实,,Taiko稍微改一下就是Mania了啊!(看不懂请无视
作者:
taroxd
时间:
2014-4-6 16:59
本帖最后由 taroxd 于 2014-4-6 17:13 编辑
Taiko啥的和我有关系么……?
还有,封装真的是这个意思么??我感觉只是定义了一些很普通的方法啊。封装难道不是利用Ruby对象来调用其他东西吗?(比如win32api之类,比如晴兰大大写过很触的脚本之类,Sion大大写的很触的dll之类的)
普通的方法不就是“将很多参数扔进去,然后调用一连串其他方法”吗?和封装有什么关系?
私以为楼主的省字数和让别人看不懂的功能只有在Game_Interpreter才会用到呢~
作者:
无脑之人
时间:
2014-4-7 17:08
封装的目的一个是隐藏实现细节,减少修改时改动的代码量,增强可移植性,另一个便是使用方便,逻辑清晰,可读性强w
对于ruby来说可能大多都在利用第二条,第一条却往往被人忽略w
VA的默认脚本在某种意义上是利用第一条,但是封装的太过火以至于降低了可读性和执行效率w
作者:
satgo1546
时间:
2014-4-7 18:47
LZ是个OSU!党鉴定完毕
正文:
我更喜欢直接写进Sprite的class……
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1