例子中小球的运动方向只有4种,也就是左上,右上,左下,右下。其余的方向都没有,比如水平,垂直方向都没有。
每次
posX=posX+deltaX;
posY=posY+deltaY;
来改变位置。deltaX,deltaY可为+1也可为-1。
用direction作为一个方向的合成量代表四个方向,分别是-2,-1,1,2。但是它不能取0。
比如方向是左上,那么这时候deltaX = -1, deltaY = -1,则direction = -2,代表左上方向。
再举个例子,右上方向,这个时候deltaX = 1, deltaY = -1,
由 if (direction == 0) direction = deltaX + 2*deltaY; 这句,可以控制direction = -1。
同理,依次类推。
左上:direction = -2
右上:direction = -1
左下:direction = 1
右下:direction = 2
如果小球越界的话,
if (posX <= left || posX >= right)或if (posY <= top || posY >= bottom)
就改变小球的运行轨迹,无非是deltaX就让它等于-deltaX,deltaY = -deltaY。
先排除干扰,不考虑矩阵的列,只考虑行。那么看看这段代码。
deltaX = matrix[direction + 2][collision];
deltaY = matrix[direction + 2][collision + 1];
direction + 2意味着它的值只能取
-2 + 2 = 0
-1 + 2 = 1
1 + 2 = 3
2 + 2 = 4
取值是0,1,3,4正好符合矩阵
static int[][] matrix = {
{ 1,-1, -1, 1, 1, 1 },
{ -1,-1, 1, 1, -1, 1 },
null,
{ 1, 1, -1,-1, 1,-1 },
{ -1, 1, 1,-1, -1,-1 }
};
中间那行是null。
上边说了,矩阵的行,表示4种方向情况。
现在考虑来考虑列。看看列代表什么含义。
列的控制是由collision来完成的。
int collision = 0;
if (posX <= left || posX >= right) collision++; //如果是左右越界的情况
if (posY <= top || posY >= bottom) collision += 2; //如果是上下越界的情况
这段代码可以看出,collision如果不越界,就是0,如果越界,要么是1,要么是2。
下面这段代码
if (collision != 0) {
try {
javax.microedition.media.Manager.playTone(note, 100/*ms*/,100);
} catch (Exception ex) {
System.out.println("failed to play tone");
}
collision = (collision - 1) * 2;
deltaX = matrix[direction+2][collision];
deltaY = matrix[direction+2][collision+1];
}
try,catch不看,就是小球碰到墙壁响一下。
看collision = (collision - 1) * 2;
因为上边说过,
collision不是1就是2。
1的情况,(1 - 1)* 2 = 0
2的情况,(2 - 1)* 2 = 2
那么collision的最终取值也就是0,2。
0代表左右越界的时候,
2代表上下越界的情况。
那么那么由
deltaX = matrix[direction+2][collision];
deltaY = matrix[direction+2][collision+1];
知道,当collision = 0时,列分别为0,1。
当collision = 2时,列分别为2,3。
所以刚才的矩阵是迷惑人的。完全可以是下边的替代,最后两列的数据是无效的,永远访问不到。
static int[][] matrix = {
{ 1,-1, -1, 1 },
{ -1,-1, 1, 1 },
null,
{ 1, 1, -1,-1 },
{ -1, 1, 1,-1 }
};
明白了行,列的含义。那么可以随便找种情况分析了。
比如下边这种情况
\ /
┘ ┐
\/
————
由右下方向碰到墙后往右上走。
咱们自己先判断一下,没碰墙前应该deltaX = 1,deltaY = 1,
碰墙后deltaX = 1,deltaY = -1。
下边验证自己的想法是否正确。
行的情况是 右下,也就是direction = 2.
列的情况是 上下越界,也就是collision = 2.
由
deltaX = matrix[direction + 2][collision];
deltaY = matrix[direction + 2][collision + 1];
得
deltaX = matrix[4][2];
deltaY = matrix[4][3];
看看矩阵
static int[][] matrix = {
{ 1,-1, -1, 1 },
{ -1,-1, 1, 1 },
null,
{ 1, 1, -1,-1 },
{ -1, 1, 1,-1 } //<---- 1, -1 ([4][2], [4][3])
};
分享到:
相关推荐
标题“WTK2.5.2手机模拟器”指的是Wireless Toolkit (WTK)的2.5.2版本,这是一个专为Java ME(Micro Edition)应用程序开发设计的工具。手机模拟器是它的重要组成部分,允许开发者在计算机上模拟不同型号的移动设备...
1. **模拟器(Emulator)**:WTK1.0包含了一个设备模拟器,开发者可以在这个模拟环境中测试应用程序,而不必实际拥有目标设备。模拟器可以模拟不同类型的手机,包括屏幕大小、键盘输入和网络连接等功能。 2. **...
4. **调试器(Debugger)**:WTK提供了一个强大的调试器,可以追踪代码执行、设置断点、查看变量值,帮助开发者定位和修复程序中的错误。 5. **文档(Documentation)**:压缩包可能包含了详细的用户指南和API参考...
用户在下载并解压缩后,只需将新文件覆盖到原有WTK2.2文件夹中的对应位置,即可完成更新。这种方式通常用于修复已知问题、添加新功能或者提高性能。 **解压缩和覆盖** 解压缩过程是将压缩文件中的内容恢复到原始...
"J2ME游戏开发中的WTK游戏框架" 指的是在Java Micro Edition(J2ME)平台上,使用Wireless Toolkit(WTK)进行游戏开发时所采用的一种特定的游戏开发框架。J2ME是Java的一个子集,用于开发和部署在移动设备、...
以下是对WTK 2.2中重要知识点的详细说明: 1. **模拟器**:WTK 2.2 包含了对多种移动设备的模拟器,允许开发者在没有物理设备的情况下测试应用程序。模拟器可以模拟不同类型的手机和PDA,包括不同的屏幕尺寸、内存...
WTK6900H-24SS 芯片资料 概述: WTK6900H-24SS 芯片资料是由广州唯创电子有限公司发布的一份芯片技术文档,旨在为用户提供关于 WTK6900H-24SS 芯片的详细信息和技术指南。本文档涵盖了芯片的产品简介、芯片特征、...
6. **示例代码**:为了帮助初学者快速入门,WTK往往还会提供一些示例代码,演示如何使用各种API功能,开发者可以基于这些例子进行学习和实践。 7. **更新和社区支持**:作为一个正式版本,索尼爱立信WTK 1.1很可能...
总的来说,"wtk-81799.zip" 提供的资源允许开发者深入研究和利用一个开源的UI库,不仅可以直接在项目中使用该库,还能学习到库的设计和实现,以及开源软件的管理实践。这有助于提升开发者在UI设计、软件工程和开源...
在这个场景中,我们关注的是实现五指棋算法的一种程序,该程序可以在WTK(Wireless Toolkit)平台上运行,并且提供了源代码供分析和学习。 在五指棋游戏中,两个玩家轮流在3x3的棋盘上放置自己的棋子,通常是X和O。...
wtk2.5.2 驱动资源免费下载,java的朋友们 需要下载wtk的可以点击
在 Eclipse 中,选择“首选项” ---> “J2ME”,单击“Import”,然后单击“Browse”,找到 WTK2.5.2 的安装路径(文件夹),单击“Refresh”,最后单击“完成”。 四、配置 Eclipse 的 J2ME 环境 配置完成 WTK...
在J2ME配置中,设置WTK Root目录为WTK的实际安装路径(例如`C:\\WTK2.5.2`)。 2. **配置设备** 在EclipseME的“Device Management”选项中,点击“Import”按钮,选择WTK安装目录下的`bin`文件夹(例如`C:\\WTK...
该文件通常位于 WTK 的安装目录下的 `\wtklib\Windows` 目录中。例如: ``` C:\Program Files\Java\J2ME\wtklib\Windows\ktools.properties ``` 请注意,具体的路径可能会根据您的安装位置有所不同,请根据实际...
**微创知音WTK6900B02 V2.03 使用说明书** 本文将深入探讨微创知音WTK6900B02这一智能语音识别系统的使用方法及其核心功能。WTK6900B02是专为语音交互设计的一款高性能芯片,广泛应用于智能家居、智能车载、智能...
**J2ME无线工具包(WTK)2.2详解** Java 2 Micro Edition(J2ME)是一种针对嵌入式设备和移动设备的Java平台,它为开发手机、PDA和其他小型设备上的应用程序提供了标准。为了支持J2ME应用程序的开发,Sun ...
3. **配置环境变量**:为了方便使用,需要将WTK的bin目录添加到系统的PATH环境变量中。 - 在“我的电脑”上右键选择“属性”,然后点击“高级”选项卡下的“环境变量”按钮。 - 在系统变量中找到“Path”,在其值...
j2me wtk 手机 java环境 如何安装、教程,内容详细,按照着来做一定能成功。
很多人想下载wtk2.2,但是sun的官方网站很难下得了,共享下