在这里给大家分享Android游戏教程怎样让人物动起来,话不多说了,直接进入正题。

一. 准备工作
     首先要准备好要使用的人物动作图和地形图。把它分割成16个不同的动作,循环播放同一行的4个不同动作就可以让人物动起来了。

二. 动画实现
    按照简单的android游戏框架所述先搭建一个框架,接着编写如下类:
     
    人物类Person主要代码如下:

private int x;  
        private int y;  
        private int dist;//行走方向  
        private int spd;//行走速度  
        private boolean isMove;  
        private Bitmap img;  
        private int imgXId;//图片的横向切片编号  
        private int imgYId;//图片的纵向切片编号  
        private int actTime;//动画间隔时间  
          
        public Person(Context con,int x,int y) {  
            //人物中心点  
            this.x=x;  
            this.y=y;  
              
            dist=Constants.DOWN;  
            isMove=false;  
            spd=2;  
            img=GraphicUtil.ReadBitMap(con, R.drawable.bb);  
            imgXId=0;  
            imgYId=0;  
        }  
          
        public void draw(Canvas c, Paint p) {  
            //图片的左上角坐标  
            int ix=x-Constants.PERSON_WIDTH/2;  
            int iy=y-Constants.PERSON_HEIGHT/2;  
              
            GraphicUtil.DrawClipById(c, p, Constants.PERSON_WIDTH, Constants.PERSON_HEIGHT,  
                    img, imgXId, imgYId, ix, iy);  
        }  
          
        public void act() {  
            if(isMove) {  
                if(actTime<Constants.ACT_TIME)   
                    actTime++;  
                else if(actTime>=Constants.ACT_TIME)  
                    actTime=0;  
                imgXId=actTime*actTime/Constants.ACT_TIME;  
              
                switch(this.dist) {  
                    case Constants.UP:  
                        y-=spd;  
                        imgYId=3;  
                        break;  
                    case Constants.DOWN:  
                        y+=spd;  
                        imgYId=0;  
                        break;  
                    case Constants.RIGHT:  
                        x+=spd;  
                        imgYId=2;  
                        break;  
                    case Constants.LEFT:  
                        x-=spd;  
                        imgYId=1;  
                        break;  
                }  
                  
                //控制行走范围不超出屏幕  
                x=x<0?0:x;  
                x=x>GameAct.GetDispW()?GameAct.GetDispW():x;  
                y=y<0?0:y;  
                y=y>GameAct.GetDispH()?GameAct.GetDispH():y;  
            }  
        }  
          
        public void move(int dist) {  
            this.dist=dist;  
            this.isMove=true;  
        }  
          
        public void stop() {  
            this.isMove=false;  
            actTime=0;  
        }

打开api文档,找到 com.zxx43.commen.graphic.GraphicUtil 可以看到 ReadBitMap(java.lang.String src) 和 ReadBitMap(Context context, int resId) 两个方法,通过这两个方法可以获得bitmap对象,前一个方法是根据文件路径加载图片,后一个方法是根据资源id加载图片。
   DrawClipById(Canvas c, Paint p, int cw, int ch, Bitmap file, int idX, int idY, int x, int y) 方法绘制切片,cw和ch是图片的切片宽度和高度,idX和idY是图像的横向和纵向编号。

接着绘制背景,新建BackMap类,主要代码如下:

private Bitmap texture;  
          
        public BackMap(Context con) {  
            texture=GraphicUtil.ReadBitMap(con, R.drawable.texture);  
        }  
          
        public void draw(Canvas c, Paint p) {  
            int imgX=0;  
            int imgY=0;  
            int wc=GameAct.GetDispW()/Constants.TILE_WIDTH;  
            int hc=GameAct.GetDispH()/Constants.TILE_WIDTH;  
            //将图像铺满屏幕  
            for(int i=0;i<wc;i++) {  
                for(int j=0;j<hc;j++) {  
                    int x=i*Constants.TILE_WIDTH;  
                    int y=j*Constants.TILE_WIDTH;  
                    GraphicUtil.DrawClipById(c, p, Constants.TILE_WIDTH, Constants.TILE_WIDTH,   
                            texture, imgX, imgY, x, y);  
                }  
            }  
        }

然后把它们在一个类里面实例化对象:

BackMap bm;  
        Person per;  
        int time=0;  
          
        public Scene(Context con) {  
            init(con);  
        }  
          
        private void init(Context con) {  
            bm=new BackMap(con);  
            int px=GameAct.GetDispW()-GameAct.GetDispW()/6;  
            int py=GameAct.GetDispH()/6;  
            per=new Person(con,px,py);  
        }  
          
        public void draw(Canvas c,Paint p) {  
            bm.draw(c, p);  
            per.draw(c, p);  
        }  
          
        public void act() {  
            //人物逆时针行走  
            int dist=Constants.NONE;  
            int timer=100;  
            if(time<timer)  
                dist=Constants.LEFT;  
            else if(time<2*timer)  
                dist=Constants.DOWN;  
            else if(time<3*timer)  
                dist=Constants.RIGHT;  
            else if(time<4*timer)  
                dist=Constants.UP;  
            else if(time>=4*timer)  
                time=0;  
            time++;  
                  
            per.move(dist);  
            per.act();  
        }

