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

Project1

 找回密码
 注册会员
搜索
楼主: harinlen
打印 上一主题 下一主题

[版务] 【活动】【VA】RGSS 3 入门教程大家写(更新13/02/15)

  [复制链接]

Lv1.梦旅人

哆啦菌

梦石
0
星屑
46
在线时间
795 小时
注册时间
2010-7-24
帖子
3800
51
发表于 2012-10-16 20:02:49 手机端发表。 | 只看该作者
铅笔描绘的思念 发表于 2012-10-15 21:26
吾辈最近无聊至极。。。。有机会碰电脑就来写教程好了。。。预定一下类和模块的教程。。。


函数  这里 ...

脚本渣表示虚拟变量也是占空间的。。。
随便看看
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1309
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

52
发表于 2012-10-16 21:59:56 | 只看该作者

说好的上的话就更。。。。话说洛洛的经验-1真的难以吐槽。。。。喵的。。。咱以后得想H酱扯到54一样扯到你么。。。。



  PS:话说一个字的标题就是看着不爽啊。。。。
  一、类的定义、类的实例方法
  1. class Person
  2.   def say
  3.     msgbox “Hello!”
  4.   end
  5. end
  6. luoluo = Person.new
  7. luoluo.say
复制代码

我们看到va默认脚本中(除了Vocab之类的)都有class XXXX之类的。。。而这个class就是声明类的关键字def就是创建了一个方法。。。下面的
  1. luoluo = Person.new
复制代码
就是把Person类给实例化了。。则luoluo(洛洛)就是实例化的对象了。。。。 = = ||(为了1经验还是要报仇的。。)然后是
  1. luoluo.say
复制代码

就是调用了luoluo这个实例对象的实例方法。。。(话说这段真的是有多讨打啊。。。)
定义一个类的语法
class ClassName
  def method_name(variables)
    #some code
  end
  end

二、特定对象的方法
VA里,我们可以为一个对象单独定义方法。。。比如
  1. class Person
  2.   def say
  3.     msgbox “Hello!”
  4.   end
  5. end
  6. luoluo = Person.new
  7. def luoluo.bye
  8. msgbox "bye"
  9. end
  10. luoluo.say #Hello!
  11. luoluo.bye #bye
复制代码
三、重定义方法    方法的重定义一模一样。。后面的定义会覆盖前面的定义。。不讲了。。。
   众:你太懒了!!
四、重新打开类
  Ruby里我们可以再打开一个类,向这类添加方法。。。我们一般不要拆开类的定义,因为那样不好理解,拆开类的一个原因是将它们分散到多个文件里。。
比如
  1. class Person
  2.   def say
  3.     msgbox “Hello!”
  4.   end
  5. end
  6. class Person
  7.   def bye
  8.     msgbox “bye”
  9.   end
  10. end
  11. luoluo = Person.new
  12. luoluo.say #Hello!
  13. luoluo.bye #bye
复制代码
。。稍微有点多。。。。。五、实例变量
好了。。下面都是是重点了。。。。。
实例变量主要是用来记录单个对象的状态。RM实例变量有以下特点
  • 以@开头
  • 只对单个对象可见
  • 不管在类的任何地方定义,在别的地方使用都是同一个
   
  1. class Person
  2. def name
  3.   @name = “54酱”
  4. end
  5. def say
  6.   msgbox “#{@name}无节操”
  7. end
  8. end
  9. person = Person.new
  10. person.name
  11. person.say#54酱无节操
复制代码


六、初始化对象状态
每当实例化一个新对象是,就会寻找initialize方法,然后执行该方法。。。。我们可以用initialize方法将预设值加入所有实例变数。。就不需要在其他地方定义再使用了。。
  1. class Person
  2.   def initialize(name, age)
  3.     @name = name
  4.     @age = age
  5.   end
  6.   def age
  7.    @age
  8.   end
  9.   def name
  10.     @name
  11. end
  12. end
  13. luoluo = Person.new("洛洛", 20)
  14. msgbox luoluo.age #20
  15. msgbox luoluo.name #洛洛
