位置: 编程技术 - 正文

Android游戏开发基础(Android游戏开发读后感)

编辑:rootadmin

推荐整理分享Android游戏开发基础(Android游戏开发读后感),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:Android游戏开发案例教程小小弹球,android游戏开发框架,Android游戏开发案例教程小小弹球,android游戏开发框架,android游戏开发框架,Android游戏开发实训总结,Android游戏开发实训总结,Android游戏开发教程,内容如对您有帮助,希望把文章链接给更多的朋友!

一.处理输入设备

1.处理单点触摸事件

public abstract boolean onTouch(View view,MotionEvent event);

MotionEvent主要包含下列三个方法:

①MotionEvent.getX()

②MotionEvent.getY()//报告触摸事件相对于View的 X和Y坐标

③MotionEvent.getAction()//返回触摸事件的类型

MotionEvent.ACTION_DOWN

MotionEvent.ACTION_MOVE

MotionEvent.ACTION_CANCEL

MotionEvent.ACTION_UP

2.处理多点触摸事件

Public abstract boolean onTouch(View view,MotionEvent event);

event.getX(pointerIndex)

event.getY(pointerIndex)//返回一根手指触摸屏幕的坐标 &#;

Int pointerIndex=(content.getAction()&MotionEvent.ACTION_POINTER_ID_MASK)>>MotionEvent.ACTION_POINTER_ID_SHIFT;//得到事件的索引

Int action=event.getAction()&MotionEvent.ACTION_MASK;//得到操作掩码

3.处理按钮事件

为了接收按钮事件,视图必须获得焦点:

View.setFocusableInTouchMode(true);

//确保视图可获得焦点

View.requestFocus();

//请求该视图获得焦点

Public boolean onKey(View view,int keyCode,KeyEvent event)

//view参数指定接受该按钮事件的视图,keyCode参数是 一个KeyEvent类 中定义的常量,最后一个参数是按钮事件本身,具有其他一些信息

KeyEvent中的方法:

KeyEvent.getAction():返回KeyEvent.ACTION_DOWN、 KeyEvent.ACTION_UP

KeyEvent.getUnicodeChar():返回该按钮在文本段中产生的Unicode字符

4.读取加速计状态

(1)确认设备上是否具有一个加速计

①获取一个Sensor实例,表明设备是否安装了加速器,及是在哪里注册监听器

SensorManager manager=(SensorManager)Context.getSystemService(Context.SENSOR_SERVICE);

②检查加速计是否可用

Boolean hasAccel=manager.getSensorList(Sensor.TYPE_ACCELEROMETER).size()>0;

(2)通过SensorManager来获取已经安装了的加速计,并向其注册 SensorEventListener

Sensor sensor=manager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);

boolean success=manager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_GAME);

//参数SensorManager.SENSOR_DELAY_GAME用来指定 //监听器更新的频率,其更新内容来自加速计的最新状态。//这个特殊常量是专为游戏开发而设计的

(3)接收SensorEvent

Public void onSensorChanged(SensorEvent event)

//只有在传感器的状态发生改变时,才会调用该方法。 //但加速计的状态是时刻改变的

(4)处理SensorEvent

SensorEvent.values[0]//保存x轴的&#;

SensorEvent.values[1]//保存y轴的&#;

SensorEvent.values[2]//保存z轴的&#;

5.读取罗盘状态

将“读取加速计状态”中所有的Sensor.TYPE_ACCELEROMETER的地方替换为Sensor.TYPE_ORIENTATION即可

二.文件处理

1.读取资源文件

①获取AssetManager

AssetManager assetManager=Context.getAssets();

②打开任何类型的文件

InputStream inputStream=assetManager.open(“dir/dir2/filename.txt”);

//AssetManager.open()方法唯一的参数是相对于asset目录的文件名

2.访问外部存储

①请求实际访问外部存储空间的权限,需要在清单文件的<uses-permission>元素中添加该权限

<uses-permission android:name="string"/> //用于指定我们想请求的权限的名称,包括

/*

android.permission.RECORD_AUDIO:允许访问音频录制硬件

android.permission.INTERNET:允许访问所有的互联网API

android.permission.WRITE_EXTERNAL_STORAGE:允许读写外部存储器的文件

android.permission.ACCESS_COARSE_LOCATION:允许获得非GPS级别的访问权限,如用户所在的国家,这对配置语言的默认设置和分析十分有用

android.permission.WAKE_LOCK:允许获得一个唤醒锁

android.permission.NFC:允许应用程序通过NFC(Near-Field Communication,近场通信)执行IO,这对于涉及快速交换少量信息的游戏功能十分有用。

*/

