Racket随机点动画练习出现背景堆叠无法正常生成点问题求助
问题原因
- 模型初始值设置错误,未使用空白屏幕作为初始状态
- 渲染函数
old-dot中每次都叠加白色空白背景,直接覆盖了之前生成的点位 - 帧更新函数
next-dot逻辑混乱,额外调用了会叠加背景的old-dot,导致多层背景堆叠 - 坐标判断冗余,
random 200本身返回0-199的整数,无需额外加min 200逻辑
修正后代码
; 随机点动画 (define DOT (circle 4 "solid" "black")) (define blank-screen (rectangle 200 200 "solid" "white")) ; 每帧更新:在已有图像的随机位置叠加新的点 (define (next-dot current-image) (overlay/xy DOT (random 200) (random 200) current-image)) ; 渲染函数:直接返回当前存储了所有点的图像即可 (define (draw current-image) current-image) (big-bang blank-screen (on-tick next-dot 1/2) (on-draw draw 200 200))
实现说明
该方案完全符合练习要求:
- 无任何条件判断、for循环等高级函数使用
- 模型为存储所有已生成点的图像,每次更新仅新增点位,保留所有历史点位
- 若需要调整画布大小、初始背景样式,仅需修改
blank-screen的定义即可,帧更新和渲染逻辑无需任何改动,满足通用要求
内容的提问来源于stack exchange,提问作者Wondering Minds
相关产品推荐
相关产品推荐