复制代码

当然我们可以不需要给initialize方法参数直接执行一些语句也是可以的。。。
。。。喵的。。。给跪了。。。好多啊。。。。3000+了。。。。。读写属性之类的好多啊还有。。。。。。。。。。。。。明天补完好了。。。趴了。。

评分

参与人数 3星屑 +22 梦石 +2 收起 理由
574656549 + 20 end未对应诺|、.、|
Mic_洛洛 + 2 更新奖励!
satgo1546 + 2 1经验我不是补回来了= =

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
311 小时
注册时间
2011-3-4
帖子
238
53
发表于 2012-10-18 12:19:57 | 只看该作者
本帖最后由 candy2266 于 2012-10-18 12:21 编辑

实例变量


引用楼上的话:
好了。。下面都是是重点了。。。。。
实例变量主要是用来记录单个对象的状态。
RM实例变量有以下特点:
•以@开头
•只对单个对象可见
•不管在类的任何地方定义,在别的地方使用都是同一个


注意第2条,第2条的意思可以引申为,在别的对象外,若要访问实例变量的话,必需要通过方法访问。

RUBY 代码复制
  1. class Person
  2.     @name="xx君"
  3. end


如果只是在上例子的对象里“参考”@name,这样定义就可以了。
但是如果想从对象外访问它的话,那么就不可以了。
在类下直接定义一个@的实例变量,个人感觉类似于JAVA中的private修饰符,必需用方法访问。

所以若要在外部访问到@name,代码应如下
RUBY 代码复制
  1. class Preson
  2. #下面是从实例中取得@name值的方法
  3.   def name
  4.     @name
  5.   end
  6.  
  7. #下面是给name赋值的方法
  8.   def name=(value)
  9.      @name=value
  10.   end


当然真的直接写在类里变量,我们用的是类变量,这样就可以在外部直接访问到它的值了。
RUBY 代码复制
  1. class Person
  2.     @@name="xx君"  #类变量首字母以@@开头
  3. end





评分

参与人数 1梦石 +2 收起 理由
Mic_洛洛 + 2 更新奖励!

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
550
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
54
发表于 2012-10-18 13:02:58 | 只看该作者
循环】之类的东西还是只能我来补完么……
循环[续]
上次讲到while循环,那么现在继续……
loop do ~ end
RGSS3中loop do ~ end结构是死循环结构。(说得真直接= =)【例子】
  1. loop do
  2.   msgbox "循环"
  3. end
复制代码
上面的程序会没完没了地弹出“循环”两字。
如果你输入了这个代码并且运行了……那么解决方法是按住F12再点右上角的叉叉!
这类目前没用的东西就不多讲了,讲了也是摧残电脑。
循环中的break
为什么刚才要说目前没用呢——学完了break程序结构之后那个死循环就有用啦~
break这个程序结构只能在循环中使用(可以在for、while、loop do等任何循环结构中使用),用途是中断循环
这样loop do就可以显出它的用途了。
【例子】
  1. i = 0 # 伪·循环变量的初值
  2. loop do
  3.   i += 1
  4.   msgbox i
  5.   break if i >= 10 # if语句的修饰子应用,不知道的请看【控制结构】一节
复制代码
上面这个例子输出结果是1、2、3、4、5、6、7、8、9、10。
跳过本次循环(进入下一次循环)
这里用到了next程序结构,意思是跳过本次循环,进入下一次循环
【例子】
  1. for i in 1..5
  2.   next if i == 3 # 当i=3的时候跳过这次循环
  3.   msgbox i
  4. end
复制代码
这个程序结构在实际编写中用得不多。

循环什么的到此结束了,如果脑子里一片浆糊请点评= =

评分

