ruby高级游戏框架rubygame

ruby高级游戏框架rubygame

php?name=Ruby" onclick="tagshow(event)" class="t_tag">Rubygame 一个全面,高级的php?name=%D3%CE%CF%B7" onclick="tagshow(event)" class="t_tag">游戏开发框架,它也提供了封装低层SDL C的API调用。你的项目可以选用php?name=Ruby" onclick="tagshow(event)" class="t_tag">Rubygame便利的方法和helper类来实现,也可以通过php?name=Ruby" onclick="tagshow(event)" class="t_tag">Rubygame来调用SDLphp?name=%BA%AF%CA%FD" onclick="tagshow(event)" class="t_tag">函数。
由 Rubygame这个名字可以看出Rubygame是模仿Python-based的Pygame框架的。据Rubygame的发起者John Croisant所说,选择Pygame是因为那个时候Pygame是他所知道最好的游戏开发框架。虽然Rubygame的功能是由Pygame直接移植过来的,但是经过一段时间的开发,Rubygame已经是一个含有很多Ruby特性的开发框架。
Rubygame3.0是框架下一个重要的版本,比起Pygame将会有很大的改变。John尝试让旧版本开发的游戏修改一些东西后,就能在新版本的Rubygame上运行。
在Rubygame3.0出来之前,我们可以先看看这个类Pygame游戏引擎的一个Rubygame2.1.0的小例子。(现在的版本为2.3.0)
Punch the Chimp游戏,从Pygame的教程中直接移植过来。Rubygame跟Pygame的API几乎一样,所以我们可以很容易的跟着Pygame的教程来使用Rubygame实现这个游戏。你使用指针来移动拳头然后单击鼠标来打猩猩,打中后猩猩就会晕。

Rect,矩形就是Pygame的主要使用到的类,Rubygame也一样。Rects经常跟sprites匹配的使用,基于图片的大小来显示 sprites。下面的图片就代表游戏中的猩猩。图片背景的红色在游戏运行时会隐藏起来。跟其它的游戏框架一样,当显示一张图片时Rubygame可以让 玩家指定一种隐藏的颜色。隐藏背景颜色后,猩猩看起来就是一个不错的角色。

Rects可以用来移动sprites.你可以在sprite的Rect中设置任何一个属性如midleft或bottom(如图)指定sprite的位 置。这个游戏初始化时,@rect.topleft = 10, 10就是用来设置猩猩的位置。要让拳头的sprite跟着指针走,我们就需要在每一帧画面将拳头的midtop值设置成等于指针的坐标值。

Rect里面也提供了许多如两个物体碰撞检测之类的有用方法,如clamp:将一个Rect右移进入另一个Rect中;inflate:根据你传 递一个正数或者负数来伸长或收缩一个Rect。下面是检测拳头是否碰撞到猩猩的代码。我们使用一个比较小版本的拳头Rect来测试,保证拳头正好击中目标 时程序才记录分数。

# Attempt to punch a target.
# Returns true if it hit or false if not.
def punch(target)
@punching = true
return @rect.inflate(-5,-5).collide_rect?(target.rect)
end
Pygame开发时另一个主要的思想是精灵图片组。Rubygame里,Sprites::Group类是基于Pygame的sprite::Group的.
Sprite 组可以为组成的sprites进行大量的动作处理,如:描绘,刷新,碰撞检测。在Punch the Chimp游戏中,拳头和猩猩都属于一个sprite组, 但是真正的游戏里,一个场景里的sprites不会属于一个sprite组的。游戏可以由多个sprites组来组成。例如,不同的团队里面就会有不同的 sprite组。SpriteGroups很容易扩展。
Ruby/SDL示例代码里,我们可以发现里面将所有的sprites压缩到一个 数组里面,并在循环里面通过重绘数组的每个sprite的每一帧来刷新整个组。为什么sprites组会如果的神奇?我们可以看看一个不错的例子,如果你 在程序中混入Rubygame的UpdateGroup模块或者使用Pygame的RenderUpdate模块时,sprites组就变得很有用啦,它 们会保存最后刷新的Rects的位置并且只显示这些刷新后的Sprite。
现在我们来看看Rubygame框架的分支:Edge Rubygame的情况。其中一个最大的变化是加入新的场景管理系统,它能与OpenGL很好的集成,一个全新的事件处理机制,还有一个与Pygame的Rect很大差别的位置系统。
这里有一组Rubygame 3.0分支的demo的视频截图。这只大熊猫会跟着鼠标的指针移动,当你在屏幕点击鼠标时,熊猫跟红宝石就会跳到指针处。此时两个物体就会相撞,他们的颜色就会变成红色。右上角就会显示一幅两个相撞的缩略图,缩略图是嵌在原来的图片上。

[img]http://www.oreillynet.com/ruby/2[/img]
下面是新系统显示sprites的代码。demo里面显示一幅红宝石图片的代码。场景后面使用了几组OpenGL调用,像我们在RUDL示例中看到的一样,不过这里它们封装在单个setup_texture调用里面。方位的表示使用了两个坐标轴,但是后台中,框架使用的是OpenGL的3D系统表示,不过将坐标轴的z轴的值赋0。虽然与OpenGL紧紧的集成,但是John在3.0中承诺了新系统中不需要3D显卡也可以使用。这将会有另外一个不需要OpenGL实现的场景管理系统。

ruby = GLImageSprite.new {
@surface = Surface.load_image('ruby.png')
setup_texture()
@pos = Vec×2[100,300]
@depth = -0.1
@angle = -0.2
}

Rubygame的图嵌图可能让你想起在Nebular Gauntlet的雷达,不过实现的机制是完全不同的。

在Nebular Gauntlet的版本中,它是描绘一个小图形来代表每一艘太空船和shield。雷达的实现是通过将全部的船,bots和shield 缩小成相应的行为模型,然后使用大小调整值与每个物体的x,y坐标值相减,得到显示位置的坐标,调整值在程序初始化时赋为15。然后在雷达区用白点描绘每 个物体。
在Rubygame 3.0的demo中,窗口上面显示的却是另外一个场景,一个类似使用虚拟摄像机虚拟出来的场景。
你 可以想像一下虚拟的摄像机就跟一部手机的摄像头一样,将视线聚集在一个区域内而且将它显示在一个二维的屏幕。如果虚拟摄像机的视角定义跟游戏视角一样时, 缩小屏幕的区域,人物看起来也就缩小啦。Demo程序里面没有使用其它的代码来描绘第二个熊猫或者红宝石,跟Nebular Gauntlet雷达区里的白圈不一样。想增加另外一个摄像机只要调用add_camera方法就行啦。
Rubygame3.0的发布日期还没有决定。John仍然会将很多的想法加进去。
我 们可以在Rubygame的代码或者John博客里面查看他加入框架的新想法。他最近写了一篇关于为什么RGB颜色模型不适合渲染一个由黄色渲染中间层的 场景。他建议大多数开发者只在黄色场景中为对象着色,并且考虑一下使用什么来使得场景更加真实。真实生活中,光在通道层中散发出受限的光会将一辆红色小汽 车变成深黄橙色或者几乎接近黑色的蓝汽车。
rubygame 下载地址
http://rubygame.sourceforge.net/
另一个游戏框架是shatteredruby
是一个3D游戏框架
下载地址::http://www.shatteredruby.com/

新手可以查阅此人博客来获得帮助
http://birdy-party.blogspot.com/search/label/ShatteredRuby
好贴,我顶
路过留个脚印 呵呵~




























做个广告容易不咯!桔色祝福财经chrome金山毒霸2009