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

Project1

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

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

  [复制链接]

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

81
发表于 2013-2-13 20:35:00 | 只看该作者
本帖最后由 忧雪の伤 于 2013-2-13 20:53 编辑

UI> 我沒時間全部看完所以隨便指出一點應該是錯誤的地方。
Ruby 的常量指的是以大寫字母開始的標識符。而不是整數之流。
常量是可以賦值的。例如 Foo = 0 。
Fixnum、Symbol 和 nil/true/false 的名稱是「立即值」。
而且,在if语句中,“==true”是可以省略的

這顯然是錯的。if 只不過是右邊不為 nil/false 。
用一個例子來說明就是。
  1. foo = 0
  2. msgbox true if foo == true
复制代码
大括号内的东西是个变量,按照变量输出。

這顯然是錯的。大括號不過是把其中的值 to_s 。這不一定是變量。
Foo = 0
msgbox "#{Foo}"
msgbox "#{0}"
告诉RGSS3这货是个数组而不是变量

數組和變量完全沒有直接關係。數組是對象。變量是標識符。
这里用了def self.add_one_cloud来定义方法——self.是必须的,否则会导致各种奇怪的事情发生= =

實例方法和特殊方法的差別……可以參考這個帖子上文中函數的部份。

评分

参与人数 3星屑 +57 梦石 +1 收起 理由
Mic_洛洛 + 1 更新奖励!!
harinlen + 45 香火钱
任F + 12 尾随卖个萌(#--)/ .

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1258
在线时间
409 小时
注册时间
2012-8-7
帖子
1536
82
 楼主| 发表于 2013-2-13 22:50:06 | 只看该作者
嘛……出来改改墓志铭什么的。

评分

参与人数 1星屑 +100 收起 理由
R-零 + 100 路过塞糖

查看全部评分



回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

83
发表于 2013-2-14 11:18:15 | 只看该作者
本帖最后由 忧雪の伤 于 2013-2-17 12:23 编辑

塊 - Block

前言
Ruby 中被 { } 括起來的就是塊 —— 這當然不包括 Hash
也許你會感到陌生,但實際上塊廣泛出現在你的視野,以一種隱性的形式。
這指的是 for .. in
實際上這個控制結構就是調用了 each 方法。
用一個例子來說明就是。
  1. for i in Object.new
  2. end
复制代码
會報 NoMethodError
那麼什麽是 each 方法呢。它涉及到 Ruby 中迭代的觀念。實際上迭代就是調用帶塊的方法。
那麼什麽是塊呢。它是一個代碼段。注意它並不會直接處理。而是要你提醒程序去處理塊。
上文的 for .. in,對於一個數組來說,實際上可以看做 [].each {|i| }
處理時會用這個數組的每一個元素傳遞到 i 中,並且處理所帶塊中的代碼段。
例如。
  1. [0, 1, 2].each {|i| msgbox i }
复制代码
在一般情況下,這可以和 for .. in 互換,雖然它們是有差別的,但我不會在這裡提到。
那麼我們將如何使用塊呢?
過程對象 - Proc
我們並不能直接獲取到 Block 。這裡介紹把 Block 對象化的 Proc 。這就可以直接獲取到一個 Block 了。
生成一個 Proc 有兩種方法。
一個是內部函數 proc 。用法就是。
  1. block = proc { msgbox "hi~" }
复制代码
這個方法會把所帶塊對象化并返回對應的對象。
一個是 Proc.new 。依然是 block = Proc.new {},不談。
那麼如何處理這個 Block 呢?Proc 也給出了兩種方法。
一個是 Proc#call(arg1, arg2, ...) (# 表示一個類的實例方法)
一個是 Proc#[arg1, arg2, ...] ,這個是爲了保持和方法的某種形式上的一致,不談。
於是有一個問題。爲什麽會有 arg,也就是參數呢。
實際上塊是可以帶參數的,這在 each 里就能看出來。它是用「||」包含。沒有數量上的限制。
怎麼用?例如。
  1. block = proc {|a, b, c| msgbox a + b + c }
  2. block.call 1, 2, 3
复制代码
似乎和方法有異曲同工之妙~它們的區別在於方法有被調對象而塊沒有,你可以當做無名函數使用。
那麼如何在方法中調用塊?也就是迭代?
調用塊的方法 - 迭代
這裡將會介紹 yield、以及直接用參數表示。
首先需要說明的是,直接讓一個方法帶塊並不會出現異常。
例如。
  1. def foo
  2. end
  3. foo {}
复制代码
那麼我們要如何調用呢。
  1. def foo &block
  2.   block.call
  3. end
  4. foo { p "w" }
复制代码
& 作為前綴的參數會接受方法所帶的塊的對象化對象也就是 Proc
此外也可以。
  1. def foo
  2.   yield 0, 1
  3. end
  4. foo {|a, b| p a, b }
复制代码
這裡也直接把如何用 yield 時也用塊的參數說明了。
結言
Block 用於打家劫舍。這是一個老梗。說明 Block 是多麼有趣。實際使用還得你自己來發掘。(我在另外一文中提到了可以用於傳遞事件變量。)那麼就沒了哦。也許你可能會看的一頭霧水。但這也很正常。這完全是脫離了 RGSS 的講學。這實際上並不怎麼符合學習者的需求。所以如果看的不大明白的話可以等以後再來看的。
(說來其實 do ... end 也行嘛。我就在這裡不提了。)

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

Assassin-K

梦石
0
星屑
3613
在线时间
2281 小时
注册时间
2012-5-23
帖子
4065

贵宾

84
发表于 2013-2-14 23:55:58 | 只看该作者
本帖最后由 Mic_洛洛 于 2013-2-15 11:39 编辑

首先,洛子要跟大家说声十分抱歉
由于洛子平日很忙,所以这个之前说好的汇编整理成规范教材的事未能兑现。
刚刚重看了一遍,发现教程比较乱,各部分都有,中间还夹杂着提问或灌水的回复
虽然HAR君有做楼层链接,但有必要再整理。

当然,这个洛子会找时间去实现。而这次回复最重要的是告诉大家:
此贴没坑!!!

然后,带给大家——
前天在某人签名档链接出挖出的这个东西:
【VA】F1帮助文档(汉化版)
相信这对于想学习脚本的童鞋应该会有所帮助的说!

于是乎,洛子果断放出来了!
最后,还请脚本党的各位在本帖多多更新啦!(洛子还是会给更新的朋友发卡塞糖的说^^

PS:同时,洛子希望大家不要在本帖回复非脚本教程的内容,
如有问题可以自行【发消息】给相应教程的作者或在本区发提问帖。
如有吐槽可以使用【点评】功能,谢谢合作。
此帮助文档汉化者可以PM洛子受赏,如有修正更新版本,还请务必通知洛子的说。

点评

总算找到这个东西了!  发表于 2013-7-28 13:55
里面没有了入门这项  发表于 2013-3-21 09:36
学习ing……  发表于 2013-2-16 15:26
虽然里面有中文,但是我发现英文也有……………………  发表于 2013-2-15 17:30
终于出现了。。。。VA汉化Helper  发表于 2013-2-15 12:06

评分

参与人数 2星屑 +15 收起 理由
smile-zt + 5 还以为坑了就没再来了..
satgo1546 + 10 原来没坑

查看全部评分


◆ROZONE◆
>洛子又要去流浪地球了……
>如果你看到我在线,又没动静,那只能说明我在挂机……
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

85
发表于 2013-2-15 11:40:05 | 只看该作者
本帖最后由 忧雪の伤 于 2013-2-15 11:50 编辑

@司马睿风
如果在你P的内容中包含一个变量,那么在" "号中,P的结果会返回你的变量的数值,而' '号则返回p的具体的字符内容。

UI> Ruby 1.9.3 實測結果無效。不知道是不是版本問題。(實際上你這種說法我聞所未聞。
p crr.2

UI> 請問 .2 什麽高級語法?
不需要重新来个 integer。

UI> 為啥是 integer ……
我这里存入了数字,英文,字符串等类型(当然,ruby中是不需要定义数据类型的,随意存储)。

UI> 英文也是數據類型!(233)還有您的數組的字符串都沒加引號哦。
@satgo1546
UI> 關於模塊那裡的,自己看代碼。
  1. class Foo
  2.   def self.foo
  3.   end
  4. end
  5. Foo.foo
复制代码

点评

又见神一样的def= =  发表于 2013-2-15 23:38

评分

参与人数 2星屑 +45 梦石 +1 收起 理由
harinlen + 45 精品文章
Mic_洛洛 + 1 感谢抓虫!

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2013-2-1
帖子
108
86
发表于 2013-2-15 17:22:06 | 只看该作者
本帖最后由 神秘来客3 于 2013-3-8 21:15 编辑

事件中的呼出脚本
一定见过在事件中呼出的脚本吧,如何弄出事件呼出脚本呢?
这么写:
  1. def xx  #这里命名这个事件呼出脚本。xx=任意(没错,汉字也行)
  2. 内容 #这里写内容
  3. end
复制代码
然后再事件中写“脚本:xx”→xx就是你刚刚的命名
另外这个脚本有错误不会立刻报错,呼出的时候发现错误才会报错(- -多么麻烦)

点评

你不是看教程的吗?!!什么时候写教程了!!?  发表于 2013-4-15 16:33
现在晚了,明天我更新下。  发表于 2013-2-15 22:24
不删 就行……  发表于 2013-2-15 21:45
这倒不算,但是这样的排版和内容你叫洛子怎么给你的教程加分呐?(= =||)  发表于 2013-2-15 18:36
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
48
在线时间
841 小时
注册时间
2010-8-11
帖子
1135
87
发表于 2013-2-15 23:37:07 | 只看该作者
本帖最后由 945127391 于 2013-2-18 12:45 编辑

呐,我们都知道VA的事件变量已经是很强大的了(其实最强大的是有一个“脚本”= =)
比如说,事件变量能够代入角色或队员的各种数值。
但是这个用脚本要怎么表示呢?
现在我就来简要地说一说:
首先,下文中的actor,可以有两种情况:
  1. $game_actors[n]
复制代码
  1. $game_party.members[n]
复制代码
前面一种是用来表示n号角色的,后面一种是用来表示队伍中第n位队员的;
当然,只有这些还不够,请看下面:
名字
对应的变量
等级
actor.level
经验值
actor.exp
HP(体力值)
actor.hp
MP(魔力值)
actor.mp
体力值上限
actor.mhp
魔力值上限
actor.mmp
物理攻击力
actor.atk
物理防御力
actor.def
魔法攻击力
actor.mat
魔法防御力
actor.mdf
敏捷值
actor.agi
幸运值
actor.luk

举例
  1. $game_actors[0].mhp # 一号角色的最大HP
  2. $game_party.members[0].level # 队伍中第一个角色(领队)的等级
复制代码
补充
关于敌人(不能获得LV):
队伍中的敌人(战斗事件专用):把actor替换成:
  1. $game_troop.members[位置]
复制代码
数据库中的敌人(不可以获得HP和MP):把actor替换成:
  1. $data_enemies[敌人ID]
复制代码
以上未经测试。

点评

木,新手党用这种小脚本的话,不需要考虑他是啥变量类型  发表于 2013-4-29 15:51
嗯。。补充一下:你没说 $ 后面的是全局变量(好像没看到前面有说啊)  发表于 2013-4-13 18:43
素哒  发表于 2013-2-18 12:46
level也获得不了吧。。。  发表于 2013-2-18 10:17
那么如何代入金钱、步数等?  发表于 2013-2-16 12:41
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2013-2-1
帖子
108
88
发表于 2013-2-16 16:26:07 | 只看该作者
= =
突然发现一个重大的问题:
你们在那讲了那么多却忽视了最简单的问题:
货币怎么转换成脚本????还有步数啥的!!!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
48
在线时间
841 小时
注册时间
2010-8-11
帖子
1135
89
发表于 2013-2-16 17:28:55 | 只看该作者
本帖最后由 945127391 于 2013-2-16 20:56 编辑
神秘来客3 发表于 2013-2-16 16:26
= =
突然发现一个重大的问题:
你们在那讲了那么多却忽视了最简单的问题:

很简单不是么……
名字
对应的变量
变量
$game_variables[变量ID]
随机数
rand(n)
这个有点复杂,详细请看F1
物品持有数
$game_party.item_number($data_items[物品ID])
武器持有数
$game_party.item_number($data_weapons[武器ID])
防具持有数
$game_party.item_number($data_armors[防具ID])
金钱
$game_party.gold
步数
$game_party.steps
玩家X坐标
$game_player.x
玩家Y坐标
$game_player.y
玩家朝向
$game_player.direction
玩家屏幕X坐标
$game_player.screen_x
玩家屏幕Y坐标
$game_player.screen_y
地图ID
$game_map.map_id
队伍人数
$game_party.members.size
游戏时间
Graphics.frame_count / Graphics.frame_rate
计时器
$game_timer.sec
(其实我也不知道这是啥)
战斗次数
$game_system.battle_count
存档次数
$game_system.save_count
队员ID
$game_party.members[队员位置].id
这一些前面就不需要加些什么了,直接用就得了。

点评

更新了。  发表于 2013-2-17 22:54
突然想起来代表敌人生命值之类的的你还没讲呢  发表于 2013-2-17 22:30
相对那些可以直接用的已经很复杂了 = =  发表于 2013-2-17 15:51
话说我不觉得随机数复杂  发表于 2013-2-17 15:50
手贱打错……  发表于 2013-2-16 21:02

评分

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

查看全部评分

回复 支持 1 反对 0

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

90
发表于 2013-2-17 15:57:57 | 只看该作者
本帖最后由 忧雪の伤 于 2013-2-17 16:02 编辑


常量、變量補充

- 常量部份 -

常量不能在方法中定義。但實際上在前者以外的情況可以再賦值,如果使用 irb 的話你會看到 warning
常量也有自己的作用域。這和全局變量不同。
例如。
  1. Foo = Class.new
  2. msgbox Foo
  3. class Foo
  4.   Bar = 0
  5. end
  6. p Bar # => NameError
复制代码
常量的作用域是以當前作用域作為起始,一直適用所有往下的作用域。
若想在外部访问类或模块中的常数时,要使用「::」操作符。
例如。
  1. class Foo
  2.   Bar = 0
  3. end
  4. msgbox Foo::Bar
复制代码
實際上這也可以直接賦值一個類裏的常量。
  1. Foo = Class.new
  2. Foo::Bar = 0
  3. msgbox Foo::Bar
复制代码

- 變量部份 -

實例方法中定義的實例變量只在那個類的實例適用。而且每個實例的實例變量不會互相影響。不要天真的以為它們是共享的。
  1. class Foo
  2.   def foo
  3.     @foo = 0
  4.   end
  5. end
  6. Foo.new.foo
  7. msgbox Foo.instance_variable_get :@foo # => nil
复制代码
從另外一個角度來看就是。
  1. class Foo
  2.   @foo = 0
  3.   def foo
  4.     msgbox @foo
  5.   end
  6. end
  7. Foo.new.foo # => nil
复制代码
在這裡順便介紹兩個在外部操作對象的實例變量的方法。
- Object#instance_variable_get(name)  
引用實例變量。
name 就是實例變量的名字,可以為 Symbol 或者 String,例如 :@foo 。(注意別忘記 @
- Object#set_instance_variable(name, value)  
定義實例變量。
name 同上。value 就是值。
Ruby 方便我們讀寫實例中的實例變量,為我們提供了 attr 系列方法。這在 F1 中有提到,所以就不列出來了。
實際上我們可以用上面給出的兩種方法試著復原同樣的效果。自己去試試吧~

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-4 02:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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