月度归档: 2011 年 12 月

  • android游戏开发框架libgdx的使用(九)—在libgdx中使用Box2d

    android游戏开发框架libgdx的使用(九)—在libgdx中使用Box2d

    在游戏开发中难免会需要模拟现实情况,一般常见的就是模拟物理世界。

    比如物体碰撞,车辆前进,物体下落等。也许有人会觉得原来有实现过一些效果没有看到用什么物理知识呢。

    在我看来引入物理引擎并不是必须的,但是这样可以让游戏更逼真。物理引擎的话首选Box2d,但是它是C++写的,直接用不方便。

    在Android游戏开发中使用物理引擎一般有三个比较好的选择:

    1.JBox2d

    Box2d的Java移植版本,速度有点慢。不过对于不熟悉C++的朋友而言这个可以拿来看看原理。

    2.Havok

    这个就不多说了,我怎么没有用过。

    3.Libgdx

    libgdx用了jni封装了box2d,速度和易用性都不错。

    下面我们来看看一个示例,原来没有接触过box2d的朋友最好先找资料看看。

    代码如下:

    package com.cnblogs.htynkn.listener;
    
    import com.badlogic.gdx.ApplicationListener;
    import com.badlogic.gdx.Gdx;
    import com.badlogic.gdx.graphics.GL10;
    import com.badlogic.gdx.graphics.OrthographicCamera;
    import com.badlogic.gdx.math.Vector2;
    import com.badlogic.gdx.physics.box2d.Body;
    import com.badlogic.gdx.physics.box2d.BodyDef;
    import com.badlogic.gdx.physics.box2d.Box2DDebugRenderer;
    import com.badlogic.gdx.physics.box2d.CircleShape;
    import com.badlogic.gdx.physics.box2d.World;
    import com.badlogic.gdx.physics.box2d.BodyDef.BodyType;
    
    publicclass DemoGame implements ApplicationListener 
  • 是sourceForge还是google code?

    是sourceForge还是google code?

    最近写了一点小东西,想把代码放到网上。最先想到的是google code,没有其他什么说的,界面简单,使用方便。

    svn服务器速度也不错,校园网这个渣速也可以跑到40K/S。用着用着就觉得有点纠结了,因为仔细研究了一下sourceForge,觉得也不错,有点像移动到sourceForge上去。

    但是sourceForge的速度有点纠结了,还有满屏的英语…看着有点困难。而且建立项目的界面改了,有点不知所云。(可以切换到老界面创建项目)。

    仔细比较了一下觉得二者各有优劣,遂把随感随想写成博文,一方面给后来人参考,一方面想听听其他朋友的看法。

    1.google code

    优点:

    *毫无悬念,速度快,特别是SVN服务器,提交代码时感觉很爽。

    *界面简单,极其一般的英语水准都可以胜任。

    *上手容易,快速体验。

    劣势:

    *功能较弱,一般的需求没有问题,但是SVN权限划分,wiki的支持上都有不是很强。

    *没有统计,虽然Google Code集合自家产品的统计,但是我觉得Google Analytics是做网站统计,对于svn库没有统计,对于下载等的统计没有单独划分出来。

    *稳定性不够.有时候会访问不起。(我觉得是被盾了)

    2.sourceForge

    优点:

    *老牌,用户量,各方面的操作和管理方式都经过了时间的考验。

    *功能服务,只要你能够想到的,都会有提供,实在没有的你还可以在Hosted Apps里面找找。

    *提供了web空间,可以更随意的表现。

    缺点:

    *因为功能丰富,所以上手有点困难。

    *速度,速度,有时候确实有点慢。

     

    其实依我来看,Google Code拿来做点简单的还是可以的,特别是你的项目本身就有网站什么的,不足的功能可以自己架。偶尔的无法访问也没有大的影响。

    如果你需要强大的功能,而且可以接受有点慢的速度,那就推荐sourceForge了。

    我在两者上面都建立了一个项目,监控了几天在线率,结果如下:

    gs2

    Google Code的无法访问一般就是几分钟的事情。

    gs1

  • android游戏开发框架libgdx的使用(八)–相机和观察点

    android游戏开发框架libgdx的使用(八)–相机和观察点

    本文使用的libgdx是0.92版本,和现在的最新版可能有一些不一样的地方。全文内容仅供参考。

    相机也可以成为观察者,最简单的例子就是魂斗罗。

    魂斗罗

    玩家操作角色前进,后退,跳跃等,显示的世界(就是后面的背景)会不停变化。其实就是相机的观察点(视角)的改变引起的。

    也许游戏的世界(背景地图)很大,比如10240480,而设备的分辨率是800480。现在游戏的角色在地图的最左侧,那么它的观察点就是(400,240)。

    随着角色的向前移动,观察点也变化,通常是y值变大。

    角色后退时x值变小。

    角色跳跃时,y值变化。(其实地图可能要稍微高一点,比如500,这样角色的跳跃才会有效果)。

    可以说相机是游戏开发的一个基本组件。而Libgdx的Stage类中就默认包含了一个Camera。

    Camera类按照功能而言也有很多种,最常用的是OrthographicCamera(正投影相机),Stage中默认Camera的实现类为该类。

    OrthographicCamera实现以下功能:

    1.移动和旋转镜头

    2.放大和缩小

    3.改变观察点(视角)

    4.窗体和世界的点的转化

    相机的最大好处就是无需手动操作矩阵就可以移动游戏世界,所有的矩阵投影和观察点运算就是对开发者隐藏的。

    相机的使用一般配合着mesh。mesh绘制一个矩形区域,然后将地图贴图在其上。

    接下来的例子将使用一张图:

    xk

    大小2048*2048.

    代码如下:

    package com.cnblogs.htynkn.listener;
    
    import com.badlogic.gdx.ApplicationListener;
    import com.badlogic.gdx.Gdx;
    import com.badlogic.gdx.graphics.GL10;
    import com.badlogic.gdx.graphics.Mesh;
    import com.badlogic.gdx.graphics.OrthographicCamera;
    import com.badlogic.gdx.graphics.Texture;
    import com.badlogic.gdx.graphics.VertexAttribute;
    import com.badlogic.gdx.graphics.VertexAttributes;
    import