Java(Processing)动画循环问题:右上到左下小球循环动画失效
问题根因
Processing底层运行的是Java,Java的%取模运算有个特性:对负数做取模时返回的结果也是负数。你写的posX=(posX-1)%500在posX递减到0之后,下一次计算就是-1%500,结果是-1,不是预期的499——小球直接跑到x=-1的画布外,自然不会从右侧边界重新进入。
之前左上到右下的动画用(posX+1)%500能正常运行,是因为posX一直递增,全程都是非负数,取模结果永远落在0-499的画布坐标范围内,不会触发这个问题。
修复方案
完全沿用你现有的极简写法,不新增额外变量、不添加判断逻辑,只需要在posX取模计算前先加一遍画布宽度500,保证参与取模的数值永远为正即可,和你之前的实现思路完全统一。
修正后的完整代码:
int circleSize=50; int posX=500 , posY=0; void setup(){ size(500,500); } void draw(){ background(200); ellipse(posX,posY,circleSize,circleSize); // 仅修改这一行,加+500保证取模前数值非负 posX = (posX - 1 + 500) % 500; posY = (posY + 1) % 500; println(mouseX,mouseY); }
- 运行效果:小球从右上角出发往左下角移动,移出左边界后会自动从画布最右侧重新进入,循环完全连续,和之前左上到右下的动画流畅度一致。
- 逻辑说明:哪怕posX减到-1,加500之后计算得499,对500取模结果还是499,刚好对应画布最右侧的x坐标,完美衔接循环。
内容的提问来源于stack exchange,提问作者Rookie 176
相关产品推荐
相关产品推荐

