turtle功能
本作品涉及到的turtle模块功能主要有5个。
第1个是海龟绘图加速功能,通过在程序前部加tracer方法调用禁止动画显示。
1 import turtle, random
2
3 turtle.tracer(0)
并在每帧绘制结束后调用update方法进行屏幕刷新,让绘制的图形一次性显示在窗口里。
42 # 刷新屏幕
43 turtle.update()
第2个是turtle模块的鼠标交互功能,如程序中的第17行。
12 # 接苹果的篮子
13 turtle.addshape('basket', ((-100, 0), (100, 0), (0, -25)))
14 basket = model.clone()
15 basket.shape('basket')
16 basket.setheading(90)
17 basket.ondrag(basket.goto) # 把goto函数绑定到鼠标拖动事件上
18 basket.showturtle()
将海龟basket的拖动事件绑定到basket的goto函数,这样,当用户用鼠标点击这个海龟并进行拖动的时候,会触发drag事件,实现调用basket.goto函数,并将事件发生时海龟的坐标作为参数传递给basket.goto函数,从而实现鼠标拖动到哪里,海龟basket就跟到哪里的交互效果。海龟的鼠标交互事件还有点击事件onclick、释放事件onrelease,都可以绑定处理函数,从而实现点击、释放鼠标各个按钮的交互。
第3个是海龟克隆功能,如程序中的第14行,海龟model的clone方法,可以将model对象复制1个,赋值给basket,克隆会产生新的海龟对象,并且保留原海龟对象的所有属性值。利用克隆功能,能够很方便地复制出相互独立而又具有相同初始属性的多个海龟,这些海龟后续修改属性并不会相互影响。
第4个是海龟形状设定功能,如程序中的第13、15行,由于鼠标交互需要整体拖动一个图形,我们就可以将一个海龟的形状设置为这个图形,实现图形的动画和接受鼠标拖动事件。第13行在程序中用addshape函数添加注册1个名字为“basket”的形状,从代码可以看出,这是1个以海龟坐标为中心的倒三角形。第15行用shape函数将海龟basket设置成名称为“basket”的形状。
我们也可以用shape函数将海龟的形状改为turtle模块内置的形状,如箭头'arrow'、海龟'turtle'、圆'circle'、方形'square'、三角形'triangle'和经典形状'classic'。
第5个是海龟的“盖戳”复印功能,如程序中的第43行,设定好红色苹果形状的海龟mould作为印模,可以在海龟当前位置上留下自身的形状。即便移走海龟,这个形状仍然保持在原地。
40 # 苹果下落,并用印模画出苹果
41 apple[1] -= apple[2]
42 mould.goto(apple[0], apple[1])
43 mould.stamp()
stamp函数将返回一个stampid,如果需要清除这个形状,则可以调用clearstamp函数清除指定stampid的形状,或者调用clearstamps函数清除所有形状。