赞 | 3 |
VIP | 1 |
好人卡 | 40 |
积分 | 1 |
经验 | 93188 |
最后登录 | 2020-7-27 |
在线时间 | 1379 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 76
- 在线时间
- 1379 小时
- 注册时间
- 2012-7-5
- 帖子
- 1698
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 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 = 取对应字符
然后屏幕上就粗线了一堆乱码 = =||||
嘛,,封装就是这么回事了,
小盆友们学会了吗
【预告】其实,,Taiko稍微改一下就是Mania了啊!(看不懂请无视 |
|