在进行滚动长方体操作时,我们设置了一个名为“方块状态”的变量,根据长方体的初始状态与旋转后的最终状态,我们分析后将其分为3个状态,即下图中的这几个状态:分别是竖直状态;长的一边靠近X轴的状态;以及长的一边靠近Y轴的状态。因为视角变化的原因,类似正视图那样在地图外绘制一圈颜色利用颜色来判断是否越界不太可行,因为当长方体位于地图靠上位置时,绘制的边界线可能已经被提前遮挡住了,容易导致程序的误判。
得益于长方体运动的相对固定(始终在原点附近运动),实际上最终的落点只有下图这样的3种,横向时有两个落点,而竖直时更是仅有一个落点。通过判断落点处存不存在克隆体,我们就可以判断出长方体的运动是否已经超出了地图限制。比如当长方体长边靠近X轴时,判断左上落点存在克隆体与中间落点存在克隆体这2个条件是否同时成立,为真则不做任何改动,为假则宣告游戏结束。
因为游戏的胜利判断是需要在长方体竖直状态下,按理说只需要判断正中的落点的颜色是否为红色,或者当前位于正中的克隆体造型编号是否为红色造型就可以了。然而当博主利用检测角色去检测红色时,却意外的得到了一个假值。
即便角色被遮挡,只要位置正确,程序会判断碰到了角色;不同于角色的侦测,进行颜色侦测时,当一个区域同时叠加了多个角色,放置于最上层的角色的颜色才能够被正确侦测,而因为胜利的情况是长方体竖直站在红色方块上,所以红色就被淡绿色的长方体给遮挡住了,也就无法得到正确的结果了。
既然直接检测不行,只能让克隆体们自报家门了,因为目标方格有且只有一个,当接受到移动命令时,让这块唯一的克隆体自己检查一下自己的坐标,如果刚好靠近检测点,就把一个新增的“目标点位”的变量修改为1,离开检测点时则重置为0,这样一来,当长方体以竖立姿态滚动到目标位置时,只要去提取一下“目标点位”的值,如果“目标点位”也刚好是1,那么判断游戏胜利,进入下一关。
因为程序运行中会对坐标进行多次改动,而每次的改动都会造成一定的误差,所以这里对位置的判断采用了一个范围值,坐标经历了多次变换之后,小数部分多少会有一点出入。