[连载]一个横版马里奥游戏
sdl吧
全部回复
仅看楼主
level 13
小牛_牛sky
楼主
1楼祝愿自己心想事成*^_^*
2017年01月31日 03点01分
1
level 13
小牛_牛sky
楼主
这几天由于想着做rpg游戏,但没什么思路,一直很挫败,无奈玩了会gb游戏,感受着以前游戏的气息,也有点想通了,我打算跟随着游戏史编写游戏,这次是马里奥游戏
2017年01月31日 03点01分
3
小牛_牛sky
另外,本游戏几乎全部资源来自于 爱给网,这里我打个广告,推荐这个网站,只要你注册就可以下载,不过不能批量,但那也是极好的。希望大家多多宣传,这种好网站不多见
2017年02月01日 01点02分
silentbluedrop
@小牛_牛sky
网站不错,谢谢吧主!
2017年02月26日 09点02分
小牛_牛sky
@silentbluedrop
嗯,个人个人感觉挺好的
2017年02月26日 11点02分
level 13
小牛_牛sky
楼主
首先,本帖参考
cocos2dx参考类马里奥游戏
而进行连载(主要是这几天过年过的自己空虚寂寞冷,嘿嘿)
2017年01月31日 03点01分
4
小牛_牛sky
游戏链接,以后更新都放到这个文件夹里
http://pan.baidu.com/s/1i4W7N3v
2017年03月15日 13点03分
level 13
小牛_牛sky
楼主
先开个头,类似于这种游戏,是模拟重力的,自然而然地我就想到了重力加速度,速度等物理知识,以前写像素鸟的时候就用到了模拟重力,当时就想,重力嘛,不就是g=9.8m/s2嘛,然后就发现像素鸟下落速度增加的奇慢无比,今天看了看才发现,米是要转换成像素的,有有以下几个
DPI 每英寸有多少个点
1.像素数/DPI = 英寸
2.英寸*25.4= 毫米
3.1mm = 10*-3m
现在主要的就是DPI了
这个SDL提供给我们了
就是SDL_GetDisplayDPI()和SDL_GetNumVideoDisplay()了,这两个函数具体用法可以wiki,我晚上应该会测试一下,
2017年01月31日 04点01分
5
level 13
小牛_牛sky
楼主
当然box2d是完全够用的,但感觉没必要,哈,
2017年01月31日 04点01分
6
level 13
小牛_牛sky
楼主
好了,测试了,感觉挺好的。
下面写上用法。
float vdpi;
//默认获取第一个可用的显示器的竖直的dpi SDL_GetDisplayDPI(0,0,0,&vdpi);
//获取重力加速度
float g = 25400.f/vdpi;
这就是转化为像素的重力加速度
之后就可以根据加速度获取速度,然后获取距离
如上一次执行到这一次的时间为t
velocity = t * g;
float distance = velocity*t;
这就是这个距离。
大家运行试试即可
2017年01月31日 06点01分
7
小牛_牛sky
这个思路是错的,具体见下
2017年02月01日 10点02分
level 13
小牛_牛sky
楼主
今天实现了tiled的动画的支持,这个是tiled软件的新功能,就是可以把某些图片作为动画,见下图
关于实现也不难,看tmx文件就应该能了解到。tiled的动画有两个主要的属性,当然的图块号和持续时间,只要解析了这两个其他的就都好解决了。效果图如下
2017年01月31日 15点01分
8
level 13
小牛_牛sky
楼主
另外,图片资源是我一点点用ps抠出来然后合成的,后续我会发出来供大家参考,顺便提一句,屏幕大小800*480
2017年01月31日 15点01分
9
level 13
小牛_牛sky
楼主
今天正式开始。图片资源,和图块资源,声音资源
基本完成。接下来就是编码了。有什么不对或者优化的地方,望大家多多指正。
2017年02月01日 03点02分
11
level 13
小牛_牛sky
楼主
首先我是创建了一个场景,作为控制器。为GameScene类。GameScene类有个重力属性,为m_gravity(矢量)。因为要显示地图,所以创建一个MapLayer类负责显示地图,滚动,以及进行碰撞检测。然后每一帧在update(float dt)中对马里奥和敌人的坐标进行更新,对他们的更新是相同的,即获取加速度,再获取速度,再获取距离,再通过这个距离以及包围盒判断是否和MapLayer的图块进行碰撞即可,若发生碰撞,这个方向的速度为0,并且距离不变,否则则进行相应的坐标加减
2017年02月01日 03点02分
12
level 13
小牛_牛sky
楼主
另外,我在编写是是全部加载了资源,大概会有1秒的卡顿,这很正常,音乐资源5m多,图片1m多。以后加入一个loading动画就不那么突兀了
2017年02月01日 04点02分
13
level 13
小牛_牛sky
楼主
关于马里奥行走。
游戏有两个力,分为重力和摩擦力。行走的加速,匀速,减速就是根据摩擦力来使得动作平滑不突兀。现在主要讲讲摩擦力的思路,根据物理公式
Ff=u * Fn;
F = ma;
所以摩擦力加速度a = u*g(g为重力加速度)
那么在游戏中,马里奥分为1级加速和2级加速,他们的区别是①最大速度不同②加速度不同。二级加速度要大于一级加速度。这样就可以实现当按住发射子弹按钮时。速度提升会比平常要快很多。并且当当前速度>=当前级别的最大速度时,设置速度为最大速度,并且加速度为摩擦加速度。另外,当马里奥不运动时是不受摩擦力的,这个可以通过布尔量来判断得知,那么摩擦系数u则是根据马里奥当前的位置下的图块得知,那样的话,等到以后就可以设置一些例如冰地或者沙漠等特殊的地形了,当然,这个对于一般的怪物是不需要的,Boss级的另说
2017年02月01日 04点02分
14
level 13
小牛_牛sky
楼主
再谈谈安全位置,所谓安全位置,就是马里奥时候的复活点。这个有两种解决方法。
1.设置一个存档点,当马里奥激活那个存档点后,再次死亡就从那个存档点复活
2.设置一个安全点,马里奥死亡,则有两种情况
①被敌人杀害
②跳下去摔死(活该→_→),思路是这样的(这个是SDL Game Development的最后一个游戏的思路。想了解sdl或者想熟悉游戏的朋友可以去看看,目前没有中文版。这个我感觉无所谓,反正我大部分只看代码),当发生碰撞并且马里奥没死时,就设置上一个位置为安全点。这样当马里奥跳到地图外,此时马里奥已经死亡,之后播放死亡动画,然后就可以读取这个安全点来复活。
2017年02月01日 04点02分
15
level 13
小牛_牛sky
楼主
刚才想了想,那个获取加速度的方式是不对的,
1英寸是0.0254米,然后我1米换算出来的像素为3000左右的像素,突然想了想,这不是屏幕分辨率嘛。。。僵硬。然后我又想到了box2d,box2d推荐的PTM_RATIO=32,所以,重力不应该是这么换算的,这次我打算换算为
g = 9.8 * 32 = 313.6;
2017年02月01日 08点02分
16
1
2
3
4
5
6
尾页