位置: 编程技术 - 正文

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(飞机大战②飞机移动)(边学边玩的游戏)

  • 递延所得税负债是什么科目
  • 企业异地迁移
  • 预付账款退回怎么做凭证
  • 可明确区分的商品
  • 国际货运代理企业应当遵循哪些原则
  • 待摊费用属于企业的费用
  • 工程劳务费计入哪个会计科目
  • 减免税额和抵免税额在什么时候扣除
  • 款项已付发票未到,怎么做凭证
  • 借应交税费销项税额贷未交增值税
  • 银行打出的明细清单怎么看不懂
  • 按价格从价缴纳增值税
  • 长期股权投资稀释
  • 纳税调减事项有
  • 软件分几次开票怎么入账
  • 认购私募股权基金
  • 质量保证金的预留比例是多少
  • 企业融资租赁设立条件
  • 委托贷款利息收入账务处理
  • 金融机构往来利息支出
  • 未达起征点的增值税要交所得税吗
  • 增值税普通发票和电子普通发票的区别
  • 国外公司进口能退税吗
  • 成本控制的基本原则包括
  • 无法取得发票的费用如何入账
  • 一次性领取的年金 税率表
  • 来料加工需要交税吗
  • 小微企业需要税务登记吗
  • win10如何设置一键还原系统
  • 新公司开办费用包括哪些
  • 个人出租住宅需要交哪些税
  • 怎么使用win10
  • 建筑工程团体意外险
  • php处理的图片格式是什么
  • 价外费用分录
  • 提供应税服务的纳税义务发生时间
  • fssm32.exe是什么进程 有什么作用 fssm32进程查询
  • 关于企业发生的手续费及佣金支出的扣除标准
  • 金融资产减值的账务处理
  • 什么情况需要缴纳增值税
  • html cssjs
  • 自然语言处理算法
  • rcnn系列详解
  • spring三级缓存有什么用
  • 投资房地产的后续计量有哪些
  • 工资直接计入管理费用了怎么办
  • 小微企业所得额如何计算
  • 车船使用税的征收标准是多少
  • 存款对银行经营的意义
  • 毛利率在餐饮中的应用
  • 银行汇票背书
  • 广告设计与制作专科就业前景
  • 企业会计人员审计程序
  • 商场一般是怎么缴纳租金的
  • 消费税也是流转税吗
  • 没有收入有支出怎么处理账务
  • 管理费用的核算要求
  • 设计费要计入固定成本吗
  • 免税收入怎么申报增值税
  • 农业企业纳税申报
  • 换工作时社保公积金怎么办
  • 小企业会计建账分录
  • sql server 修改
  • MySQL 5.6 (Win7 64位)下载、安装与配置图文教程
  • backup file
  • linux lsof命令详解
  • 电脑开机后出现win7画面后一直黑屏
  • win10如何不升级系统
  • jQuery Validate 数组 全部验证问题
  • android ndk cmake
  • perl读取文件内容
  • javascript中substr,substring,slice.splice的区别说明
  • android 加载大图
  • js实现兼容性较好的方法
  • 删除的照片怎么还原
  • jquery怎么给div赋值
  • 面向对象的基础知识
  • 河南省政府非税收网站
  • 广州市地税局领导名单
  • 个人利息收入属于什么收入
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设