手机游戏的线程和机体的控制以及手机模拟器的调试

简介:

一、游戏的线程

 
线程是程序中的一个执行流,每个线程都有自己的专有寄存器,但代码区是共享的,即不同的线程可执行同样的函数。多线程是程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行的线程来完成各自的任务。
线程的创建有两种方法,一种是从 Thread 类派生然后改写 run 方法,一种是实现 Runnable 接口的 run 方法,两种方法代码如下:
InBlock.gif public  class exThread extends Thread 
InBlock.gif{    
InBlock.gif   public  void run(){…} 
InBlock.gif   public  void test(); 
InBlock.gif  { 
InBlock.gifexThread thread= new exThread(); 
InBlock.gifthread.start(); 
InBlock.gif
InBlock.gif
InBlock.gif public  class exThread extends Runnable 
InBlock.gif
InBlock.gif public  void run() 
InBlock.gif{…} 
InBlock.gif public  void test)_ 
InBlock.gif
InBlock.gifThread thread= new Thread( new exThread());; 
InBlock.gifthread.start(); 
InBlock.gif
InBlock.gif
派生自 Thread 类的方法有一个最大的缺点就是不能够在从其他的类派生,只能够实现新的接口,而实现 Runnable 接口的方式,只需要在已有类的基础上多实现一个 run 方法而已,没有多余的负担就可以立刻实现线程。由于第一种方法只能够实现新的接口,所以在本程序中,对于线程的创建,只使用了第一种方法。
启动线程时使用了 Thread 类的 start 方法,调用 start 方法后,线程实际上并不会立刻启动,而是有了相应的延迟,这时因为启动新的线程,必然在已经存在的线程上启动,线程的切换消耗时间。
        停止或中断一个线程意味着在该线程完成任务之前停止其正在进行的一切,有效地终止其当前的操作。线程是死亡还是等待新的任务或是继续运行下一步,就取决于该操作。
由于同一程序的多个线程共享同一片存储空间,在带来方便的同时,也带来了访问冲突这个严重的问题。比如说一个线程现在正在读取一个值,而在返回这个值之前,另一个线程改变这一个值,这就使得读取的数值出现错误,并不是需要的值, java 语言 synchronized 来解决这个冲突。
       Synchronized 关键字包括两种用法,即 synchronized 方法和 synchronized 块。
       Synchronized 方法即通过在方法声明中记入 synchronized 关键字来声明 synchronized 方法。
       Public synchronized void setVat int newVal );
       Synchronized 方法控制对类成员变量的访问,确保了同一时刻对于每一个类实例,其所有声明为 synchronized 的成员函数中至多只有一个处于可执行状态,从而有效避免了类成员变量的访问冲突。
二、机体的控制
       GameCanvas 中提供了与以往 MIDP1.0 不同的键盘采样功能。 Canvas 类中采取响应键盘事件的方法,每次执行周期时会读取 keyPressed 函数中需执行的代码。这样的机制并不适合某些游戏场合。在某些不支持 keyRepeat 功能的设备上,反复执行的按键,比如飞机移动,将不能因为长时间按压而自动重复,这样就需要用户高频率的手动击键,这在操纵空间非常有限的移动设备上是非常困难的。同时,事件的执行周期也并不一定适合游戏的场合,也许需要更高频率执行的按键却只能在指定的周期内规律的响应。对此,针对游戏的开发, Game 包提供的键盘状态功能将显得十分有效。
    GameCanvas 提供 getKeyStates 函数可获取当前键盘上的信息。将以位的形式返回键盘上所有键的按与释放的状态,当 bit 1 时,键就是被按下的状态,为 0 时则为释放状态。只需要此一个函数的返回值就可以返回所有键的状态,这保证了快速的按键和释放也会被循环所捕捉。同时,这样的机制也可检测到几个键同时按下的状态,从而提供斜向运行等相应功能。
三、模拟器的相关调试
IDE 整合的Wireless Tool Kit提供了许多在运行时监视运行状态的工具。包括内存状况的检测(手机上的内存空间十分有限,必须时刻关注机载内存是否大于程序所能使用到的最大可能的内存空间),网络状况的检测,运行函数的跟踪等。其中,允许强制垃圾回收(Garbage Collection)。由于Java语言中,不像许多其他的如C++语言,不需要指定回收函数中特定的不使用的资源,资源回收机制将自动清空无效变量占用的空间。在程序运行中也可以调用System类的  gc() 函数手动收回废弃的内存。手机模拟器如下图:






       本文转自 gaochaojs 51CTO博客,原文链接: http://blog.51cto.com/jncumter/203835 ,如需转载请自行联系原作者

相关文章
|
存储 Shell Linux
安卓手机上的终端模拟器Termux,实现了在手机上运行python
安卓手机上的终端模拟器Termux,可以在手机上运行python
1711 2
|
2月前
|
Web App开发
软件开发常见流程之移动端调试方法,利用Chrome(谷歌浏览器)的模拟手机调试,搭建本地Web服务器,手机和服务器在一个局域网,通过手机访问服务器,使用服务器,利用ip实现域名访问
软件开发常见流程之移动端调试方法,利用Chrome(谷歌浏览器)的模拟手机调试,搭建本地Web服务器,手机和服务器在一个局域网,通过手机访问服务器,使用服务器,利用ip实现域名访问
|
4月前
|
Web App开发 Linux Android开发
Chrome谷歌浏览器的WeChat微信模拟器,既可以设置模拟很多型号的手机设备Mozilla
Chrome谷歌浏览器的WeChat微信模拟器,既可以设置模拟很多型号的手机设备Mozilla
|
11月前
|
Web App开发 Android开发 开发者
SAP UI5 应用开发教程之五十一 - 如何使用 Chrome 调试运行在手机上的 SAP UI5 Cordova 混合应用试读版
SAP UI5 应用开发教程之五十一 - 如何使用 Chrome 调试运行在手机上的 SAP UI5 Cordova 混合应用试读版
SAP UI5 应用开发教程之五十一 - 如何使用 Chrome 调试运行在手机上的 SAP UI5 Cordova 混合应用试读版
|
10月前
|
开发工具
uniapp项目怎么连接手机调试
uniapp项目怎么连接手机调试
100 0
|
11月前
|
Android开发 开发者
SAP UI5 应用开发教程之四十九 - 如何在桌面电脑端调试运行在手机上的 SAP UI5 应用试读版
SAP UI5 应用开发教程之四十九 - 如何在桌面电脑端调试运行在手机上的 SAP UI5 应用试读版
|
移动开发
关于Uniapp开发h5怎么直接在手机上看到效果,不需要模拟器和发布。
关于Uniapp开发h5怎么直接在手机上看到效果,不需要模拟器和发布。
273 0
|
Android开发
OPPO手机调试Android Flutter APP时每次都要提示重新安装且不能hot reload
OPPO手机调试Android Flutter APP时每次都要提示重新安装且不能hot reload
|
网络协议 Android开发
[✔️]Android通过Wifi连接手机进行开发调试
[✔️]Android通过Wifi连接手机进行开发调试
124 0
|
开发工具 Android开发 开发者
Appium 移动端自动化 - Android SDK连接安卓手机,adb连接一加8手机USB调试实例演示,连接一加8手机不显示USB调试选项问题排查
Appium 移动端自动化 - Android SDK连接安卓手机,adb连接一加8手机USB调试实例演示,连接一加8手机不显示USB调试选项问题排查
463 0