Android游戏开发----LibGdx游戏引…

留心的朋友会发现,安装完微信4.5后,会有一个跳动的火焰、并播放《一无所有》的欢迎页。本篇文章模拟的是火焰跳动的效果。


一、LibGdx游戏引擎介绍

LibGdx是一款基于OpenGL ES技术开发的Android游戏引擎,支持Android平台下的2D游戏开发,物理引擎采用Box2D实现

LibGdx是一个跨平台的2D/3D的游戏开发框架,它由Java/C/C++语言编写而成。它基于Apache License, Version 2.0协议,对商业使用和非商业使用均免费。代码托管于Github中。最新版本为0.9.8。

官方网站:http://code.google.com/p/libgdx/

LibGdx单就性能角度来说,堪称是一款非常强大的 Android游戏引擎。


二、粒子特效

为模拟现实中的水、火、雾、气等效果由各种三维软件开发的制作模块,原理是将无数的单个粒子组合使其呈现出固定形态,借由控制器,脚本来控制其整体或单个的运动,模拟出现真实的效果。


三、LibGdx粒子特效编辑器

下载地址:http://code.google.com/p/libgdx/wiki/ParticleEditor

用来编辑粒子效果的编辑器。(参数可以任意尝试设置)

打开后界面如下, 可直接保存效果为my.p,为后续使用。



四、具体实现

功能:实现一个画面,当手触摸时,火焰随之移动。

核心代码:(my.p放在asset/data目录下,并在该目录下放一张particle.png(为单个粒子的图片文件,文件名唯一))

  1. package com.example.libgdx_02_Particle;  
  2.   
  3. import com.badlogic.gdx.ApplicationListener;  
  4. import com.badlogic.gdx.Gdx;  
  5. import com.badlogic.gdx.InputProcessor;  
  6. import com.badlogic.gdx.graphics.GL10;  
  7. import com.badlogic.gdx.graphics.g2d.ParticleEffect;  
  8. import com.badlogic.gdx.graphics.g2d.ParticleEmitter;  
  9. import com.badlogic.gdx.graphics.g2d.SpriteBatch;  
  10. import com.badlogic.gdx.utils.Array;  
  11.   
  12. public class Game implements ApplicationListener  
  13.  
  14.   
  15.     SpriteBatch batch;  
  16.     ParticleEffect effect;  
  17.     int index;  
  18.     Array emitters;  
  19.     int count;  
  20.   
  21.     //一旦ApplicationListener开始运行,render函数就会不停执行   
  22.     @Override  
  23.     public void render()//着色, 渲染.   
  24.      
  25.         // TODO Auto-generated method stub   
  26.         Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);//清屏   
  27.         Gdx.gl.glClearColor(0f, 0f, 0f, 0f);  
  28.   
  29.         batch.getProjectionMatrix().setToOrtho2D(0, 0, Gdx.graphics.getWidth(),  
  30.                 Gdx.graphics.getHeight());  
  31.         Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);  
  32.         batch.begin();  
  33.         effect.draw(batch, Gdx.graphics.getDeltaTime());  
  34.         batch.end();  
  35.   
  36.      
  37.   
  38.     @Override  
  39.     public void create()  
  40.      
  41.         //初始化   
  42.         batch new SpriteBatch();  
  43.         effect new ParticleEffect();  
  44.         //加载文件   
  45.         effect.load(Gdx.files.internal("data/my.p"),  
  46.                 Gdx.files.internal("data/"));  
  47.         //设置特效位置   
  48.         effect.setPosition(Gdx.graphics.getWidth() 2,  
  49.                 Gdx.graphics.getHeight() 2);  
  50.   
  51.         emitters new Array(effect.getEmitters());  
  52.         effect.getEmitters().clear();  
  53.         effect.getEmitters().add(emitters.get(index));  
  54.   
  55.         //点击屏幕移动, 设置输入   
  56.         InputProcessor inputProcessor new InputProcessor()  
  57.          
  58.   
  59.             @Override  
  60.             public boolean touchUp(int arg0, int arg1, int arg2, int arg3)  
  61.              
  62.                 return false;  
  63.              
  64.   
  65.             @Override  
  66.             public boolean touchDragged(int arg0, int arg1, int arg2)  
  67.              
  68.                 effect.setPosition(arg0, Gdx.graphics.getHeight() arg1);  
  69.                 return false;  
  70.              
  71.   
  72.             @Override  
  73.             public boolean touchDown(int arg0, int arg1, int arg2, int arg3)  
  74.              
  75.                 ParticleEmitter emitter emitters.get(index);  
  76.                 count += 100;  
  77.                 if (count emitter.getMaxParticleCount())  
  78.                     emitter.setMaxParticleCount(count 2);  
  79.                 count Math.max(0, count);  
  80.                 emitter.getEmission().setHigh(  
  81.                         count emitter.getLife().getHighMax() 1000);  
  82.                 effect.getEmitters().clear();  
  83.                 effect.getEmitters().add(emitter);  
  84.                 return false;  
  85.              
  86.   
  87.             @Override  
  88.             public boolean scrolled(int arg0)  
  89.              
  90.                 // TODO Auto-generated method stub     
  91.                 return false;  
  92.              
  93.   
  94.             @Override  
  95.             public boolean keyUp(int arg0)  
  96.              
  97.                 // TODO Auto-generated method stub     
  98.                 return false;  
  99.              
  100.   
  101.             @Override  
  102.             public boolean keyTyped(char arg0)  
  103.              
  104.                 // TODO Auto-generated method stub     
  105.                 return false;  
  106.              
  107.   
  108.             @Override  
  109.             public boolean keyDown(int arg0)  
  110.              
  111.                 // TODO Auto-generated method stub     
  112.                 return false;  
  113.              
  114.   
  115.             @Override  
  116.             public boolean mouseMoved(int arg0, int arg1)  
  117.              
  118.                 // TODO Auto-generated method stub   
  119.                 return false;  
  120.              
  121.         };  
  122.         Gdx.input.setInputProcessor(inputProcessor);  
  123.      
  124.   
  125.     @Override  
  126.     public void dispose()  
  127.      
  128.         // 释放资源   
  129.         batch.dispose();  
  130.   
  131.      
  132.   
  133.     @Override  
  134.     public void pause()  
  135.      
  136.         // TODO Auto-generated method stub   
  137.   
  138.      
  139.   
  140.     @Override  
  141.     public void resize(int arg0, int arg1)  
  142.      
  143.         // TODO Auto-generated method stub   
  144.   
  145.      
  146.   
  147.     @Override  
  148.     public void resume()  
  149.      
  150.         // TODO Auto-generated method stub   
  151.   
  152.      
  153.   
  154.  