②检查用户的设备上是否实际存在可用的外部存储空间

String state=Environment.getExternalStorageState();

如果state.equals(Environment.MEDIA_MOUNTED)返回true,则我们具有读写外部存储空间的全部权限

无法访问SD卡的原因:创建一个AVD并选择不模拟SD卡;该外部存储设备正在被其他对象使用

③获取其根目录的名称

File externalDir=Environment.getExternalStorageDirectory();

3.共享的首选项

Android为存储应用程序的键&#;对提供了一个简单的API,称为SharedPreferences。

①从活动中获得SharedPreferences

SharedPreferences prefs=PreferenceManager.getDefaultSharedPreferences(this);//该SharedPreferences用于在该上下文中共享

SharedPreferences prefs=getPreferences(Context.MODE_PRIVATE);//允许选择共享首选项的私密程度,选项包括Context.MODE_PRIVATE,Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE

②获得编辑器

Edit editor=prefs.edit();

③插入&#;

editor.putString("key1","banana");

eidtor.putInt("key2",5);

④保存

editor.commit();

⑤读取&#;

String value1=prefs.getString("key1",null);

int value2=prefs.getInt("key2",0);

三.音频编程

在播放音效或音乐之前,确定音量按钮控制了正确的音频流:

Context.setVolumeControlStream(AudioManager.STREAM_MUSIC);

在活动的生命周期内该方法只需调用一次,最好在Activity.onCreate()方法中调用

1.播放音效

①初始化SoundPool实例

SoundPool soundPool=new SoundPool(,AudioManager.STREAM_MUSIC,0);

//第一个参数指定在同一个时刻最多能播放音效的个数,第二个参数指定了SoundPool使用什么音频流来输出该音频

②获取一个AssetFileDescriptor,并从一个音频文件加载音效到堆内存中

AssetFileDescriptor descriptor=assetManager.openFd("explosion.ogg");

int explosionId=soundPool.load(descriptor,1);

//load()方法中的第一个参数是AssetFileDescriptor,第二个参数用于指定该音效的优先级

③播放音效

SoundPool.paly(explosionId,1.0f,1.0f,0,0,1);

//第一个参数是从SoundPool.load()方法接收的句柄,接下来两个参数用于指定左右声道的音量,第四个参数是优先级,第五个参数指定音效循环播放的频率,最后一个参数是播放速率

④不在需要一个音效时,释放内存

SoundPool.unload(explosionId);

2.音乐流

①初始化MediaPlayer实例

MediaPlayer mediaPlayer=new MediaPlayer();

②告诉MediaPlayer播放什么文件

AssetFileDescriptor descriptor=assetManager.openFd("music.ogg");

mediaPlayer.setDataSource(descriptor.getFileDescriptor(),descriptor.getShortOffset(),descriptor.getLength());

③让MeidaPlayer做好播放的准备

mediaPlayer.prepare();

④启动播放

mediaPlayer.start();

⑤暂停播放

mediaPlayer.pause();

//只有当成功准备好MediaPlayer并已启动播放时,调用此方法才会生效。为了恢复一个暂停的MediaPlayer,可再次调用MediaPlayer.start()方法而不必做任何准备

⑥停止播放

mediaPlayer.stop();

//当想启动一个停止的MediaPlayer时,需再次调用MediaPlayer.prepare()

Android游戏开发基础(Android游戏开发读后感)

⑦设置循环播放

mediaPlayer.setLooping(true);

⑧调整音乐播放的音量

mediaPlayer.setVolume(1,1);

⑨检查该播放是否完成

mediaPlayer.setOnCompletionListener(listener);

boolean isPlaying=mediaPlayer.isPlaying();//轮询

释放资源

mediaPlayer.release();

四.基本图形编程

1.使用唤醒锁

①在清单文件中添加名为android.permission.WAKE_LOCK的<uses-permisson>标记

②从PowerManager中获取一个WakeLock的实例

PowerManager powerManager=(PowerManager)context.getSystemService(Context.POWER_SERVICE);

WakeLock wakeLock=powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK,"My lock");

③启动该唤醒锁

wakeLock.acquire();

④禁用或释放该唤醒锁

wakeLock.release();

通常,在Activity.onCreate()方法中实例化WakeLock,在Activity.onResume()方法中调用WakeLock.acquire(),而在Activity.onPause(0方法中调用WakeLock.release()

2.全屏

①去掉活动的标题栏

requestWindowFeature(Window.FEATURE_NO_TITLE);

②去掉通知栏

getWindow().getFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN,);

