Android 游戏教程让人物动起来

在这里给大家分享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 游戏教程让人物动起来,码迷,mamicode.com

时间: 2025-01-08 00:49:44

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

Android游戏开发之主角的移动与地图的平滑滚动

人物移动地图的平滑滚动处理 玩过rpg游戏的朋友应该都知道RPG的游戏地图一般都比较大 今天我和大家分享一下在RPG游戏中如何来处理超出手机屏幕大小的游戏地图. 如图所示为程序效果动画图 地图滚动的原理 在本人之前博客的文章中介绍过人物在屏幕中的移动方式,因为之前拼的游戏地图是完全填充整个手机屏幕的,所以无需处理地图的平滑滚动.这篇文章我着重的向 大家介绍一下控制人物移动后地图滚动的处理方式.举个例子 如上图所示 比如人物向右移动,如果地图贴在屏幕左边边界 将先移动人物在地图的坐标,当人物在屏幕

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

本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在Android中涉及到显示的是View类,及继承自它的SurfaceView类和SurfaceView的其他子类等. 这里先只说View和SurfaceView.SurfaceView的直接子类有GLSurfaceView和VideoView,可以看出GL和视频播放以及CAmera摄像头一般均使用Su

Quick-Cocos2d-x初学者游戏教程(二) -------------------- Quick内部的代码结构及相应的原理

Quick-Cocos2d-x初学者游戏教程(二) 上一章我们已经了解了Quick的一些基础知识,所以本章我们将开始深入到Quick内部,了解它内部的代码结构,同时在解析的过程中学到相应的原理,并学会如何修改.添加相应的代码文件,比如实现屏幕的分辨率适配. 前面我们创建了一个叫做parkour的游戏项目,其意思就是本人本来打算要做一个跑酷游戏的,但是因为这几天玩了一款叫做<el>的飞行游戏,非常有意境,并且几乎零差评,所以请允许我任性一下,善变的我不想做跑酷游戏了,而是想要挑战下这种类型的游戏

Unity3D For Android 开发教程

原地址:http://game.ceeger.com/Unity/Doc/2011/Unity3D_For_Android.html 我自认为抵挡诱惑的能力还是很强大的,关键的时候还能把持住自己.今天逛了一下南京的丹凤街,终于受不住Android这美眉的诱惑.她虽脸蛋不怎么滴,但身材火热,且性感,廉价,低碳!长相平凡,却气质绝佳!虽出道不久,却已经在江湖搅起一股血雨腥风.在这阳光明媚的一天我给大家讲讲Unity3D的小安开发步骤.其实就是发布步骤啦! 第一步: 先去下载一个Android-SDK

linux.linuxidc.com - /2011年资料/Android入门教程/

本文转自 http://itindex.net/detail/15843-linux.linuxidc.com-%E8%B5%84%E6%96%99-android Shared by Yuan 用户名与密码都是www.linuxidc.com linux.linuxidc.com - /2011年资料/Android入门教程/ [转到父目录] 2011年7月16日 21:33 <目录> Android 3D 游戏开发教程 2011年8月18日 13:26 <目录> Android

Unity 3D:在现有的Android游戏场景中显示AdMob的横幅

关于如何在现有的Android项目现场显示AdMob的横幅,在一个Android项目中使用一个简单的Android JAR文件似乎不是一个简单的事情.我终于设法让AdMob在现有工作统一安卓游戏.对于本例,我使用统一为Windows版本3.5.2和最新的Eclipse为Android插件. 先决条件我假设您有一个工作在你的电脑上安装Android的Eclipse插件.如果没有,请按照本教程准备工作区: https://github.com/unity-plugins/Unity-Admob. E

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

初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引擎可供使用,一边自暴自弃的抱怨Android平台游戏开发难度太高,又连个像样的游 戏引擎也没有,甚至误以为使用Java语言开发游戏是一件费力不讨好且没有出路的事情. 事实上,这种想法完全是没有必要且不符合实际的,作为能和苹果iOS分庭抗礼的Android(各种意义上),当然也会有相当数量的游戏引擎存

android游戏开发框架libgdx的使用(十三)—TiledMap中的角色和角色移动

http://www.cnblogs.com/htynkn/archive/2012/01/13/libgdx_13.html 本文紧跟上文,地址:android游戏开发框架libgdx的使用(十二)—TiledMap地图的使用 地图我们创建好了接下来就是主角的出现.其实上文介绍了如何TiledMap和Stage的结合,角色的处理就简单了. 可以继承Actor类创建主角类,我就偷个懒,用Image代替. 编辑我们的TMX文件,添加一个对象层. 在主角要出现的地方加个形状 取名为play1 我们的

Quick-Cocos2d-x初学者游戏教程(十) ---------------- 添加游戏障碍物

Quick-Cocos2d-x初学者游戏教程(十) 在我们的游戏中,我们除了添加奖励品外,还需要添加一些必要的障碍物来丰富游戏逻辑,增加游戏难度,所以本章我们将继续上章的内容——添加游戏障碍物.游戏中,障碍物是不止一种,这里有飞行的鸟,有上下移动的飞艇. 创建障碍物-飞艇 其实创建飞艇的逻辑和前面创建心心的逻辑是一样的,只不过这里我想让飞艇不停的上下移动,一方面做点带感的效果出来,另一方面也可以增加游戏难度. 看过之前教程的童鞋,现在应该懂得怎样创建这样的一个飞艇了吧.所以下面我们直接给出它的定