位置: 编程技术 - 正文

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

  • 利润表的所得税费用怎么填
  • 计提坏账准备怎么理解
  • 对方发票丢失怎么办理
  • 应收退货成本递延
  • 保险柜库存现金留存不能超过多少
  • 国家高新补助款多久到账
  • 销售回扣分录
  • 未认缴出资的股东退股
  • 进项税过期不抵扣怎么写会计分录?
  • 图文解析定期定额小规模纳税人怎么申报?
  • 退税勾选后如何开红字
  • 税局代个人开增值税专票
  • 中药税率什么时候变为9
  • 外单位人员能在单位借款吗
  • 单位杂工费报销计什么科目
  • 现金流量表编制依据和方法
  • 国家税务局如何登录
  • 增值税税率变动情况
  • 合并后的新企业有哪些
  • 补提上个月折旧会计分录
  • 未取得全额发票怎么处理
  • 没有进出口权可以做外贸吗
  • 帮其他公司垫付的钱怎么写分录
  • 接受个人投资现金怎么做账务处理?
  • 1500元左右打游戏最好的手机
  • 小规模给个人开普票怎么填写
  • 利润表中的销售收入
  • 1697510742
  • 企业间借款的增值税计算
  • 在windows 7中
  • php文件在线解密
  • fpp是什么文件
  • php技巧
  • 合伙企业分红所得税如何少交
  • 印花税哪里买
  • 应收账款与预收账款重分类表怎么做
  • js栈堆的区别
  • 知识图谱的构建方法有两种
  • 临时工工资无发票可以扣除吗
  • 免税进项抵扣要做账吗
  • 销售黄金的会计分录
  • 公司项目支付的钱叫什么
  • 织梦标签教程
  • 个体工商户税收起征点是多少?
  • sql server 2012安装无网络可以OK?
  • 酒店客房成本计算公式
  • 加计扣除减免政策
  • 单位安装摄像头合法吗
  • 企业支付的费用化的一般借款利息支出属于什么
  • 培训学校不退学费找什么部门
  • 计提职工薪酬是什么意思
  • 网上缴税app叫什么
  • 可抵扣进项税额包括进项税额转出吗
  • 公司交的物业费计入什么会计科目
  • 单式记账法缺点是什么
  • 购买500元的保险会计分录
  • mysql -u -p -s
  • Mac如何使用clash上外网
  • linux系统 虚拟机
  • 删除xp本地保存的视频
  • excel 提示
  • mac阻止itunes自动弹出
  • linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)
  • 怎么提升win7性能
  • linux的shm共享内存
  • android的游戏
  • 常用的linux命令大全
  • cocos2dx-js
  • 各种摄像机的介绍
  • shell函数参数
  • 狗刨教学视频分解动作视频
  • nodejs事件队列
  • 细说javascript
  • jquery插件怎么写
  • android自定义view流程
  • jQuery对checkbox 复选框的全选全不选反选的操作
  • 国家税务局何时上班
  • 江西省税务局公众号
  • 2021年京东养鸡如何合作
  • 12月份买的车10月打电话让我去保养
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设