最后编写Game.java:

private Scene scene;  
          
        public Game(Context con) {  
            super(con);  
            scene=new Scene(con);  
        }  
          
        @Override  
        public void run(Context con, Canvas c, Paint p) {  
            scene.draw(c,p);  
            scene.act();  
        }

通过以上代码实现了逐帧动画的播放,很简单是不是?

现在动画是实现了,但是还不能自己控制,后面会有关于触屏控制和虚拟键盘。

觉得有用的朋友还请多多支持我,后面我还会上传更多有用的源码教程,或者直接访问我主办的棋牌社区查看,查看更多有用源码。

Android 游戏教程让人物动起来的更多相关文章

  1. 如何在macox下面配置集成ios和android游戏教程

    教程截图: 1.准备工作,配置开发环境: 开发环境:mac ox 10.7.3  +   xcode4.2  + ndk r7 + eclipse helios 部署环境:中兴v880  root过了 ...

  2. [Unity3D]Unity+Android交互教程——让手机"动"起来

    想要用Unity实现一个二维码扫描的功能,然后网上找插件,找到一个貌似叫EasyCodeScanner,但下载下来用用,真不好使,一导入运行就报错,调好错了再运行发现点按钮没反应,反复试了几遍发现还是 ...

  3. 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9327377 作者:七十一雾央 新浪微博:http:// ...

  4. 八款常见的Android游戏引擎

    原文地址:http://bbs.csdn.net/topics/380203732 1.Angle  Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL  ...

  5. Google Map和桌面组件 Android开发教程

    本文节选于机械工业出版社推出的<Android应用开发揭秘>一 书,作者为杨丰盛.本书内容全面,详细讲解了Android框架.Android组件.用户界面开发.游戏开发.数据存储.多媒体开 ...

  6. 记录一下八款开源 Android 游戏引擎

    记录一下八款开源 Android 游戏引擎 虽然android学了点点,然后现在又没学了(我为啥这么没有恒心呢大哭).以后有时间还是要继续学android的,一定要啊!虽然现在没学android游戏编 ...

  7. Android破解学习之路(三)——Android游戏 切水果破解

    经过前两篇破解教程,想必大家也是明白了破解的简单流程了. 先对APP进行试用,了解APP运行的大概流程,之后从APP中找出关键字(一般的关键字差不多都是支付失败),之后使用Androidkiller进 ...

  8. [Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)

    初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...

  9. [Android游戏开发学习笔记]View和SurfaceView

    本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在A ...

随机推荐

  1. jquery 源码解析 节点遍历

    jquery遍历,用于根据其相对于其他元素的关系来查找或选取html元素,以某项选择开始,并沿着这个选择移动,知道移动被称为对dom进行遍历 ☑ <div> 元素是 <ul> ...

  2. SQL SERVER 2008

    sql server 2008 r2 下载安装教程 sql server 2008 是微软公司开发的一套数据库管理系统.是目前大型数据库中常用数据库之一.性能稳定,功能强大,是面向中大型企业的一款数据 ...

  3. guava学习--FutureCallback

    转载:https://my.oschina.net/realfighter/blog/349929 Guava提供了 FutureCallback接口,FutureCallback接口提供了onSuc ...

  4. JAVA求集合中的组合

    好几个月没弄代码了,今天弄个求组合的DEMO 思路是将集合的每个值对照一个索引,索引大小是集合的大小+2.索引默认为[000...000],当组合后选取的组合值demo为[0100..00].然后根据 ...

  5. vs安装后当切换到图形设计界面的时候自动弹出“正在准备安装的提升”,然后程序处于假死状态

    Vs2008 安装后当切换到图形设计界面的时候自动弹出 ”正在准备安装的提示“,然后程序处于假死状态 在网上找了很多,最终解决问题:  从vs2008安装光盘中找到 /WCU/WebDesignerC ...

  6. LNAMP服务器环境搭建(手动编译安装)

    LNAMP服务器环境搭建(手动编译安装) 一.准备材料 阿里云主机一台,操作系统CentOS 6.5 64位 lnamp.zip包(包含搭建环境所需要的所有软件) http://123.56.144. ...

  7. PHP文件的读取

    1.PHP部分文件操作函数 ( fopen ,fread ,filesize,fwrite,fclose ) 2.unlink()  rmdir() 删除函数 unlink(路径和文件名): rmdi ...

  8. 新手mysql 基础语法

    SELECT * from new; SELECT stuname FROM new; //查询某一列 SELECT DISTINCT stuname FROM new; //查询同一列中不同的值 S ...

  9. JSTL跳出<c:forEach>循环

    <c:forEach items="${consultPager.dataList }" var="consult"> <tr> < ...

  10. NOIP2016之反面教材提供

    NOIP 2016信息竞赛总结 竞赛历程总结: 算下来一共学了11个月的信息竞赛,从最初进来的时候大概会一点最最基础的语法,上课什么也听不懂,然后一直追进度,我想在这个阶段中我的问题主要是自己知道自己 ...