package com.example.libgdx_02_Particle;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.g2d.ParticleEffect;
import com.badlogic.gdx.graphics.g2d.ParticleEmitter;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.utils.Array;

public class Game implements ApplicationListener
{

        SpriteBatch batch;
        ParticleEffect effect;
        int index;
        Array emitters;
        int count;

        //一旦ApplicationListener开始运行,render函数就会不停执行
        @Override
        public void render()//着色, 渲染.
        {
                // TODO Auto-generated method stub
                Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);//清屏
                Gdx.gl.glClearColor(0f, 0f, 0f, 0f);

                batch.getProjectionMatrix().setToOrtho2D(0, 0, Gdx.graphics.getWidth(),
                                Gdx.graphics.getHeight());
                Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
                batch.begin();
                effect.draw(batch, Gdx.graphics.getDeltaTime());
                batch.end();

        }

        @Override
        public void create()
        {
                //初始化
                batch = new SpriteBatch();
                effect = new ParticleEffect();
                //加载文件
                effect.load(Gdx.files.internal("data/my.p"),
                                Gdx.files.internal("data/"));
                //设置特效位置
                effect.setPosition(Gdx.graphics.getWidth() / 2,
                                Gdx.graphics.getHeight() / 2);

                emitters = new Array(effect.getEmitters());
                effect.getEmitters().clear();
                effect.getEmitters().add(emitters.get(index));

                //点击屏幕移动, 设置输入
                InputProcessor inputProcessor = new InputProcessor()
                {

                        @Override
                        public boolean touchUp(int arg0, int arg1, int arg2, int arg3)
                        {
                                return false;
                        }

                        @Override
                        public boolean touchDragged(int arg0, int arg1, int arg2)
                        {
                                effect.setPosition(arg0, Gdx.graphics.getHeight() - arg1);
                                return false;
                        }

                        @Override
                        public boolean touchDown(int arg0, int arg1, int arg2, int arg3)
                        {
                                ParticleEmitter emitter = emitters.get(index);
                                count += 100;
                                if (count > emitter.getMaxParticleCount())
                                        emitter.setMaxParticleCount(count * 2);
                                count = Math.max(0, count);
                                emitter.getEmission().setHigh(
                                                count / emitter.getLife().getHighMax() * 1000);
                                effect.getEmitters().clear();
                                effect.getEmitters().add(emitter);
                                return false;
                        }

                        @Override
                        public boolean scrolled(int arg0)
                        {
                                // TODO Auto-generated method stub  
                                return false;
                        }

                        @Override
                        public boolean keyUp(int arg0)
                        {
                                // TODO Auto-generated method stub  
                                return false;
                        }

                        @Override
                        public boolean keyTyped(char arg0)
                        {
                                // TODO Auto-generated method stub  
                                return false;
                        }

                        @Override
                        public boolean keyDown(int arg0)
                        {
                                // TODO Auto-generated method stub  
                                return false;
                        }

                        @Override
                        public boolean mouseMoved(int arg0, int arg1)
                        {
                                // TODO Auto-generated method stub
                                return false;
                        }
                };
                Gdx.input.setInputProcessor(inputProcessor);
        }

        @Override
        public void dispose()
        {
                // 释放资源
                batch.dispose();

        }

        @Override
        public void pause()
        {
                // TODO Auto-generated method stub

        }

        @Override
        public void resize(int arg0, int arg1)
        {
                // TODO Auto-generated method stub

        }

        @Override
        public void resume()
        {
                // TODO Auto-generated method stub

        }

}

运行效果


有没有比微信还炫呢??



更多资料: http://www.apkbus.com/android-57456-1-1.html


源码下载http://download.csdn.net/detail/xn4545945/5643035

原创文章,转载请注明出处http://blog.csdn.net/xn4545945

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值