Project1
标题: 画面及视窗设计基础教学--第一章 [打印本页]
作者: TERENCE 时间: 2008-11-22 07:09
标题: 画面及视窗设计基础教学--第一章
画面及视窗设计基础教学
IN-Depth Scenes&Windows
Chapter 1
Making a Window
视窗製作
前言:
本教程本不属於我自己所写的,而是来自一个老外论坛的教学帖子,
原来的英文原文教学写得很好而且浅显易懂,
但是很可惜的是那位作者在一年前这系列的教学已经不更新(没有完成),
今天我把文章做了译文及修文,方便一些RGSS程式初学者也能学会画面及视窗设计。
如果自认英文达人,欢迎先查看以下原文教学。
以后有时间我也会慢慢把所有画面及视窗设计相关基础教学全都(译文)写出来。
原文 画面及视窗设计 全教学: (By Mr.Mo)
http://www.rmxp.org/forums/index ... 10&topic=5722.0
[LINE]1,#dddddd[/LINE]
Lesson 1 利用Window_Base製作游戏视窗
Window_Base就字面上所看到的,就是所有视窗的基础,这裡面包括函式及编码(codes)你可以拿来呼叫及使用来设计专属自己的视窗。
那麼要如何使用Window_Base来製作一个游戏裡的视窗呢?
例如:
class MyCustomWindow < Window_Base
end
如果对物件导向有基础概念的人应该就知道什麼是class(类别),但我还是不会略过去解释它的用途。
◎
class(类)习惯於作為RUBY一个脚本的开始。想像一下,它类似作為一个容器(文件夹)。这个文件夹裡的资料,就是相当于class裡的函式及变数,用途是拿来设计製作脚本(物件方法)。
◎
当為class(类别)命名时,class语句一定要开头处,下面是错误的范例:
◎
这裡的<(小於)表示继承,继承可以让你获取来自不同的没有关係class(类别)的信息。
◎
每一个class(类别)的结束都要用end当结尾。
下一步,我们将学习如何给窗口特点(给窗口做设置);
class MyCustomWindow < Window_Base
#----------------------------------------------------------------------
# 物件的初始设置
#----------------------------------------------------------------------
def initialize
super(x, y, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
end
end
◎
当脚本开始运作时,第一它会先寻找"def initialize";如果找不到,
它会将再寻找"def main";如果还是找不到,那麼程式运作时就可能会出错。
◎
super是被用来呼叫在父类裡相同的函式(方法),
此脚本(类别)的父类就是Window_Base,
这裡的super是被用来呼叫
父类Window_Base裡当中的"def initialize(x, y, width, height)",
只要有了这个就可以设定视窗的大小及位置了。
x => 视窗的水平位置(左上角)
y => 视窗的垂直位置(左上角)
width => 视窗的宽,建议不要超过640否则有一部分会消失不见。
height => 视窗的高,建议不要超过480否则有一部分会消失不见。
◎
self是继承的时候调用父类的方法(但也可以调用自己类的方法,但比较少用,因為直接用method),但这裡必须使用。
◎
self.contents = Bitmap.new(width - 32, height - 32) 是用来创建窗口中的一个图块(bitmap),如此一来就可以..
--显示文字
--显示图片
恭喜你!!这样你就有基本视窗的架构囉

这裡的设置范例是super(100, 100, 200, 200)
P.S.上面的效果范例是必须经过一个有关Scenes的调用,才会有这样的效果,以后会在第二章提及。
[LINE]1,#dddddd[/LINE]
Lesson 2 在你的视窗里加上文字
class MyCustomWindow < Window_Base
#----------------------------------------------------------------------
# 物件的初始设置
#----------------------------------------------------------------------
def initialize
super(x, y, width, height)
self.contents = Bitmap.new(width - 32, height - 32)
refresh # 呼叫此类别的刷新函式
end
def refresh
self.contents.clear
self.contents.font.color = normal_color
self.contents.font.size = 20
self.contents.draw_text(x, y, width, height, text)
end
end
◎self.contents.clear
是被用来清理视窗里的内容用的,这是因为 为了防止每次在刷新时,会重复(叠)显示内容它自己。
◎self.contents.font.color = normal_color
是设置视窗里的字体颜色,它只影响在它以后的文字,这表示在视窗里你可以有不同的文字颜色。
◎self.contents.font.size = 20
是设置视窗里的字体大小,它只影响在它以后的文字,这表示在视窗里你可以有不同的文字大小。
◎self.contents.draw_text(x, y, width, height, text)
这是描绘视窗里的所给的文字。
x => 视窗(window)里的X座标位置,非画面(screen)上的座标
y => 视窗(window)里的Y座标位置,非画面(screen)上的座标
width => 一排文字的从左到右的长度,有时很难找到那样适合的长度
height => 一排文字的高度,这通常是32
text => 这里是显示你想给的文字(字串) "I am TEXT. Obey ME!!"
恭喜你!!这样你的视窗里就有文字囉!

这裡的视窗设置范例是super(0, 0, 640, 480)
文字(字串)设置范例是
cx = contents.text_size("I am TEXT. Obey ME!!").width
self.contents.draw_text(50, 50, cx, 32, "I am TEXT. Obey ME!!")
cx是什么呢?
cx这段语句可以让我们得到"I am TEXT. Obey ME!!"的字串从左到右的长度。
--第一章 END....待续
作者: TERENCE 时间: 2008-11-22 08:36
更正.....
第一章 全部译文修文完毕
作者: 菜鸟飞呀飞 时间: 2008-11-22 08:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: TERENCE 时间: 2008-11-22 09:15
以下引用菜鸟飞呀飞于2008-11-22 0:38:11的发言:
这个。。。好像在 跟我从头学脚本 有了。。。
但是还是支持。。
难道我白费工夫了吗!?
http://rpg.blue/viewthread.php?tid=24456&page=4

原作者不同人...
但我觉得这个作者比较有调理整齐嘿
而且比较起来感觉这个教学 对RGSS有基础的人 对视窗设计比较上手

众:pia~自以為

作者: ONEWateR 时间: 2008-11-23 18:55
译文?
翻译的不是在这里发帖 {/wx}
凡是翻译的都要转移至地球村。
作者: TERENCE 时间: 2008-11-23 22:18
以下引用ONEWateR于2008-11-23 10:55:31的发言:
译文?
翻译的不是在这里发帖
凡是翻译的都要转移至地球村。
这不是直接完全翻译过来的.....內容还是有点点差异
里面有些东西还是有经由我整理和修改添加一点東西出来的教学

但如果BZ认为还是有必要转帖.......请帮忙转帖

作者: clap_pl 时间: 2008-11-24 09:23
好东西啊
很好 抱走抱走
以前还看过一个叫跟我读脚本的教程 可惜就1章
LZ加油 再接再厉-。-
{/cy}
作者: 禾西 时间: 2008-11-24 12:25
当脚本开始运作时,第一它会先寻找"def initialize";如果找不到,
它会将再寻找"def main";如果还是找不到,那麼程式运作时就可能会出错。
之所以Scene腳本沒有main方法會出錯是因為腳本的最后一欄(main)當中有這樣一句:
# $scene 为有效的情况下调用 main 过程
while $scene != nil
$scene.main
end
跟initialize沒有任何關系。initialize從 Object 類那里繼承而來,任何實例都有。分別在于你有沒有改寫而已。
self只能調用方法不能調用變量。
作者: TERENCE 时间: 2008-11-24 19:29
以下引用禾西于2008-11-24 4:25:06的发言:
之所以Scene腳本沒有main方法會出錯是因為腳本的最后一欄(main)當中有這樣一句:
# $scene 为有效的情况下调用 main 过程
while $scene != nil
$scene.main
end
跟initialize沒有任何關系。initialize從 Object 類那里繼承而來,任何實例都有。分別在于你有沒有改寫而已。
这个我知道.....这位老外作者在第二章说明Scenes時会細说到
以下引用禾西于2008-11-24 4:25:06的发言:
self只能調用方法不能調用變量。
被wy29的话误导了....
http://rpg.blue/viewthread.php?tid=81412&page=2

[LINE]1,#dddddd[/LINE]
另一方面.....感谢禾西的观念纠正!

作者: 雪流星 时间: 2008-11-24 20:05
龙黄可以参考一下我的教程{/hx}
作者: TERENCE 时间: 2008-11-24 20:42
以下引用snstar2006于2008-11-24 12:05:14的发言:
龙黄可以参考一下我的教程
先谢了......雪流星!!

不过那好像是VX版本的(RGSS与RGSS2的差别我还不知道,因为我沒用过VX的==)
而本篇教学我个人认为是比较偏向:
对RGSS有基础,但却对游戏视窗设计一无所知的人 的 基础教学
因为这是我第一次写相关脚本教程,所以如果有哪个地方有錯,请各位多多指教!
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |