`
一口三个汉堡
  • 浏览: 112915 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

实例7---android 版Sprite代码

阅读更多

  因为android 没有提供sprite,对于使用j2me的开发者有些不习惯,我接下去的实例也会用的sprite,所以我就写个了android版的sprite,只提供了一些我平时常用到的方法,等以后有用到其他的,就增加其他的,大家也可以自己增加。算法可能不是很优化,大家可以自行修改。下面给出源码:

AndroidSprite.java

 

package com.wjh.my_sprite;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.Log;

public class AndroidSprite {
	
	
	private int length = 0;// 帧序列长度
	private int currentPosition = 0;//当前帧序列下标
	private int[][] framesXY = null;//各个帧序列在图片的坐标
	private int frameWidth = 0;//帧的宽度
	private int frameHeight = 0;//帧的高度
	private Bitmap bigFrames = null;//大的图片
	private int cols = 0;
	private int rows = 0;
	private int PositionX = 0;//精灵的X坐标
	private int PositionY = 0;//精灵的Y坐标
	
	private int[] frameSequence = null;//加入的帧序列
	private int sequencePosition = 0;//加入的帧序列的显示下标
	public AndroidSprite(Bitmap image,int frameWidth,int frameHeight)
	{
		//初始化
		this.bigFrames = image;
		this.frameWidth = frameWidth;
		this.frameHeight = frameHeight;
		
		framesXY = initSprite(image, frameWidth, frameHeight);
		this.length = framesXY.length;
	}
	//初始化精灵
	private int[][] initSprite(Bitmap bitmap,int frameWidth,int frameHeight)
	{
		int imageWidth = bitmap.getWidth();
		int imageHeight = bitmap.getHeight();
		this.cols = Math.round(imageWidth/frameWidth);//列数
		this.rows = Math.round(imageHeight/frameHeight);//行数
		
		int[][] tempXYs = new int[cols*rows][2];
		for(int i=0,k=0;i<rows;i++)
		{
			for(int j=0;j<cols;j++,k++)
			{
				tempXYs[k][0] = j*frameWidth;
				tempXYs[k][1] = i*frameHeight;
			}
		}
		
		
		return tempXYs;
	}
	//获得当前帧的下标
	public int getFrame()
	{
		return this.currentPosition;
	}
	//获得帧序列的长度
	public int getFrameSequenLength()
	{
		return framesXY.length;
	}
	//获得当前帧序列的下一个帧
	public void nextFrame()
	{
		//如果自定义帧序列为空,则使用默认的
		if(frameSequence==null)
		{
			currentPosition++;
			if(currentPosition>length-1)
			{
				currentPosition = 0;
			}
		}else
		{
			sequencePosition++;
			if(sequencePosition>frameSequence.length-1)
			{
				sequencePosition = 0;
			}
			currentPosition = frameSequence[sequencePosition];
		}
	}
	//获得当前帧序列的上一个帧
	public void prevFrame()
	{
		if(this.frameSequence==null)
		{
			currentPosition--;
			if(currentPosition<0)
			{
				currentPosition = length-1;
			}
		}else
		{
			sequencePosition--;
			if(sequencePosition<0)
			{
				sequencePosition = frameSequence.length-1;
			}
			currentPosition = frameSequence[sequencePosition];
		}
		
	}
	//设置当前帧
	public void setFrame(int sequenceIndex)
	{
		if(sequenceIndex>=0&&sequenceIndex<length)
		{
		this.currentPosition = sequenceIndex;
		}
	}
	//设置位置
	public void setPosition(int positionX,int positionY)
	{
		this.PositionX = positionX;
		this.PositionY = positionY;
	}
	
	//设置帧序列
	public void setFrameSequence(int[] sequence)
	{
		
		if(this.frameSequence!=null)
		{
			currentPosition = sequence[0];
			sequencePosition = 0;
		}else
		{
			this.frameSequence = sequence;
		}
	}
	//移动
	public void move(int x,int y)
	{
		PositionX += x;
		PositionY += y;
	}
	public void paint(Canvas canvas,Paint paint)
	{
		Log.d("ddd", ""+this.PositionX);
		Log.d("ddd", ""+this.PositionY);
		Bitmap bitmap = Bitmap.createBitmap(this.bigFrames, 
				this.framesXY[currentPosition][0],
				this.framesXY[currentPosition][1],this.frameWidth,this.frameHeight);
		canvas.drawBitmap(bitmap, PositionX, PositionY, paint);
	}
}
 

 

 下面为我写的一个运用这个AndroidSprite的例子,下面为源代码和实例图:


图片插入的时候没显示出来。。所以就不弄了。

 

 源码:MySprite.rar

  • 大小: 5.2 KB
  • 大小: 5.2 KB
0
0
分享到:
评论

相关推荐

    cocos2d-x学习笔记\cocos2d-x学习笔记(17)--简单游戏实例1--双枪手

    《cocos2d-x学习笔记(17)--简单游戏实例1--双枪手》 cocos2d-x是一款跨平台的2D游戏开发框架,基于C++,支持iOS、Android、Windows等多个操作系统。本笔记主要讲解如何使用cocos2d-x创建一个简单的双枪手游戏实例,...

    cocos2d-x学习笔记(17)--简单游戏实例1--双枪手

    【cocos2d-x学习笔记(17)--简单游戏实例1--双枪手】 cocos2d-x是一款基于C++的开源游戏开发框架,广泛应用于2D游戏、UI界面和实时渲染场景。本笔记将围绕如何使用cocos2d-x构建一个简单的双枪手游戏实例进行深入...

    实例代码 学习libgdx - SpriteBatch

    这个实例代码是学习如何使用libGDX中的SpriteBatch类的宝贵资源。 1. **SpriteBatch的介绍** SpriteBatch是libGDX用于批量绘制2D图像的工具。它的核心功能是减少OpenGL调用的次数,通过将多个绘制操作合并到一起,...

    Cocos2D-x权威指南-代码实例

    《Cocos2D-x权威指南-代码实例》是一本针对Cocos2D-x游戏开发框架的实战型指导书籍,旨在帮助开发者深入理解和掌握Cocos2D-x的各种功能和技巧。Cocos2D-x是一个跨平台的2D游戏开发框架,支持iOS、Android、Windows等...

    cocos2d-x游戏实例-简易动作游戏

    1. 跨平台性:cocos2d-x支持iOS、Android、Windows等多个平台,开发者只需编写一次代码,即可实现多平台部署。 2. 渲染引擎:cocos2d-x使用OpenGL ES进行图形渲染,提供了丰富的2D图形绘制功能,如精灵(Sprite)、...

    cocos2d-android-1

    学习Cocos2d-android-1,首先应从基础概念和环境搭建入手,然后通过实例代码逐步了解并掌握游戏对象的创建、更新和渲染。随着对API的熟悉,开发者可以尝试编写简单的游戏,如跑酷、打砖块等,进一步熟悉游戏逻辑和...

    行业文档-设计装置-一种IOS和Android平台上的组件式游戏构建方法.zip

    在游戏开发领域,组件式游戏构建方法是一种高效且灵活的设计策略,它被广泛应用于iOS和Android等多平台的游戏开发中。这种技术的核心理念是将游戏对象拆分为多个可复用的组件,每个组件负责特定的功能,如动画、物理...

    android andengine 代码 AnimatedSprite 实例

    在Android游戏开发中,AndEngine是一个非常受欢迎的2D游戏引擎,它提供了丰富的功能和工具,使得开发者可以轻松创建各种2D游戏。本实例主要关注AndEngine中的`AnimatedSprite`类,这是一个用于处理动画精灵的重要...

    《Cocos2D-x权威指南》代码实例

    该书的代码实例部分提供了丰富的示例,帮助读者理论结合实践,深化对Cocos2D-x的理解。 在学习Cocos2D-x时,以下几个核心知识点是必不可少的: 1. **基本概念**:了解Cocos2D-x中的节点(Node)、场景(Scene)、...

    cocos2d-x 实例源码

    本实例“愤怒的松鼠”是基于cocos2d-x框架编写的一款游戏,提供了完整的源代码,对于学习和理解cocos2d-x的使用方法以及游戏开发流程具有极高的参考价值。 首先,让我们深入了解cocos2d-x的核心特性。cocos2d-x提供...

    《Cocos2d-x权威指南》第11章实例代码

    特别提到的"纵版"标签可能意味着这些实例代码专注于开发竖屏游戏,这在手机游戏中尤其常见。这涉及到如何适配不同屏幕尺寸、调整布局和控制方向,以及如何处理触摸事件等相关问题。 总的来说,这个压缩包提供了从...

    基于cocos2d-android开发的猜成语游戏

    这款猜成语游戏就是利用cocos2d-android进行开发的实例,主要面向Android平台,能够兼容Android 2.3及以上的操作系统版本。 一、cocos2d-android基础知识 1. **cocos2d**: 原本是针对iOS平台的一个2D游戏引擎,...

    Cocos2d-X权威指南完全扫描版-拆分-卷一

    本书分为两卷,卷一包含了前200页的内容,卷二涵盖了200到360页,另外还附带了相关的代码实例,旨在帮助读者全面理解并掌握Cocos2d-X的开发技巧。 在卷一中,作者首先会介绍Cocos2d-X的基础概念,包括游戏开发的...

    基于cocos2d-2.0-x-2.0.3的游戏实例魔塔(win版)

    《基于cocos2d-2.0-x-2.0.3的游戏实例——魔塔(win版)详解》 在游戏开发的世界里,cocos2d-x是一个广受欢迎的开源跨平台2D游戏引擎,它基于C++,并提供了Python和Lua等语言的绑定,使得开发者能够快速构建游戏。...

    android游戏开发原创实例人物移动+子弹+跳高

    在Android游戏开发中,创建一个具有人物移动、子弹发射以及跳跃功能的游戏实例是一个常见的实践,这对于初学者来说是一个很好的学习项目。在这个实例中,我们将深入探讨Android游戏开发的基础知识,包括2D图形处理、...

    android坦克大战游戏实例

    《Android坦克大战游戏实例解析》 在Android平台上开发游戏,尤其是经典的坦克大战,是一个极好的实践项目,适合初学者入门并提升技能。本实例将深入探讨如何利用Android Studio和Java语言构建一个简单却有趣的坦克...

    cocos2dx lua核心编程(第二版)配套代码

    《Cocos2d-x之Lua核心编程(第二版)》配套代码是一份极其重要的学习资源,旨在帮助开发者深入理解和熟练运用Cocos2d-x游戏引擎与Lua语言进行游戏开发。Cocos2d-x是一个跨平台的游戏开发框架,而Lua则是一种轻量级的...

    魔塔游戏(某教程的实例,已改成cocos2d-x 3.2)

    "Classes"目录则包含游戏的源代码,如场景(Scene)、层(Layer)、实体(Sprite)以及各种逻辑类。开发者会在这里定义游戏的逻辑和交互,如角色移动、攻击计算、状态更新等。 详细讲解: 1. **cocos2d-x 3.2框架*...

    cocos2d-x权威指南源代码

    压缩包中的代码实例通常会对应书中的各个章节,每个实例都对应一个具体的功能或技术点,通过实际操作和调试这些代码,开发者可以加深对理论知识的理解,提高编程技能。这些实例可能包括简单的“Hello, World!”程序...

Global site tag (gtag.js) - Google Analytics