【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 2103|回复: 0

游戏是这样写成的 (第三篇: 简单的游戏框架)

[复制链接]
发表于 2009-6-11 20:20:20 | 显示全部楼层 |阅读模式
<div class="ostContent">
<p><img height="90" alt="" src="http://www.cocoachina.com/bbs/attachment/6_37_21cfff245d47a38.png" width="160"/></p>
<p><img height="480" alt="" src="http://www.cocoachina.com/bbs/attachment/6_37_6effc83a167c6a5.png" width="320"/></p>
<p>通过<a href="http://www.cocoachina.com/index.php/archives/cocoachina_200.html" target="_blank">上一篇</a>, 我们已有个基本的画图功能, 这次让我们弄一个简单的游戏框架吧!<br/><span id="more-206"></span><br/><br/>其实一般的游戏, 大致有两个主要的函数就可以了: update 和 render! </p>
<p>我们在 update 里更新游戏数据, 然后在render 里把游戏的画面画出来。我们来定议一个叫 CCGameApp 的 class 吧:</p>
<div class="geshi no="no"  objc">
<ol>
<li class="li1">
<div class="de1"><span class="kw4">class</span> CCGameApp</div>
<li class="li1">
<div class="de1"><span class="br0">{</span></div>
<li class="li1">
<div class="de1">public<span class="sy0">:</span></div>
<li class="li1">
<div class="de1">&nbsp; &nbsp; CCGameApp<span class="br0">(</span><span class="br0">)</span>;</div>
<li class="li1">
<div class="de1">&nbsp; &nbsp; ~CCGameApp<span class="br0">(</span><span class="br0">)</span>;</div>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">void</span> <span class="kw4">update</span><span class="br0">(</span><span class="kw4">float</span> dt<span class="br0">)</span>;</div>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw4">void</span> <span class="kw4">render</span><span class="br0">(</span><span class="br0">)</span>;</div></li></ol></div>
<p>大家看到我们的 update 函数, 有一个 dt 参数, 在这里我略微解说一下: 游戏的更新率, 最理想是我们把它设成固定的,比如每秒60帧,但有时可能某些原因,游戏没法达到这个更新率,那怎么办呢?总不能让角色忽快忽慢的移动吧!而这个 dt 参数是从上一帧到现在这帧,共用去了多少时间(秒),我们可以利用它调整游戏里的数据,比如说,主角一秒移动1个像素,现在过了dt 这么多秒,那主角应该移动 (1*dt) 个像素了!</p>
<p>这次,我们也把 CCSprite 一分为二,弄多了一个 CCTexture,目的是让不同的 CCSprite 可以共享一个贴图,一般来说,为了节省空间和速度考虑,我们会把数个小图,放在一个大的贴图里,像上面第一个图,里面就有两个角色的图,那我们建立两个不同的sprites时,可以用同一个贴图!</p>
<p>而建立 CCSprite的参数,就是小图在大贴图里的起始位置和大小:</p>
<div class="geshi no="no"  objc">
<ol>
<li class="li1">
<div class="de1">CCSprite<span class="br0">(</span>CCTexture <span class="sy0">*</span>texture, <span class="kw4">float</span> x, <span class="kw4">float</span> <span class="kw4">y</span>, <span class="kw4">float</span> <span class="kw4">width</span>, <span class="kw4">float</span> <span class="kw4">height</span><span class="br0">)</span>;</div></li></ol></div>
<p>CCSprite 的 render 也多加了一个角度的参数,我们可以用它把角色转来转去了!</p>
<div class="geshi no="no"  objc">
<ol>
<li class="li1">
<div class="de1"><span class="kw4">void</span> <span class="kw4">render</span><span class="br0">(</span><span class="kw4">float</span> x, <span class="kw4">float</span> <span class="kw4">y</span>, <span class="kw4">float</span> angle<span class="sy0">=</span><span class="nu0">0</span>.0f<span class="br0">)</span>;</div></li></ol></div>
<p>因为时间关系不写太多了,大家有兴趣,可以看一下代码作为参考。</p>
<p>本篇文章的代码可以在<a href="http://www.cocoachina.com/bbs/read.php?tid-99.html" target="_blank">这里</a>下载。</p></div>
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-2-6 13:06

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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