位置: 编程技术 - 正文
推荐整理分享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()
⑦设置循环播放
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 转载请保留说明!友情链接: 武汉网站建设