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 游戏教程让人物动起来的更多相关文章
- 如何在macox下面配置集成ios和android游戏教程
教程截图: 1.准备工作,配置开发环境: 开发环境:mac ox 10.7.3 + xcode4.2 + ndk r7 + eclipse helios 部署环境:中兴v880 root过了 ...
- [Unity3D]Unity+Android交互教程——让手机"动"起来
想要用Unity实现一个二维码扫描的功能,然后网上找插件,找到一个貌似叫EasyCodeScanner,但下载下来用用,真不好使,一导入运行就报错,调好错了再运行发现点按钮没反应,反复试了几遍发现还是 ...
- 《MFC游戏开发》笔记四 键盘响应和鼠标响应:让人物动起来
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9327377 作者:七十一雾央 新浪微博:http:// ...
- 八款常见的Android游戏引擎
原文地址:http://bbs.csdn.net/topics/380203732 1.Angle Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL ...
- Google Map和桌面组件 Android开发教程
本文节选于机械工业出版社推出的<Android应用开发揭秘>一 书,作者为杨丰盛.本书内容全面,详细讲解了Android框架.Android组件.用户界面开发.游戏开发.数据存储.多媒体开 ...
- 记录一下八款开源 Android 游戏引擎
记录一下八款开源 Android 游戏引擎 虽然android学了点点,然后现在又没学了(我为啥这么没有恒心呢大哭).以后有时间还是要继续学android的,一定要啊!虽然现在没学android游戏编 ...
- Android破解学习之路(三)——Android游戏 切水果破解
经过前两篇破解教程,想必大家也是明白了破解的简单流程了. 先对APP进行试用,了解APP运行的大概流程,之后从APP中找出关键字(一般的关键字差不多都是支付失败),之后使用Androidkiller进 ...
- [Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)
初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...
- [Android游戏开发学习笔记]View和SurfaceView
本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在A ...
随机推荐
- <python 深入理解>变量交换x,y=y,x实现机制--元组
python中有一种赋值机制即多元赋值,采用这种方式赋值时,等号两边的对象都是元组并且元组的小括号是可选的.通常形式为 x, y, z = 1, 2, 'a string' 等同于 (x, y, z) ...
- Java开发工具安装步骤内容如下
Java开发工具安装步骤内容如下 安装 开发工具 STS 链接下载网址 eclipse 链接下载网址 JDK安装 jdk链接下载地址 Marven环境 marven链接下载地址 Tomcat tomc ...
- MVC5 + EF6 完整入门教程三:EF来了
期待已久的EF终于来了 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型,将之前的示例添加数据库查询验证功能. 文章提纲 概述 & ...
- VUE JS 使用组件实现双向绑定
1.VUE 前端简单介绍 VUE JS是一个简洁的双向数据绑定框架,他的性能超过ANGULARJS,原因是实现的机制和ANGULARJS 不同,他在初始化时对数据增加了get和set方法,在数据se ...
- I/O
IO流:1:字节流(inputStream:输入流)(outputStream:输出流).2:字符流(reader:输入流)(winter:输出流). 首先判断是输入还是输出(站在计算机的立场):其次 ...
- 转: Hibernate HQL查询 插入 更新(update)实例
1.实体查询:有关实体查询技术,其实我们在先前已经有多次涉及,比如下面的例子:String hql=”from User user ”;List list=session.CreateQuery(hq ...
- JS-DOM基础
1 JS-DOM 全称:document object model 1.1 获取页面元素 getElementsByTagName():无论元素的数量是多少,都会存入数组 getElement ...
- solution to E: failed to fetch .......
There are some issues today for me that my desktop can't boot as I expected, I installed windows 8.1 ...
- ssh框架文件上传下载
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用VMware Workstation 12.5.2新建虚拟机
关于VMware版本:VMware10可以支持32位和64位操作系统,VMware11及以上版本只能支持64位Win7及以上版本的操作系统!同时,VMware Workstation 10.0正式版发 ...