Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 817|回复: 0

Android 游戏开发对象移动(一) - Android学习

[复制链接]

该用户从未签到

发表于 2011-10-27 08:21:06 | 显示全部楼层 |阅读模式
       该游戏对象移动,以view的背景作动画,假设开始的位置是父View坐标的(0,0) 游戏角色view的事件监听应该在父view中监听。同时注意,AnimationDrawable.start()不能在Activity.onCreate事件未执行完就调用,但可以用在比如点击按纽后就调用等。

java代码: public class Dog extends View implements OnKeyListener, Runnable {



// 左右移动对应不同的背景动画,用这个记下当前的背景动画



private AnimationDrawable nowAnim;



// 左移动对应的背景动画



private AnimationDrawable animLeft;



// 右移动对应的背景动画



private AnimationDrawable animRight;



private View parent;



// 记下view的坐标位置,用于移动后重画该区域。该坐标是相对于父View的。

// 同时要注意,如果父View是有padding的,要算上,因为是以父Vew的左上角点为原点的



// padding最好为每次位移量的正倍数。l,t,r,b为实时的坐标位置,step为每次位移量



private int l=0,t=0,r=22,b=20,step=3;



public Dog(Context context, View parent) {

super(context);



// TODO Auto-generated constructor stub



this.parent = parent;



// 记下父容器,即父View



l += parent.getPaddingLeft(); t += parent.getPaddingTop();



r += parent.getPaddingRight(); b += parent.getPaddingBottom();



// 如果父view有padding,要算上,因为view的坐标是以父view的左上角为原点的



// 生成左和右移动对应的背景动画,其实只是一个png,有对象移动时是的几个图片,将其分拆成移动的动画



animLeft = AndroidUtils.animationFromSplitImage(context, R.drawable.woniu, 22, 20, 200);

// 只需一个移动方向的png就行了,该animationFromSplitImage函数是将图像水来翻转。



animRight = AndroidUtils.animationFromSplitImage(AndroidUtils.imageFlipHorizintal(context, R.drawable.woniu), 22, 20, 200);



setAnimationDrawable( animRight );



//this.setOnKeyListener( this );

}

private void setAnimationDrawable(AnimationDrawable anim) {

if( nowAnim != null ) {

nowAnim.stop();

// 必须要先stop才行,不然会影响到下一个动画的情况

nowAnim = null;

}

nowAnim = anim;

this.setBackgroundDrawable(nowAnim);

}

// 返回当前的动画,用于在其它地方控制停止等。

public AnimationDrawable getBgAnimationDrawable() {

return nowAnim;

}

public boolean onKey(View v, int keyCode, KeyEvent event) {

// TODO Auto-generated method stub

if( event.getAction() == KeyEvent.ACTION_DOWN )

{

switch (keyCode)

{

case KeyEvent.KEYCODE_DPAD_LEFT: {

if( getLeft()>parent.getPaddingLeft() ) {

// 左或右位移量,是相对当前View的坐标

offsetLeftAndRight(-1*step);

// 记下当前的坐标值,用于在父view中重画经过的区域。

l -= step;

}

if( animLeft != nowAnim ) {

setAnimationDrawable( animLeft );

nowAnim.start();

}

break ;

}
复制代码
系列之Android 游戏开发对象移动(二)的帖子链http://www.eoeandroid.com/thread-93623-1-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 22:46 , Processed in 0.380343 second(s), 46 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表