参与人数 1梦石 +2 收起 理由
Mic_洛洛 + 2 更新奖励!

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
125
在线时间
0 小时
注册时间
2012-10-24
帖子
1
55
发表于 2012-10-24 12:12:42 | 只看该作者
先顶再看
回复 支持 反对

使用道具 举报

Lv3.寻梦者

虚空人形

梦石
0
星屑
4517
在线时间
2037 小时
注册时间
2011-8-11
帖子
3398

贵宾

56
发表于 2012-10-25 13:40:26 | 只看该作者
本帖最后由 hcm 于 2012-10-25 13:47 编辑

【新手菜单】第五章 给半身像和一些信息加框分类排版
【新手菜单】美化第4章是到这个程度:

所有人都在同一个框中的,现在准备向下图的效果再靠拢一些:

首先,找到Window_Base●的
  1.   #--------------------------------------------------------------------------
  2.   # ● 绘制角色半身肖像图
  3.   #     enabled : 有效的标志。false 的时候使用半透明效果绘制
  4.   #--------------------------------------------------------------------------
复制代码
的部分,修改为【这样半身像的规格就变成了(4 * 152)*(2 * 285),此规格为640*480的分辨率4人战斗队伍定,分辨率作战人数不同可按比例缩放素材】
  1.   def draw_HalfBody(face_name, face_index, x, y, enabled = true)
  2.     bitmap = Cache.HalfBody(face_name)
  3.     rect = Rect.new(face_index % 4 * 152, face_index / 4 * 285, 152, 285)#此处285为半身像高,152为宽,想加还可以加长
  4.     contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  5.     bitmap.dispose
  6.   end
复制代码
为了方便加框,接下来脚本就不要动了,
然后用PS把半身像素材也做成(4 * 152)*(2 * 285)的,自己找一些满意的边框素材直接给图片放上,
然后找到Window_MenuStatus●的
  1.   #--------------------------------------------------------------------------
  2.   # ● 绘制项目
  3.   #--------------------------------------------------------------------------
  4.   def draw_item(index)
  5.     actor = $game_party.members[index]
  6.     enabled = $game_party.battle_members.include?(actor)
  7.     rect = item_rect(index)
  8.     draw_item_background(index)
  9.     draw_actor_HalfBody(actor, rect.x, rect.y, enabled)
  10.     draw_actor_name(actor,rect.x, rect.y+196)
  11.     draw_actor_class(actor,rect.x, rect.y+196+line_height*1)#rect.y-206-line_height*1,)
  12.     draw_actor_icons(actor,rect.x,rect.y+196+line_height*2)
  13.     draw_actor_level(actor,rect.x, rect.y+196+line_height*2)
  14.     draw_actor_hp(actor,rect.x, rect.y+196+line_height*3)
  15.     #draw_actor_mp(actor,rect.x,rect.y+196+line_height*5)
  16.     #draw_actor_tp(actor,rect.x,rect.y+196+line_height*6)
  17.   end
复制代码
按自制图片外框的规格把各信息的坐标调好即可,
虽然像第四讲的直接用菜单背景图片也可以,但那样即使只有一个角色也会显示全部分隔框,不想显示多余的可以参考这方法。

现在的效果.jpg (130.39 KB, 下载次数: 21)

比原来好多了吧

比原来好多了吧

评分

参与人数 1星屑 +200 梦石 +2 收起 理由
Mic_洛洛 + 200 + 2 更新奖励!

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
550
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
57
发表于 2012-10-25 18:26:54 | 只看该作者
突然……突然发现我们其实在汉化F1……
回复 支持 反对

使用道具 举报

Lv3.寻梦者

虚空人形

梦石
0
星屑
4517
在线时间
2037 小时
注册时间
2011-8-11
帖子
3398

贵宾

58
发表于 2012-10-26 12:48:50 | 只看该作者
本帖最后由 hcm 于 2012-10-26 12:55 编辑

