基于android的飞机大战游戏设计与开发(编辑修改稿)内容摘要:
Activity 结束时都会相应一起退出系统,因此针对每一个 Activity 设置一个 BroadcastReceiver 来接收广播,一旦接收到广播当前 Activity 自动退出。 Activity 接收到广播后退出的代码如下所示 : private BroadcastReceiver exitReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { // TODO Autogenerated method stub ()。 } }。 发送广播 而当前 Activity 在被按下 “EXIT” 或者 “ 退出 ” 按钮时,会向外界发送一个广播, 之后结束自己: Activity activity = (Activity)context。 Intent intent = new Intent(EXIT)。 (EXIT)。 (intent)。 ()。 MediaPlayer( 媒体播放器 ) 本应用使用 Android 的 MediaPlayer 来演奏每一个页面的背景音乐。 背景音乐可以存放在两个位置,一个是当前工程的 /res/raw 目录下,如果是存放在该目录下的话,在 install 当前 Android 工程时,需要耗费非常的时间将此类音频文件上传到Android 虚拟机中。 另一 个存放位置是直接将音频文件上传到 DDMS 的 /mnt/sdcard/Music文件夹下,这相当于将该音频文件放入到了 Android 手机的 SD 卡上了,相对于存放位置一来说,该方法在加载 Android 工程时消耗的时间比较少。 具体向虚拟机中上传文件如图47 所示: 洛阳师范学院 2020 届本科生毕业设计 16 图 47 DDMS 向 Android 虚拟机中上传文件 MediaPlayer 使用方法: private MediaPlayer startSound = null。 startSound = new MediaPlayer()。 try { /* * 从 sdcard中获得音频文件的路径 */ (/mnt/sdcard/Music/)。 ()。 } catch (IllegalArgumentException e) { // TODO Autogenerated catch block ()。 } catch (SecurityException e) { // TODO Autogenerated catch block ()。 } catch (IllegalStateException e) { // TODO Autogenerated catch block ()。 } catch (IOException e) { // TODO Autogenerated catch block ()。 } (true)。 //设置循环 由于当前应用针对不同的显示界面( Activity)有不同的背景音乐,因此当前 Activity挂起时,对应的背景音乐也要挂起( ())。 而在当前 Activity 销毁基于 Android 的飞机大战游戏设计与开发 17 ( destory ) 时 , 需 要 对 背 景 音 乐 进 行 停 止 ( () ) 和 回 收( ())操作。 layout 中调用 SurfaceView 普通的 layout 设置与直接调用 SurfaceView 的 layout 有所不同,一下列出调用SurfaceView 的 layout 的格式: ?xml version= encoding=utf8? LinearLayout xmlns:android= android:layout_width=match_parent android:layout_height=match_parent android:orientation=vertical android:id=@+id/skyGameStartPicture android:layout_width=wrap_content android:layout_height=wrap_content / /LinearLayout 此处使用自定义 SurfaceView 的绝对路径来编写开始页面的 layout 文件,使得开始页面直接使用该 SurfaceView 绘制的 Bitmap 作为背景图片来显示。 SurfaceView所需要设置下它的 SurfaceHolder 和 Monitor(实现 CallBack接口 )属性 holder = getHolder()。 monitor = new Monitor()。 (monitor)。 Monitor 类的方法: 方法 surfaceCreated(SurfaceHolder holder)的主要作用是: 在 surfaceview 创建的绘制 SurfaceView 的内容。 方法 surfaceDestroyed(SurfaceHolder holder)的主要作用是: 在 surfaceview 销毁时对于当前 SurfaceView 中的一些对象做销毁处理。 SurfaceView 的方法: onTouchEvent(MotionEvent event)可以捕获鼠标对于屏幕的触碰事件,在该方法中对于鼠标触碰的区域做出判断如果点击的为按钮图片的位置则会调用 图 44 中对应的被按下按钮 来显示,如此显示使用户有一个可感受的按钮被按下的动态即视感,用户体验更好。 public boolean onTouchEvent(MotionEvent event) { // TODO Autogenerated method stub int action = ()。 float eventX = ()。 float eventY = ()。 if((eventX = START_X)amp。 amp。 (eventX = START_X+())amp。 amp。 (eventY = START_Y)amp。 amp。 (eventY = START_Y+())){ if(action == ){ 洛阳师范学院 2020 届本科生毕业设计 18 startButton = (getResources(), )。 drawStartButton()。 } if(action == ){ startButton = (getResources(), )。 drawStartButton()。 Intent intent = new Intent(,)。 (intent)。 } } else if((eventX = OPTION_X)amp。 amp。 (eventX = OPTION_X+())amp。 amp。 (eventY = OPTION_Y)amp。 amp。 (eventY = OPTION_Y+())){ if(action == ){ optionButton = (getResources(), )。 drawOptionButton()。 } if(action == ){ optionButton = (getResources(), )。 drawOptionButton()。 Intent intent = new Intent(,)。 (intent)。 } } else if((eventX = SCORE_X)amp。 amp。 (eventX = SCORE_X+())amp。 amp。 (eventY = SCORE_Y)amp。 amp。 (eventY = SCORE_Y+())){ if(action == ){ scoreButton = (getResources(), )。 drawScoreButton()。 } if(action == ){ scoreButton = (getResources(), )。 drawScoreButton()。 Intent intent = new 基于 Android 的飞机大战游戏设计与开发 19 Intent(,)。 (intent)。 } } else if((eventX = EXIT_X)amp。 amp。 (eventX = EXIT_X +())amp。 amp。 (eventY = EXIT_Y)amp。 amp。 (eventY = EXIT_Y + ())){ if(action == ){ scoreButton = (getResources(), )。 drawExitButton()。 } if(action == ){ scoreButton = (getResources(), )。 drawExitButton()。 Activity activity = (Activity)context。 Intent intent = new Intent(EXIT)。 (EXIT)。 (intent)。 ()。 } } return true。 } 游戏界面 本界面与开始界面都是使用 SurfaceView 绘制的界面 , 由于本界面相对于开始界面更加复杂在主线程外创建了子线程来负责对于 SurfaceView 的绘制工作 , 主线程负责对于各类对象的控制计算等计算工作。 由于游戏界面涉及到的类比较多,且逻辑复杂,所以在这里只介绍下使用的空间、技术以及业务逻辑,粘贴部分技术代码。 绘制的游戏界面如图 48 所示: 洛阳师范学院 2020 届本科生毕业设计 20 图 48 游戏界面 Activity 中注册 SurfaceView 游戏界面并没有像开始界面那样注册 SurfaceView, 而 是直接在 onCreate 方法中使用代码注册的自定义 SurfaceView, 如下 : private SkyGameScreenRollView sr = null。 //自定义 surfaceview protected void onCreate(Bundle savedInstanceState) { // TODO Autogenerated method stub (savedInstanceState)。 sr = new SkyGameScreenRollView(this)。 (new LayoutParams(, ))。 (0x000101)。 setContentView(sr)。 } ContextMenu 控件 游戏界面使用了 Android 的 ContextMenu, ContextMenu 显示的具体效果见图 49。 基于 Android 的飞机大战游戏设计与开发 21 图 49 ContextMenu 效果 ContextMenu 针对某个控件,一旦为某个控件设置了 ContextMenu,那么程序员将不能再实现该控件的长按事件处理了。 ContextMenu 的使用步骤: 1. ContextMenu 针对的是控件而不是窗体,构建完 ContextMenu 后需要与一个控件实施绑定。 绑定的代码为: (控件对象 )。 ContextMenu 的方法如下: res/menu/** 的菜单 ( 当前应用使用的该方法 )。 onCreateContextMenu()回调函数。 (控件对象 )。 具体操作方法 重写 onCreateMenuItemSelected 回调函数。 游戏界面的 ContextMenu 的 内容如下: ?xml version= encoding=utf8? menu xmlns:android= item android:id=@+id/pg_option_exit android:title=@string/option_menu_exit android:showAsAction=never/。基于android的飞机大战游戏设计与开发(编辑修改稿)
相关推荐
d:layout_width=fill_parent android:layout_height=fill_parent android:gravity=right Button android:layout_width=wrap_content android:layout_height=wrap_content android:text=@string/aaa android
领域的,基于相应的嵌入式硬件平台,同时需要完成用户指定的预期任务的计算机软件。 它可以由一个任务来完成也可以由多个任务共同完成。 嵌入式软件的特点如下 1) 系统软件的高实时性是其基本的要求 2) 多任务的实时操作系统成为嵌入式应用软件的必须条件 3) 要求对软件实现固态化存储,因为一般完成设计的软件程序都需要打包然 后放在操作系统中,需要时就运行应用程序,一般不允许对其软件程序进 行修改。
的数据类型设为 datetime 的原因是因为 datetime可以直接对时间进行操作 列名 数据类型 允许空 id int 不允许 u_name Varchar(50) 不允许 u_sex Varchar(10) 不允许 u_mail Varchar(30) 不允许 u_qq Varchar(20) 不允许 adddate datetime 不允许 图 34 用户信息表 毕业设计用纸 第 11
17XTALI18IOVDD219DGND220DGND321DGND422XCS23CVDD224NC25RX26TX27SCLK28SI29SO30CVDD331TEST32GPIO0/SPIBOOT33GPIO134NC35NC36AGND037AVDD038RIGHT39AGND140AGND241GBUF42AVDD143RCAP44AVDD245LEFT46AGND347LINEIN4
)。 按导电类型不同分类 集成电路按导电类型可分为双极型集成电路和单极型集成电路,他们都是数字集成电路。 双极型集成电路的制作工艺复杂,功耗较大,代表集成电路有 TTL、 ECL、电子科技大学成都学院课程设计 8 HTL、 LSTTL、 STTL等类型。 单极型集成电路的制作工艺简单,功耗也较低,易于制成大规模集成电路,代表集成电路有 CMOS、 NMOS、 PMOS 等类型。 按用途分类
根据定义, 8255能并行传送 8位数据,所以其数据线为 8根 D0~ D7。 由于 8255具有 3个通 4 道 A、 B、 C,所以只要两根 地址线 就能寻址 A、 B、 C 口及 控制寄存器 ,故 地址线 为两根 A0~A1。 此外 CPU 要对 8255进行读、写与 片选 操作,所以控制线为片选、复位、读、写信号。 各信号的 引脚 编号如下: ( 1) 数据总线 DB:编号为 D0~