//必须在设置活动的内容视图之前调用这两个方法

3.在UI线程中不断渲染

①创建一个继承自View的类,并重写View,onDraw(0方法

class RenderView extends view

{

public RenderView(Context context)

{

super(context);

}

protected void onDraw(Canvas canvas)

{

invalidate();//在onDraw()方法的尾部调用此方法,使该类重绘

}

}

②Canvas中用一个特定的颜色来渲染目标对象的方法是Canvas.drawRGB()

Canvas.drawRGB(int r,int g,int b);

4.获取屏幕分辨率和坐标系统

返回Canvas渲染目标对象的宽度和高度的像素&#;‘

int width=canvas.getWidth();

int height=canvas.getHeight();

5.绘制简单的形状

(1)绘制像素

①实例化Paint类并设置颜色

Paint paint=new Paint();

paint.setARGB(alpha,red,green,blue);

//或者是paint.setColor(Oxffff);

②绘制像素点

Canvas.drawPoint(float x,float y,paint paint);//坐标的像素&#;必须指定为浮点型

(2)绘制线

①通过设置Paint实例的画笔宽度来指定其以像素为单位的线宽

Paint.setStrokeWidth(float widthInPixels);

②绘制直线

Canvas.drawLine(float startx,float startY,flaot stopX,float stopY,Paint paint);

(3)绘制矩形

①设置Paint实例的样式

Paint.setStyle(Style style);//style是一个枚举&#;,其&#;为Style.FILL(只填充举行的轮廓),Style.STROKE(只绘制矩形的轮廓,同时也使用Paint的颜色和画笔宽度),Style.FILL_AND_STROKE(填充矩形,并使用给定的颜色和画笔来绘制轮廓)

②通过Canvas方法绘制矩形

Canvas.drawRect(float topLeftX,float topLeftY,float bottomRightX,float bottomRightY,Paint paint)

(4)绘制图

Canvas.drawCircle(float centerX.float centerY,float redius,Paint paint);

6.使用位图

①从assets/目录加载一幅图像

I nputStream inputStream=assetManager.open("bob.png");

Bitmap bitmap=BitmapFactory.decodeStream(inputStream);

/*

以特定的颜色&#;式来加载一幅图像

*InputStream bitmap=BitmapFactory.decodeStream(inputStream)

*BitmapFactory.Options options=new BitmapFactory.Options();

*options.inPerferredConfig=Bitmap.Config;

*Bitmap bitmap=BitmapFactory.decodeStream(inputStream,null,options);

*//Bitmap.Config是一个枚举,其&#;如下:Config.ALPHA_8,

*//Config.ARGB_,Config.ARGB_,Config.RGB_

*/

/*

*创建空的Bitmap实例(用于想在开发中使用自定义图像合成)

*Bitmap bitmap=Bitmap.createBitmap(int width,int height,Bitmap.Config config)

*Canvas canvas=new Canvas(bitmap);

*/

②获得图像的像素宽度和高度,查看使用什么样的颜色&#;式来存储位图

int width=bitmap.getWidth();

int height=bitmap.getHeight();

Bitmap.Config config=bitmap.getConfig();

③绘制位图

Canvas.drawBitmap(Bitmap bitmap,float topLeftX,flaot topLeftY,Paint paint);

Canvas.drawBitmap(Bitmap bitmap,Rect src,Rect dst,Paint paint);

④释放位图

Bitmap.recycle();

7.渲染文本

①加载字体

Typeface font=Typeface.createFromAsset(Context.getAssets(),String)

//其中String为字体的名称,如“font.ttf”,存放于assets/目录下

②将字体设置为Paint实例的Typeface

paint.setTypeFace(font);

③设置将要进行渲染的字体的大小

Paint.setTextSize();

④设置文字对齐方式

Paint.setTextAlign(Paint.Align align);

//Paint.Align枚举有三个&#;:Paint.Align.LEFT,Paint.Align.CENTER,Paint.Align.RIGHT

⑤绘制文本

canvas.drawText("This is a test",,,paint);

*⑥查看以像素为单位的特定字符串的边界

Paint.getTextBounds(String text,int start,int end,Rext bounds);

//第一个参数是想要得到边界的字符串,第二和第三个参数指定进行度量的字符串的开始字符和结束字符,最后一个参数是一个Rect实例,我们将其分配并传入该方法中。该方 //法将把边框矩形的宽度和高度写进Rect.right和Rect.bottom这两个字段,可调用Rect.width()和Rect.height()来获取同样的&#;

8.使用SurfaceView进行连续渲染

①获得SurfaceHolder类的一个实例

SurfaceHolder holder=surfaceView.getHolder();

②查看Surface是否已被创建

boolean isCreated=surfaceHolder.getSurface().isValid();

③锁定Surface用于渲染并返回一个可用的Canvas实例

Canvas surfaceHolder.lockCanvas();

④进行渲染

⑤解锁Surface

SurfaceHolder.unlockAndPost(Canvas canvas);

边做游戏边学android—3(飞机大战②飞机移动) 飞机移动需要用到onTouchEvent事件,咋MainView。java中添加如下代码:/preprename=codeclass=javaspanstyle=white-space:pre/spanpublicbooleanonTouchEvent(MotionEventevent){spanstyle=whi

android源码项目 AndroidPDF阅读器

rmxp4droid for 天敏电视盒子 大家有没想过在电视上玩自己制作的游戏?rmxp4droid的话是一切皆有可能的!测试环境:天敏电视盒子T2四核版rmxp4droid2.4最终版()以下是我天敏盒子

标签: Android游戏开发读后感

本文链接地址:https://www.jiuchutong.com/biancheng/368620.html 转载请保留说明!

上一篇:Android中SurfaceView的使用详解

下一篇:边做游戏边学android—3(飞机大战②飞机移动)(边学边玩的游戏)

  • 税款抵扣会计分录
  • 小规模减免的增值税怎么做账
  • 企业筹建期间契税账务处理
  • 有主营业务收入就一定有销项税吗
  • 已经缴纳的税款怎么做账
  • 累计减税费用是什么意思
  • 劳务费属于印花税范围吗
  • 出口退税贷方余额是什么意思
  • 企业构建固定资产支付的现金应列示在现金流量表
  • 对公的etc怎么绑定怎么充值
  • 空调压缩机属于什么系统
  • 个人劳务费 税
  • 存在问题的具体表现和产生问题的原因分析
  • 其他贷款服务的内容包括
  • 物业管理费什么时候交?
  • 公务费用扣除标准 通讯补贴怎么算
  • 公司注销欠法人款怎么帐务处理?
  • 当年亏损可以用以前年度来弥补吗
  • 出售固定资产累计折旧的账务处理
  • 收到劳务外包发票计入什么科目
  • 企业进口葡萄酒税率多少
  • 内部存货交易的抵消分录例题讲解
  • 企业出差补助需要缴纳个人所得税吗?
  • 东芝t351笔记本
  • 公司委托第三方缴纳社保合法吗
  • 压缩文件损坏怎么回事
  • 工业企业会计核算的特点
  • php基本操作
  • 自行建造完成交付的房子
  • 公路客运车辆
  • 使用php进行mysql数据库编程的基本步骤
  • bert multihead
  • Yii2中hasOne、hasMany及多对多关联查询的用法详解
  • echarts怎么样
  • 推荐 4个有趣实践作业
  • vue路由实例
  • c++stl详解
  • php curl_multi_init
  • 财政贴息会计处理怎么理解
  • 销售商品收到的价款
  • 清包工方式建筑服务
  • 员工工资是哪个会计科目
  • 小微企业金融免税政策
  • 减值准备减少记哪方
  • 记错科目怎么调整
  • 预支报销怎么做账
  • 用友软件中冲销凭证在哪
  • 补交上年度的企业所得税税款计入什么科目
  • 研发费用加计扣除是什么意思啊
  • 蔬菜销售方式
  • 主营业务收入用什么账簿登记
  • 应付职工薪酬如何进行会计处理
  • 什么叫发票分割单
  • 会务费入哪个科目
  • 利润表中公允价值变动为贷
  • 银行承兑汇票怎么看
  • win2003远程桌面最大连接数
  • win7卸载KB2952664/KB3035583补丁的详细图文教程
  • 解析包出现错误无法安装怎么办
  • 为什么开机会提示无信号
  • windows无法启动,可能原因
  • 电脑windowxp系统重装
  • window sdk for windows 8.1
  • pln是什么文件
  • win7电脑ip地址怎么查
  • windos撤销
  • linux在哪里操作
  • win7显示ipv6无网络访问权限
  • nodejs 入门
  • unity怎么新建项目
  • jquery手册手机版
  • bootstrap需要学多久
  • 车辆购置税查询平台打印
  • 增值税专用发票增额需要什么资料
  • 多缴税款可以抵滞纳金吗?
  • 契税减税、免税条件
  • 天津税务陈岩
  • 纳税筹划是什么课
  • 契税和个税有什么关系
  • 怎样查工商局备案
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设