赞 | 10 |
VIP | 15 |
好人卡 | 6 |
积分 | 16 |
经验 | 229303 |
最后登录 | 2018-3-22 |
在线时间 | 1609 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 1624
- 在线时间
- 1609 小时
- 注册时间
- 2007-8-28
- 帖子
- 3253
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 柳之一 于 2009-8-1 00:24 编辑
首先开始攻略AVG游戏
先下载rge。为了启动编辑器需安装.Net
(安装具体参考RGE专区)
在demo里面随便复制一份工程。RGE.dll和fmodex.dll一定要拷贝进来。打开Game.ini
修改成如下:
[Setting]
Library=RGE.dll
Scripts=main.rges
Package=
[Plugin]
Sriol=default.r32
Priol=default.r32
现在环境基本ok。
打开main.rges
进去之后大约会看到这些部分(demo不同会有所不同)
include RGE
class << Mouse
class << Graphics
以上几行如无特殊要求基本上不用改
Frame.title = "test"
Frame.set_size(800,600)
这里设置游戏窗口大小,我设置为800x600
#Frame.forbid_fullscreen = true
Frame.forbid_switch = true
#Frame.fullscreen_start = true
这三行暂时可以无视
RGE.init
Graphics.frame_rate = 40
Mouse.start
begin
#Font.default_name="楷体_GB2312"
#Font.default_name="宋体"
$scene = Scene_SimpleLogo.new
#$scene = Scene_Base.new
$scene.main while $scene != nil
启动场景和默认字体的设置我直接转到Scene_SimpleLogo
rescue
p $!
end
Mouse.finish
RGE.quit
Main页的设置大致也就这样了,现在会转入我的logo场景,由于左边什么也没有我需要建立一个场景。
Logo场景要做成什么样的呢?我也不知道。比较常见的效果是由黑渐变到白,显示logo,在渐变到黑。
那我就不做这个,做个像任天堂的掌机那样的好了。
首先写成下面这样,先做成最基本的场景
class Scene_SimpleLogo #创建一个logo场景
def main #具体的场景内容
Graphics.transition(20)#渐变
$scene = Scene_Base.new#换到下一场景
end
end#创建一个logo场景结束
然后根据自己的要求往里面填东西。
创建一个白色的背景图片
@spriteb = Sprite.new
color=Color.new(255, 255, 255)
@spriteb.bitmap=Bitmap.new(800, 600)
@spriteb.bitmap.fill_rect(0,0,800,600, color)
@spriteb.x =0
@spriteb.y =0
再创建一个logo的图片
@sprite = Sprite.new
@sprite.bitmap = Bitmap.new("logo")
@sprite.x =150
@sprite.y =288
这里的logo图片与游戏在同一个目录,等图片一多会乱。现在急切需要一个像vx的cache模块,这样便于管理。所以还要建立一个module Cache
还是先写出一个基础的
module RGE
module Cache
end
end
内容基本上把vx照搬过来就可以了。
刚才的创建logo图片就变成了
@sprite = Sprite.new
@sprite.bitmap = RGE::Cache.picture("logo")
@sprite.x =150
@sprite.y =288
建立图片在变换场景的时候一般要释放掉,否则下个场景还是显示这些图片。
Graphics.transition(20)
@spriteb.bitmap.dispose
@spriteb.dispose
@sprite.bitmap.dispose
@sprite.dispose
现在的脚本如下:
class Scene_SimpleLogo
def main
@spriteb = Sprite.new
color=Color.new(255, 255, 255)
@spriteb.bitmap=Bitmap.new(800, 600)
@spriteb.bitmap.fill_rect(0,0,800,600, color)
@spriteb.x =0
@spriteb.y =0
@sprite = Sprite.new
@sprite.bitmap = RGE::Cache.picture("logo")
@sprite.x =150
@sprite.y =288
Graphics.transition(20)
@spriteb.bitmap.dispose
@spriteb.dispose
@sprite.bitmap.dispose
@sprite.dispose
$scene = Scene_Base.new
end
end
现在执行程序的话,由于没有建立Scene_Base会出错。画面也一闪而过,
我要让logo动起来,像任天堂那样。
while @sprite.y >206 do
Graphics.update
@sprite.y-=1
End
当图片的y坐标到206就停住,否则图片就一直向上升。
这回执行一下,发现有点像那么回事了,不过最后停住的时候没有“叮”的一声。
还要加上声音。
if @sprite.y ==206
Audio.se_play("Audio/SE/008-System08.ogg")
End
这样声音就出来了。执行一下发现“叮”的一声之后场景马上就切换了,有点突然。
大概再延时2到3秒为好。
@time=10
while @time >0 do
Graphics.update
@time-=1
End
延时了一会。测试一下,发现这回差不多了。
目前的脚本如下:
class Scene_SimpleLogo
def main
@spriteb = Sprite.new
color=Color.new(255, 255, 255)
@spriteb.bitmap=Bitmap.new(800, 600)
@spriteb.bitmap.fill_rect(0,0,800,600, color)
@spriteb.x =0
@spriteb.y =0
@sprite = Sprite.new
@sprite.bitmap = RGE::Cache.picture("logo")
@sprite.x =150
@sprite.y =288
while @sprite.y >206 do
Graphics.update
@sprite.y-=1
end
if @sprite.y ==206
Audio.se_play("Audio/SE/008-System08.ogg")
end
@time=10
while @time >0 do
Graphics.update
@time-=1
end
Graphics.transition(20)
@spriteb.bitmap.dispose
@spriteb.dispose
@sprite.bitmap.dispose
@sprite.dispose
$scene = Scene_Base.new
end
end
为了不显示出错,随便编一个简单的场景
class Scene_Base
def main
s = Sprite.new
s.bitmap = Bitmap.new("2")
loop do
Graphics.update
Input.update
break if Input.trigger?(13) or Input.trigger?(12)
s.bitmap.dispose
s.dispose
end
end
现在可以好好欣赏山寨版开头了。
作为avg,当然是要有对话框了,我需要在主场景上显示对话。
显示对话虽然可以直接在图片上写,不过便于管理和与rm接轨,我还是把它放进窗口里面。
这样自然而然的要建立一个窗口的类。
需要注意的是下面蓝色部分
class Window_Base < RGE::Window
def initialize(x, y, width, height)
super()
self.windowskin= RGE::Cache.windowskin("001-Blue01.png")
self.x = x
self.y = y
self.width = width
self.height = height
self.z = 100
end
def dispose
# 如果窗口的内容已经被设置就被释放
if self.contents != nil
self.contents.dispose
end
super
end
def update
super
end
end
其他的依旧“拿来主义”。
窗口除了要显示对话外,有的时候还要显示其他东西,如人物属性什么的,所以单独建立一个用来显示信息的对话框。
class Window_Message< Window_Base
def initialize
super(0,300,800,300)
self.contents = Bitmap.new(width - 32, height - 32)
end
end
在主场景里面
b=Window_Message.new
新建一个窗口,这个窗口以后就留着显示对话了。不过系统默认的对话框我不是很喜欢。自己做皮肤吧,还没有这么个美工技术和耐心。把窗口弄透明,然后用一张图片来作为对话框不是很好嘛,这样用起来比较方便。
我的窗口大致是这样设计的
左上角的框里面是人物名字,使用半身立绘。
┌───────┐
├ 凌 晓晨 ┤
┌ └───────┘────────────────┐
│文字行1 是个男生就好了。最好,还要是个帅哥! │
│文字行2 每天面对教室里这些衰男真是让人无力啊 │
│文字行3 人都要干瘪掉了说 │
│文字行4 │
│文字行5 │
│ 等待图标│
└──────────────────────────┘
有了想法之后写成脚本就是这个样子:
在窗口初始化的地方加上
self.back_opacity=0
self.opacity=0
把窗口隐藏起来,好使用我的图片。
然后定义一下刷新的时候出现新对话内容
def update
self.contents.clear
#self.contents.font.name="SIMKAI"
self.contents.font.size=23
self.contents.font.color = text_color(8)
选择你需要的字体字号颜色等
left_x=120
top_y=90
wh=26
这三行是我用来方便调整坐标的,请无视
下面6行中的第一行用来显示名字
后5行用来显示对话。
self.contents.draw_text(150,60, 300, 32, $Game_Massage[$Game_Massage_index][0], 0)
self.contents.draw_text(left_x, top_y+wh*1, 300, 32, $Game_Massage[$Game_Massage_index][1], 0)
self.contents.draw_text(left_x, top_y+wh*2, 300, 32, $Game_Massage[$Game_Massage_index][2], 0)
self.contents.draw_text(left_x, top_y+wh*3, 300, 32, $Game_Massage[$Game_Massage_index][3], 0)
self.contents.draw_text(left_x, top_y+wh*4, 300, 32, $Game_Massage[$Game_Massage_index][4], 0)
self.contents.draw_text(left_x, top_y+wh*5, 300, 32, $Game_Massage[$Game_Massage_index][5], 0)
end
Window_Message的部分就可以告一段落了。
至于文字部分,我则偷懒全扔到场景里面去,反正avg也没有地图什么,觉得没有必要专门写个class
首先设置两个变量来记录对话和对话的位置。
$Game_Massage=[
[" 凌 晓晨",
"是个男生就好了。最好,还要是个帅哥!",
"每天面对教室里这些衰男真是让人无力啊。",
"人都要干瘪掉了说。",
"",
""],
["1","2","3","4","5","6"],
["11","22","33","44","55","66"],
]
$Game_Massage_index=0
再建立个自定义对话框图片(我附带的例子的图片及其恶心,务必更换使用)
w = Sprite.new
w.bitmap = RGE::Cache.windowskin("window")
w.x=0
w.y=600-239
为了让对话能继续进行,还要对鼠标的反应进行刷新
loop do
Graphics.update
Input.update
if $Game_Massage_index==($Game_Massage.size+1)
b.visible = false
end
if Mouse.press?(0x01) #左键点击继续对话
unless $Game_Massage_index>=($Game_Massage.size)
b.update
end
$Game_Massage_index+=1
end
break if Input.trigger?(12)
end
测试后发现,对鼠标反应过于灵敏
$Game_Massage_index+=1
在上面这句之后加上下面的做延时处理(下面好熟悉)
@time=30
while @time >0 do
Graphics.update
@time-=1
end
等待图标则么办?哈哈,利用rge的特性直接加载gif就方便多了,一张gif足矣(我选的这个gif有点吓人,请务必更换)
加上等待图标后的脚本如下:
class Scene_Base
def main
$Game_Massage=[
["凌 晓晨",
"是个男生就好了。最好,还要是个帅哥!",
"每天面对教室里这些衰男真是让人无力啊。",
"人都要干瘪掉了说。",
"",
""],
["1","2","3","4","5","6"],
["11","22","33","44","55","66"],
]
$Game_Massage_index=0
s = Sprite.new
s.bitmap = Bitmap.new("2")
w = Sprite.new
w.bitmap = RGE::Cache.windowskin("window")
w.x=0
w.y=600-239
#s.bitmap.mirror=true
gif = GIF.new("di")
gif.x = 700
gif.y = 500
gif.z = 201
gif.visible = false
b=Window_Message.new
loop do
Graphics.update
Input.update
if $Game_Massage_index!=0 and $Game_Massage_index<=($Game_Massage.size+1)
gif.visible = true
gif.update
end
if $Game_Massage_index==($Game_Massage.size+1)
gif.visible = false
gif.update
b.visible = false
end
if Mouse.press?(0x01)
unless $Game_Massage_index>=($Game_Massage.size)
b.update
end
$Game_Massage_index+=1
@time=30
while @time >0 do
Graphics.update
@time-=1
end
end
break if Input.trigger?(12)
end
s.bitmap.dispose
s.dispose
gif.dispose
end
end
运行一下,由于素材的原因,画面十分不鞋盒
有的时候为了看cg,必须把对话框隐藏
利用if写限制就可以了。最后的成品请参见附件。
进入附件的主场景之后,按回车开始显示对话框,鼠标左键显示对话。对话结束后对话框消失。
想继续重复观看的话,请按esc,可以恢复初始状态,从按回车开始。
在我本地上的效果,由于这张对话框素材为正在开发中的原创素材,所以不能放出,请见谅。
先写到这里吧,我不行了,休息一会,下次大概继续做cg回想。
由于本人打开6R网页和rm运行3d脚本一个速度,所以对于您宝贵的留言不能及时查看,如果对脚本有问题,请骚扰 亿万星辰 大大,如果对rge有疑问,请骚扰 灼眼的夏娜。
教学讨论QQ群 53535461 亿万星辰 群主
RGE脑残洋葱集中营QQ群 30864812
以往小游戏区文章
【初级毕业考】大航海4之拿硬币
【初级教学1】游戏总论(入门考试)
【初级教学2】仿三国志舌战制作方法。
【初级教学3】井字棋的做法(降低难度)
【强手棋基础篇】仿大富翁游戏基本框架
强手棋的一个半成品(中级教学开始预告)
上一节:08教学吐槽 |
|