屏幕像素显示逻辑验证:8x8矩阵下2x2像素方块移动规则是否正确
结论
这个逻辑仅在你的坐标体系满足「x分量对应水平轴、取值从左到右递增,且移动后坐标未超出屏幕边界」的前提下成立,缺少前提或额外处理的话会有问题。
具体细节说明
- 首先要对齐坐标索引规则:你给出的矩阵是行优先存储,常规使用场景下,矩阵第一个下标对应行(y轴,从上到下递增),第二个下标对应列(x轴,从左到右递增)。如果你定义的坐标
(x,y)中x对应列号、从左到右递增,那给x分量加1确实是水平向右移动1个像素的操作,移动后2x2正方形的对应矩阵会更新为:
[[0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,1,1,0,0], [0,0,0,0,1,1,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0]]
- 你当前的逻辑遗漏了两个必要处理:
- 旧像素擦除:你只提到了更新新位置的像素值,实际操作时需要先把原位置的4个像素值从1改回0,否则屏幕上不会是正方形移动,而是会保留原位置的色块,出现拖影效果
- 边界判断:8x8屏幕的坐标如果是1起始,x最大取值不能超过7(2x2正方形最右侧像素的x值为8时已经是屏幕右边缘,再加1就会超出);如果是0起始,x最大取值不能超过6,否则会出现数组越界报错
完整移动流程建议
如果要实现无异常的右移动效,完整步骤应该是:
- 把当前正方形所在4个坐标对应的像素值设为0,擦除旧图形
- 给每个坐标的x分量加1,计算新位置坐标
- 校验所有新坐标的取值是否在屏幕合法范围内,若超出边界可以选择停止移动、循环到屏幕左侧或者反弹
- 把新坐标对应的4个像素值设为1,绘制新的正方形
内容的提问来源于stack exchange,提问作者iko
相关产品推荐
相关产品推荐