对角色的【状态】说明的美化:
【新手菜单】美化第四章中,讲过半身像如何放到菜单人物状态那里,
这次在此脚本基础上讲一下如何美化每个角色单独的状态说明,像这样有个人物全身特写的


但是这样我就不建议在菜单中使用半身像了,使用修改到如下程度菜单作为基础修改(只是因为《萝莉的远征》在菜单中使用的是头像),


但是,脚本不能少,我指的是要把半身像菜单还原回头像菜单,因为之后修改角色独立的状态栏肯定要用到。
修改回的话就把
  1.   #--------------------------------------------------------------------------
  2.   # ● 绘制项目
  3.   #--------------------------------------------------------------------------
  4.   def draw_item(index)
  5.     actor = $game_party.members[index]
  6.     enabled = $game_party.battle_members.include?(actor)
  7.     rect = item_rect(index)
  8.     draw_item_background(index)
  9.     draw_actor_HalfBody(actor, rect.x+1, rect.y, enabled)
复制代码
中的HalfBody改回face即可。(其实这步不做也行,但【状态】比Exc菜单的人物形象大会好看一些吧)

相应的,找到Window_Status中的
  1.   #--------------------------------------------------------------------------
  2.   # ● 绘制区域 2
  3.   #--------------------------------------------------------------------------
  4.   def draw_block2(y)
  5.     draw_actor_face
复制代码
把face改为HalfBody,
然后在每个draw_XXXXX后面的括号内把不同信息的坐标调整好即可。

评分

参与人数 1梦石 +2 收起 理由
Mic_洛洛 + 2 精品文章!

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
91 小时
注册时间
2012-3-3
帖子
65
59
发表于 2012-10-26 15:25:20 | 只看该作者
稀饭大婶们教脚本,这次好好学RGSS3,接触了5年RM都没有认真研究过脚本……{:2_271:}
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
550
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
60
发表于 2012-10-26 19:27:57 | 只看该作者
嗯……函数表示被某铅笔吃了。。对象貌似也被吃了。。数组吃了,哈希表——{:2_270:}找到一个很好的东西可以讲……
表示上面用兔子是特例,我一般还是用猫的

哈希表
「对数组的扩充」
其实哈希表本来就是变异的数组(当然不涉及DNA之类的)……
之前说过,数组的调用方式是a[x],其中a是数组名,x是下标(0~数组元素个数-1)。而哈希表的调用方式就是hash[key],其中hash相当于刚才的a,key——在数组里面是数字,而在哈希表中可以是任何东西——前提是你先添加一个元素,下标是这个东西。
【例子】
  1. a = [66,77,88] # 论坛三宠物……好吧我多余了
  2. b = {"六六" => 66,"七七" => 77,"八八" => 88} # 论坛宠物的哈希表
  3. # 注意哈希表是大括号声明的
  4. msgbox a[0],a[1],a[2]
  5. msgbox b["六六"],b["七七"],b["八八"]
  6. # 调用时都用中括号
复制代码
两次弹出的内容是一样的。
由此可见,当需要使数组元素的“名字”更为直观的时候,可以使用哈希表,除此之外哈希表与数组没有任何区别!
哈希表常用方法(确认方法已经被吃了)
在哈希表中可以用一些方法来判断某元素是否存在于哈希表中。
【例子】
  1. hash = {"one" => "!","two" => "@","three" => "#"}
  2. msgbox hash.include?("one") # => true
  3. msgbox hash.include?("four") # => false
复制代码
include?传递的参数是下标。不用解释了吧。一些注意点
哈希表是没有顺序的。

本节到此结束。(好短大概是因为数组讲过了

点评

哈希表?记得某人的装备强化脚本也写什么“强化哈希表”?  发表于 2013-2-13 22:23

评分

参与人数 1梦石 +2 收起 理由
Mic_洛洛 + 2 更新奖励,内容要丰富一点就更好了~.

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-24 10:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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