设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1778|回复: 3
打印 上一主题 下一主题

[RMXP发布] 【伪教程·封装】果然我们只需要参数就可以了

[复制链接]

Lv1.梦旅人

梦石
0
星屑
76
在线时间
1379 小时
注册时间
2012-7-5
帖子
1698

开拓者

跳转到指定楼层
1
发表于 2014-4-6 15:10:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 kuerlulu 于 2014-4-6 16:20 编辑

【话唠】当高中僧真是太苦逼了网都没得上(那你是怎么发这个帖子的(不要在意细节
              排版什么的在下不是很擅长啊

那么【正题】
写这个伪教程其实是以前有人在水区发过关于"封装"的脚本和一些说明(顺便在下也发个帖刷存在感(喂
在讲什么是封装之前,让我们看一段简单的脚本,为了让示范更实用,在下就从F1-脚本入门-显示图片的脚本开始
  1.   def ms(sym, *args) # 方法名我乱取的
  2.     eval("@#{sym} = Sprite.new; @#{sym}.bitmap = Bitmap.new(*args)")
  3.   end
复制代码
解释: 作成一个装有Bitmap的Sprite。
         比如在下面写一句  ms :a, "pic_path"  就会生成名叫@a的Sprite对象并载入"pic_path"的Bitmap,这里的"pic_path"也可以换成640,480 (因为是传入Bitmap.new方法的)
插嘴: 看出什么了吗
  1.   def center(sprite)
  2.     raise "不是一个Sprite对象啦" if sprite.class != Sprite
  3.     sprite.ox = sprite.bitmap.width / 2; sprite.oy = sprite.bitmap.height / 2
  4.   end
复制代码
解释: 不用解释了吧、、
那么原显示图片的脚本就可以变成
  1. ms :devil, "Graphics/Battlers/075-Devil01"
  2. center(@devil)
  3. devil.x,devil.y = 240,320
复制代码
还是不废话了吧..
目前我们有两个关于【封装】的结论:
【功能1】省字数
【功能2】让别人看不懂你的脚本
接下来才是【正文】:
我们已经知道如果定义一个方法
  1. def method(参数1, 参数2, 参数3, *参数卍) # xp中最后一个参数可能会被报错
复制代码
可以传递n个参数进去,就像draw_text(x,y,w,h,t,d)一共可以传递6个参数
那么,如果把许多方法丢到一个方法里面,再在外面传递所有的参数,这么一看果然我们只需要参数就可以了嘛
  1.   def dt(s, t, x, y) # 跟一行代码过不去系列
  2.     s.bitmap.draw_text(x,y,s.bitmap.text_size(t).width,s.bitmap.font.size+2,t)
  3.   end
复制代码
这是一个在s(sprite)的x,y位置描画t(text)的方法(未居中)
你们一定注意到h(高)位置的参数居然+2了,这是为什么呢(快给我去想啊魂淡

  1.   def dtx(s,t_ary,x,y) # 跟一行代码过不去系列*2
  2.     t_ary.each_with_index{|t,i| dt(s, t, x, y+i*(s.bitmap.font.size+2)) }
  3.   end
复制代码
这是调用了dt方法,一次描绘多行文本(但是全部左对齐)的方法(t_ary是一个数组,它可以是["哈哈", "嘿嘿", "来咬我呀"]的样子)

下面我们运行一下试试
  1.   Graphics.freeze
  2.   ms :s, 640,480
  3.   20.times{
  4.     dtx(@s, [rand(120).chr,rand(120).chr,rand(120).chr], rand(640), rand(480))
  5.   }
  6.   Graphics.transition
复制代码
# chr = 取对应字符

然后屏幕上就粗线了一堆乱码 = =||||
嘛,,封装就是这么回事了,

小盆友们学会了吗

【预告】其实,,Taiko稍微改一下就是Mania了啊!(看不懂请无视

点评

这背景配上各种四处飞舞的乱码意外的好带感  发表于 2014-4-11 17:28

  -fk: -azogi:

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2014-4-6 16:59:41 | 只看该作者
本帖最后由 taroxd 于 2014-4-6 17:13 编辑

Taiko啥的和我有关系么……?

还有,封装真的是这个意思么??我感觉只是定义了一些很普通的方法啊。封装难道不是利用Ruby对象来调用其他东西吗?(比如win32api之类,比如晴兰大大写过很触的脚本之类,Sion大大写的很触的dll之类的)

普通的方法不就是“将很多参数扔进去,然后调用一连串其他方法”吗?和封装有什么关系?

私以为楼主的省字数和让别人看不懂的功能只有在Game_Interpreter才会用到呢~
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
117
在线时间
552 小时
注册时间
2012-8-18
帖子
1429
3
发表于 2014-4-7 17:08:47 | 只看该作者
封装的目的一个是隐藏实现细节,减少修改时改动的代码量,增强可移植性,另一个便是使用方便,逻辑清晰,可读性强w
对于ruby来说可能大多都在利用第二条,第一条却往往被人忽略w
VA的默认脚本在某种意义上是利用第一条,但是封装的太过火以至于降低了可读性和执行效率w
我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
4
发表于 2014-4-7 18:47:16 | 只看该作者
LZ是个OSU!党鉴定完毕

正文:
我更喜欢直接写进Sprite的class……

点评

+1  发表于 2014-4-7 18:48
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-15 07:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表