例子中小球的运动方向只有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. **...
用户在下载并解压缩后,只需将新文件覆盖到原有WTK2.2文件夹中的对应位置,即可完成更新。这种方式通常用于修复已知问题、添加新功能或者提高性能。 **解压缩和覆盖** 解压缩过程是将压缩文件中的内容恢复到原始...
WTK6900H-24SS 芯片资料 概述: WTK6900H-24SS 芯片资料是由广州唯创电子有限公司发布的一份芯片技术文档,旨在为用户提供关于 WTK6900H-24SS 芯片的详细信息和技术指南。本文档涵盖了芯片的产品简介、芯片特征、...
"J2ME游戏开发中的WTK游戏框架" 指的是在Java Micro Edition(J2ME)平台上,使用Wireless Toolkit(WTK)进行游戏开发时所采用的一种特定的游戏开发框架。J2ME是Java的一个子集,用于开发和部署在移动设备、...
以下是对WTK 2.2中重要知识点的详细说明: 1. **模拟器**:WTK 2.2 包含了对多种移动设备的模拟器,允许开发者在没有物理设备的情况下测试应用程序。模拟器可以模拟不同类型的手机和PDA,包括不同的屏幕尺寸、内存...
6. **示例代码**:为了帮助初学者快速入门,WTK往往还会提供一些示例代码,演示如何使用各种API功能,开发者可以基于这些例子进行学习和实践。 7. **更新和社区支持**:作为一个正式版本,索尼爱立信WTK 1.1很可能...
在这个场景中,我们关注的是实现五指棋算法的一种程序,该程序可以在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-81799.zip”这个压缩文件中,我们不仅能获取到一套开源UI库,而且还能通过其提供的各种文档和代码深入了解一个开源项目从设计到实现的全貌。这不仅能够加速开发者的开发流程,而且在学习和使用...
该文件通常位于 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的官方网站很难下得了,共享下
为了在 Eclipse 开发环境中进行 J2ME 开发,我们需要集成 EclipseME 插件和 Wireless Toolkit (WTK)。以下是一步一步的详细配置步骤: 1. **下载和安装 EclipseME**: - 从官方网站或通过搜索引擎找到并下载 ...