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

Project1

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

画面及视窗设计基础教学--第一章

 关闭 [复制链接]

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
跳转到指定楼层
1
发表于 2008-11-22 07:09:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
画面及视窗设计基础教学
IN-Depth Scenes&Windows
Chapter 1
Making a Window
视窗製作

前言:
本教程本不属於我自己所写的,而是来自一个老外论坛的教学帖子,
原来的英文原文教学写得很好而且浅显易懂,
但是很可惜的是那位作者在一年前这系列的教学已经不更新(没有完成),
今天我把文章做了译文及修文,方便一些RGSS程式初学者也能学会画面及视窗设计。
如果自认英文达人,欢迎先查看以下原文教学。
以后有时间我也会慢慢把所有画面及视窗设计相关基础教学全都(译文)写出来。
原文 画面及视窗设计 全教学: (By Mr.Mo)
http://www.rmxp.org/forums/index ... 10&topic=5722.0


Lesson 1 利用Window_Base製作游戏视窗
Window_Base就字面上所看到的,就是所有视窗的基础,这裡面包括函式及编码(codes)你可以拿来呼叫及使用来设计专属自己的视窗。

那麼要如何使用Window_Base来製作一个游戏裡的视窗呢?
例如:
class MyCustomWindow < Window_Base

end
如果对物件导向有基础概念的人应该就知道什麼是class(类别),但我还是不会略过去解释它的用途。

class(类)习惯於作為RUBY一个脚本的开始。想像一下,它类似作為一个容器(文件夹)。这个文件夹裡的资料,就是相当于class裡的函式及变数,用途是拿来设计製作脚本(物件方法)。

当為class(类别)命名时,class语句一定要开头处,下面是错误的范例:
myCustomClass

这裡的<(小於)表示继承,继承可以让你获取来自不同的没有关係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的调用,才会有这样的效果,以后会在第二章提及。


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....待续

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
2
 楼主| 发表于 2008-11-22 08:36:42 | 只看该作者
更正.....
第一章 全部译文修文完毕

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

菜鸟飞呀飞 该用户已被删除
3
发表于 2008-11-22 08:38:11 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
4
 楼主| 发表于 2008-11-22 09:15:50 | 只看该作者
以下引用菜鸟飞呀飞于2008-11-22 0:38:11的发言:
这个。。。好像在 跟我从头学脚本 有了。。。
但是还是支持。。

难道我白费工夫了吗!?
http://rpg.blue/viewthread.php?tid=24456&page=4


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


众:pia~自以為

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
5
发表于 2008-11-23 18:55:31 | 只看该作者
译文?

翻译的不是在这里发帖 {/wx}

凡是翻译的都要转移至地球村。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
6
 楼主| 发表于 2008-11-23 22:18:50 | 只看该作者
以下引用ONEWateR于2008-11-23 10:55:31的发言:

译文?

翻译的不是在这里发帖

凡是翻译的都要转移至地球村。

这不是直接完全翻译过来的.....內容还是有点点差异
里面有些东西还是有经由我整理修改添加一点東西出来的教学


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

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
574
在线时间
169 小时
注册时间
2008-10-29
帖子
431
7
发表于 2008-11-24 09:23:10 | 只看该作者
好东西啊
很好 抱走抱走
以前还看过一个叫跟我读脚本的教程 可惜就1章
LZ加油 再接再厉-。-
{/cy}
回复 支持 反对

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
1020
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

8
发表于 2008-11-24 12:25:06 | 只看该作者
当脚本开始运作时,第一它会先寻找"def initialize";如果找不到,
它会将再寻找"def main";如果还是找不到,那麼程式运作时就可能会出错。

之所以Scene腳本沒有main方法會出錯是因為腳本的最后一欄(main)當中有這樣一句:
  # $scene 为有效的情况下调用 main 过程
  while $scene != nil
    $scene.main
  end

跟initialize沒有任何關系。initialize從 Object 類那里繼承而來,任何實例都有。分別在于你有沒有改寫而已。

self只能調用方法不能調用變量。
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复 支持 反对

使用道具 举报

Lv1.梦旅人

龙皇

梦石
0
星屑
50
在线时间
83 小时
注册时间
2007-8-8
帖子
2956
9
 楼主| 发表于 2008-11-24 19:29:00 | 只看该作者
以下引用禾西于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



另一方面.....感谢禾西的观念纠正!

                签名图来自:無限のファンタジア
                 我的RMXP专题空间--龙使传说
回复 支持 反对

使用道具 举报

Lv2.观梦者

天仙

梦石
0
星屑
620
在线时间
184 小时
注册时间
2008-4-15
帖子
5023

贵宾

10
发表于 2008-11-24 20:05:14 | 只看该作者
龙黄可以参考一下我的教程{/hx}
VA脚本开工中...
偷窃脚本1.0 - 已完成
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 10:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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