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

Project1

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

[通用发布] 【09暑期】【从0开始作AVG游戏】01

 关闭 [复制链接]

Lv3.寻梦者

梦石
0
星屑
1624
在线时间
1609 小时
注册时间
2007-8-28
帖子
3253

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

跳转到指定楼层
1
发表于 2009-8-1 00:03:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

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教学吐槽
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
2
发表于 2009-8-1 00:12:11 | 只看该作者
沙发……
如果对脚本有问题,请骚扰 亿万星辰 大大,如果对rge有疑问,请骚扰 灼眼的夏娜。

= =~

不知大致效果如何,有时间会看看~
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1624
在线时间
1609 小时
注册时间
2007-8-28
帖子
3253

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

3
 楼主| 发表于 2009-8-1 00:26:32 | 只看该作者
http://www.uushare.com/user/j6and7/file/1852607

附件传了半个小时,也传不上来,先用这个链接
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
238 小时
注册时间
2006-10-2
帖子
417
4
发表于 2009-8-1 01:49:06 | 只看该作者
:lol建议最好每次后面留个作业,让看过的人都上交作业一份
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1624
在线时间
1609 小时
注册时间
2007-8-28
帖子
3253

第3届短篇游戏大赛主流游戏组冠军第1届Title华丽大赛新人奖

5
 楼主| 发表于 2009-8-1 07:04:34 | 只看该作者
:lol建议最好每次后面留个作业,让看过的人都上交作业一份
猫哥哥 发表于 2009-8-1 01:49


留作业不太现实,很少有时间做的
“我推荐你一个游戏吧,avg的,剧情特感人”
“我擦,都是文字图片的游戏有啥好玩的,连个战斗都没有!”
“我推荐你一个游戏吧,rpg的,战斗也新颖”
“我擦,怎么米有作i弊器?“
”你不是喜欢战斗么?”
“不,我是剧情党!!”

继续阅读请点击
http://rpg.blue/blog-53316-10027.html
回复 支持 反对

使用道具 举报

Lv1.梦旅人


梦石
0
星屑
89
在线时间
24 小时
注册时间
2006-5-27
帖子
11425

贵宾

6
发表于 2009-8-1 10:44:20 | 只看该作者
这到底是小游戏教程还是RGE教程- -b
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6695
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

7
发表于 2009-8-1 11:04:40 | 只看该作者
提供一种写脚本的思路

写出来的产物可以是任何类型的 当然也包括小游戏咯

关键是要学会方法而不是硬套不会举一反三











你知道得太多了

回复 支持 反对

使用道具 举报

Lv1.梦旅人

风雪夜不归人

梦石
0
星屑
50
在线时间
276 小时
注册时间
2006-3-7
帖子
6721

贵宾

8
发表于 2009-8-1 13:54:42 | 只看该作者
非常不错,但我对AVG无缘了
有些人,到了七八月份就会诈尸。
宫斗,是女生永远的爱。
冷门,是本人不变的欲。
作弊,是玩家自由的痛。
练级,是橙光割舍的情。
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3274
在线时间
3617 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

9
发表于 2009-8-1 17:40:40 | 只看该作者
奇怪了…… = =
难道暑假系列教程全是RGE?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

清纯红

梦石
0
星屑
61
在线时间
65 小时
注册时间
2009-7-23
帖子
995

贵宾

10
发表于 2009-8-4 09:01:34 | 只看该作者
太棒了,正合我意啊
支持~
就算痛也要做,宅必备宅人的必备网站
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-21 23:00

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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