本文是用python的turtle作图的第二篇,通过这个例子可以了解动画的原理,用python自带的turtle库制作一些小动画。

1.问题描述

在上一篇“用python的turtle作图(一)静态图”我们介绍了,用python自带的turtle库,制作静态图。

本文将介绍用python自带的turtle库制作动画。

2.原理说明

动画的原理简单来说,就是利用视觉停留效应,每隔一定时间重新绘制图形。这里有三个关键点:

  • 擦除原来的图形

  • 重新绘制图形

  • 时间一般是二十四分之一秒之内

下面以吃豆人为例进行说明:

1、新建一个后缀是py的文件,用文本编辑器打开,导入turtle和time库:

import turtle as t
import time

2、程序运行的时候,设置画图窗口大小800*600,黑色:

t.screensize(800,600,'black')

3、定义一个画吃豆人、豆子的函数:

def draw_smile(loc):
if(loc<200):
t.color('yellow')
t.penup()
t.goto(300-loc,0)
t.dot(30,'red') t.seth(0)
t.goto(0,-100)
t.begin_fill()
t.circle(100)
t.end_fill() if(loc<200):
t.color('black')
t.goto(87,-51)
t.pendown()
t.seth(60)
t.begin_fill()
t.circle(100,60)
t.goto(0,0)
t.end_fill()

4)擦除原理的图像,左移10个像素重新绘制吃豆人和豆子

for r in range(0,200,10):
t.tracer(False)
t.clear()
draw_smile(r)
time.sleep(1)
t.hideturtle()
t.tracer(True)

3.代码实现

完整的代码如下:

import turtle as t
import time
def draw_smile(loc):
if(loc<200):
t.color('yellow')
t.penup()
t.goto(300-loc,0)
t.dot(30,'red') t.seth(0)
t.goto(0,-100)
t.begin_fill()
t.circle(100)
t.end_fill() if(loc<200):
t.color('black')
t.goto(87,-51)
t.pendown()
t.seth(60)
t.begin_fill()
t.circle(100,60)
t.goto(0,0)
t.end_fill() t.tracer(False)
t.screensize(800,600,'black')
t.color('yellow')
t.speed(1) for r in range(0,200,10):
t.tracer(False)
t.clear()
draw_smile(r)
time.sleep(1)
t.hideturtle()
t.tracer(True) t.clear()
t.tracer(0)
draw_smile(0)

程序运行效果如下:

3.总结

本着Talk is cheap. Show me the code原则,代码实现不做过多解释。

写起来,并不难,多试试就可以了。

本文从构思到完成,可谓是耗费了大量的心血。

如果您阅读本文后哪怕有一丢丢收获,请不要吝啬你手中关注和点赞的权力,谢谢!

用python的turtle作图(二)动画吃豆人的更多相关文章

  1. 用python的turtle作图(一)静态图

    最近,花了点时间,用python画图. 主要包括三部分,简单的静态图形,复杂的组合图形,图形动画. (一)画静态图形 长方形, 圆, 三角形, 平行四边形, 五角星 (二)图形的组合 笑脸, 国旗, ...

  2. css吃豆人动画

    一. Css吃豆人动画 1. 上半圆:两个div,内部一个圆div,外部设置宽高截取半圆 外部div动画:animation: 动画样式 1s(时长) ease(动画先低速后快速) infinite( ...

  3. Fzu2124 - 吃豆人 BFS

    Description 吃豆人是一款非常经典的游戏,游戏中玩家控制吃豆人在地图上吃光所有豆子,并且避免被怪物抓住. 这道题没有怪物,将游戏的画面分成n*m的格子,每格地形可能为空地或者障碍物,吃豆人可 ...

  4. [代码]解析nodejs的require,吃豆人的故事

    最近在项目中需要对nodejs的require关键字做解析,并且替换require里的路径.一开始我希望nodejs既然作为脚本语言,内核提供一个官方的parser库应该是一个稳定可靠又灵活的渠道,然 ...

  5. Unity项目 - 吃豆人Pacman

    项目展示 Github项目地址:Pacman 涉及知识 切片制作 Animations 状态机设置,any state切换,重写状态机 按键读取进行整数距离的刚体移动 用射线检测碰撞性 渲染顺序问题 ...

  6. TurnipBit开发板DIY呼吸的吃豆人教程实例

    转载请以链接形式注明文章来源(MicroPythonQQ技术交流群:157816561,公众号:MicroPython玩家汇) 0x00前言 吃豆人是耳熟能详的可爱形象,如今我们的TurnipBit也 ...

  7. FZU 2124 吃豆人 bfs

    题目链接:吃豆人 比赛的时候写的bfs,纠结要不要有vis数组设置已被访问,没有的话死循环,有的话就不一定是最优解了.[此时先到的不一定就是时间最短的.]于是换dfs,WA. 赛后写了个炒鸡聪明的df ...

  8. FZU 2124 FOJ 2124 吃豆人【BFS】

     Problem 2124 吃豆人 Accept: 134    Submit: 575 Time Limit: 1000 mSec    Memory Limit : 32768 KB  Probl ...

  9. 利用纯css写三角形,弧度箭头,吃豆人,气泡。放大镜,标签的源码

    1. 向上三角形

随机推荐

  1. [ flask ] flask-restful 实现嵌套的有关系的输出字段

    问题描述: 1. 先说明数据关系:有用户,和菜谱.一个用户可以拥有多个菜谱:一对多的关系 2.  resources/users.py 的输出字段: user_fields = { 'id':fiel ...

  2. 前后端分离 导致的 静态页面 加载 <script type="module" > 报CORS 跨域错误,提示 blocked by CORS policy

    1.前言 静态页面 加载 <script type="module" > 报CORS 跨域错误,提示Access to script at ftp:///xxx.js ...

  3. Golang实现集合(set)

    package set package set import ( "bytes" "fmt" "sync" ) type Set struc ...

  4. HDU 2041 超级楼梯 (斐波那契数列 & 简单DP)

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2041 题目分析:题目是真的水,不难发现规律涉及斐波那契数列,就直接上代码吧. 代码如下: #inclu ...

  5. Blinn-Phong反射模型实践(web实现)

    Blinn-Phong反射模型实践(web实现) games101 第四次作业 最终完成带贴图的 Blinn-Phong 模型,产生光照效果 完成了 不带贴图的 Blinn-Phone 反射模型 带贴 ...

  6. redis的bind误区

    对于Redis中bind的正确的理解是:bind:是绑定本机的IP地址,(准确的是:本机的网卡对应的IP地址,每一个网卡都有一个IP地址),而不是redis允许来自其他计算机的IP地址.如果指定了bi ...

  7. bit操作常见trick

    x&(x-1)可以消去最右边的1, 如果判断一个数是否是2的指数的快捷方法,比如8,二进制位1000, 那么8&(8-1)为0,只要为0就是2的指数

  8. 从容器镜像的选择-alpine 说起

    在 容器崛起之前,Alpine 还是个无名之辈,可能是因为大家并不是很关心操作系统本身的大小,毕竟大家只关心业务数据和文档,程序.库文件和系统本身的大小通常可以忽略不计. 容器技术席卷整个软件产业之后 ...

  9. golang中的pair

    package main import "fmt" type Reader interface { ReadBook() } type Writer interface { Wri ...

  10. 集合框架-Map集合练习-Map查表法

    1 package cn.itcast.p10.map.test; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 public c ...