Transum Online Logo可缩放机器人绘制问题:部件错位及~符号用法求助
问题解决:缩放机器人时部件脱节的修复
你遇到的问题核心是:每次调用DRAW_RECT后,海龟的位置和方向被改变了,后续绘制头、四肢时的移动计算都是基于这个被修改后的状态,缩放时这些误差被放大,导致部件脱节。
Transum Online Logo里的~符号作用是保持海龟状态——在调用过程前加~,执行完子过程后,海龟会自动回到调用该过程前的位置和方向,这样所有的位置计算都能基于正确的初始基准,不会因为子过程的操作打乱后续布局。
修改后的代码
只需要在所有调用DRAW_RECT的地方加上~前缀即可:
TO DRAW_RECT :width :height :color SETPC :color PD RT 90 FD :width RT 90 FD :height RT 90 FD :width RT 90 FD :height RT 90 PU END TO ROBOT :size ; Draw body ~DRAW_RECT :size :size "blue ; Draw head PU BK :size/2 LT 90 FD :size/4 RT 90 ~DRAW_RECT :size/2 :size/4 "red ; Draw left arm PU BK :size/2 LT 90 FD :size/4 LT 90 FD :size/4 RT 90 ~DRAW_RECT :size/2 :size/4 "green ; Draw right arm PU BK :size/2 RT 90 FD :size/4 RT 90 FD :size/4 LT 90 ~DRAW_RECT :size/2 :size/4 "green ; Draw left leg PU BK :size/2 LT 90 FD :size/2 LT 90 FD :size/4 RT 90 ~DRAW_RECT :size/2 :size/4 "green ; Draw right leg PU BK :size/2 RT 90 FD :size/2 RT 90 FD :size/4 LT 90 ~DRAW_RECT :size/2 :size/4 "green END
原理说明
- 不加
~时,DRAW_RECT执行完会改变海龟的位置和朝向,后续的BK、LT、FD等操作都是基于这个被改变后的状态,导致部件的定位偏移,缩放时偏移量随:size变化,最终出现脱节。 - 加
~后,每次调用DRAW_RECT完成绘制后,海龟会立刻回到调用前的位置和方向,后续的移动计算始终基于正确的基准点,不管:size怎么调整,所有部件的相对位置都能保持正确,不会脱节。
内容的提问来源于stack exchange,提问作者Karin Janse van Rensburg
相关产品推荐
相关产品推荐

