精华内容
下载资源
问答
  • python动画

    2014-09-07 11:06:19
    简单的pyhthon动画演示,可以了解到python是怎么进行动画的代码编写
  • PAL:Python动画库-源码

    2021-03-10 20:22:51
    朋友 Python动画
  • Python 动画没有秘密

    2020-11-06 17:12:09
    Sugar 上次写过一篇《MATLAB 动画没有秘密》,这次是其姐妹篇:Python 动画也没有秘密。 但这个妹篇比姐姐要成熟很多,不仅说了如何用 Python 绘图、做动画,还由浅入深丰富了更多的知识内容。 想知道丰富了什么就请...

    背景介绍:
    Sugar 上次写过一篇《MATLAB 动画没有秘密》,这次是其姐妹篇:Python 动画也没有秘密。
    但这个妹篇比姐姐要成熟很多,不仅说了如何用 Python 绘图、做动画,还由浅入深丰富了更多的知识内容。
    想知道丰富了什么就请往下看吧!

    Python 基本绘图

    在做动画之前,先用下面的例子来看下 Python 是怎样绘图的:

    import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
     
    x = np.linspace(0, 2*np.pi, 100)
    y = np.sin(x)
     
    fig = plt.figure(tight_layout=True)
    plt.plot(x,y)
    plt.grid(ls="--")
    plt.show()
    

    Sugar 在 Thonny IDE 下的效果是这样的:

    【解读】
    1、linspace() 函数与 MATLAB 的同名函数作用相同,可以参考《MATLAB 动画没有秘密》
    2、tight_layout = True 是让绘图自动紧凑布局,以免文字遮挡图线,详细请参考《matplotlib 进阶之Tight Layout guide》
    3、ls="--" 这个 ls 指的是 linestyle,指定图线的线型(与 MATLAB 非常类似),详细请参考《matplotlib绘图线条样式和线条颜色》《Python可视化中Matplotlib(线条的详细样式及线型、保存图片、plot的详细风格和样式)、背景色、点和线的详细设置》

    需要注意的是本例的 ls="--" 设定提网格线型,这一点 Sugar 觉得比 MATLAB 要灵活。

    Python 基本动画

    试一试下面的例子:

    import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
     
    def update_points(num):
        '''
        更新数据点
        '''
        point_ani.set_data(x[num], y[num])
        return point_ani,
     
    x = np.linspace(0, 2*np.pi, 100)
    y = np.sin(x)
     
    fig = plt.figure(tight_layout=True)
    plt.plot(x,y)
    point_ani, = plt.plot(x[0], y[0], "ro")
    plt.grid(ls="--")
    # 开始制作动画
    ani = animation.FuncAnimation(fig, update_points, np.arange(0, 100), interval=100, blit=True)
    
    # ani.save('sin_test2.gif', writer='imagemagick', fps=10)
    plt.show()
    

    效果:

    【解读】


    弹球建模

    MATLAB 的弹球建模见《matlab三个简单物理建模实例(笔记)》

    Sugar 把《matlab三个简单物理建模实例(笔记)》对译成一份 Python 版,通过对比会发现 matplotlib 与 MATLAB 很相似,非常的易学。

    一、自由落体建模

    import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    
    g=9.8    # 重力加速度
    v=0      # 设定初始速度条件
    s=[0]    # 设定初始位移条件
    t=[0]    # 设定起始时间
    dt=0.1   # 设置计算步长
    N=20     # 设置仿真递推次数. 仿真时间等于N与dt的乘积
    for k in range(0,N):
        v=v+g*dt                    # 计算新时刻的速度
        s.append(s[k]+v*dt)         # 新位移
        t.append(t[k]+dt)           # 时间更新
    
    # 理论计算, 以便与仿真结果对照
    t_theory=np.arange(0, N*dt, 0.01)       # 设置解析计算的时间点
    v_theory=g*t_theory                     # 解析计算的瞬时速度
    s_theory=1/2*g*(t_theory**2)            # 解析计算的瞬时位移
    
    # 作图: 仿真结果与解析结果对比
    t=np.arange(0,N*dt+0.01,dt)
    p1,p2 = plt.plot(t,s,'o', t_theory,s_theory, '-')
    plt.legend([p1, p2], ["仿真结果", "理论结果"], loc='upper left', prop={'family':'SimHei','size':15})
    plt.show()
    

    效果:

    改进一下:

    import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    
    g=9.8    # 重力加速度
    v=[0]    # 设定初始速度条件
    s=[0]    # 设定初始位移条件
    t=[0]    # 设定起始时间
    dt=0.1   # 设置计算步长
    N=20     # 设置仿真递推次数. 仿真时间等于N与dt的乘积
    for k in range(0,N):
        v.append(v[k]+g*dt)                    # 计算新时刻的速度
        s.append(s[k]+v[len(v)-1]*dt)         # 新位移
        t.append(t[k]+dt)           # 时间更新
    
    # 理论计算, 以便与仿真结果对照
    t_theory=np.arange(0, N*dt, 0.01)       # 设置解析计算的时间点
    v_theory=g*t_theory                     # 解析计算的瞬时速度
    s_theory=1/2*g*(t_theory**2)            # 解析计算的瞬时位移
    
    # 作图: 仿真结果与解析结果对比
    t=np.arange(0,N*dt+0.01,dt)
    plt.subplot(1,2,1)
    p1,p2 = plt.plot(t,s,'o', t_theory,s_theory, '-')
    plt.legend([p1, p2], ["位移仿真结果", "位移理论结果"], loc='upper left', prop={'family':'SimHei','size':15})
    plt.subplot(1,2,2)
    p3,p4 = plt.plot(t,v,'o', t_theory,v_theory, '-')
    plt.legend([p3, p4], ["速度仿真结果", "速度理论结果"], loc='upper left', prop={'family':'SimHei','size':15})
    plt.show()
    

    效果:

    这里仔细思考一下“位移的仿真结果为什么会在理论结果之上”,这个问题的答案就是离散采样的误差来源之一。如果想明白了,那么就能做出下面这个效果:

    知道了离散采样的误差来源,就能想办法消除相应的误差,那么就会达到下图的效果:

    看到这里就能理解:为什么在控制上总是倾向于更高速的处理器。以上两图的代码可以在 MultiMCU EDU 公众号后台回复 py01 获得,如果读者动脑想了,不妨与 Sugar 的代码对比一下是不是一样。

    二、弹球建模

    理解了上面的自由落体仿真,下面就用动画形式展示一下小球自由落体触地之后的情况。为使模型简单方便理解,需做出如下假设:

    1、忽略空气阻力;
    2、落点为光滑水平面,触地立即反弹;
    3、固定撞击损耗(每撞击一次速度降为原来的 85%)。

    下面先来看一下效果:

    然后给出 Python 代码,如下:

    import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    
    def update_points_pos(num):
        ani_pos.set_data(x[num], y[num])
        return ani_pos,
    
    def update_points_vel(num):
        ani_vel.set_data(x[num], v[num])
        return ani_vel,
    
    g=9.8      # 重力加速度
    v0=0       # 初始速度
    y0=1       # 初始位置
    m=1        # 小球质量
    t0=0       # 起始时间
    K=0.85     # 弹跳的损耗系数
    N=1100     # 仿真的总步进数
    dt=0.005   # 仿真步长
    v=[v0]     # 初状态
    y=[y0] 
    vx=2       # 水平速度
    x=[0]      # 水平方向的初始位置
    
    for k in range(1,N): 
        if y[len(y)-1]>0:      # 小球在空中的动力方程计算
            v.append(v[len(v)-1] - g*dt)
            y.append(y[len(y)-1] + v[len(v)-1]*dt)
        else:        # 碰击瞬间的计算
            y.append(-K*v[len(v)-1]*dt)  
            v.append(-K*v[len(v)-1]-g*dt)   
     
        x.append(x[len(x)-1] + vx*dt)
    
    fig1 = plt.figure(tight_layout=True)
    plt.plot(x,y,"--")
    ani_pos, = plt.plot(x[0], y[0], "ro")
    plt.axis([-2, 13, 0, 1])
    
    fig2 = plt.figure(tight_layout=True)
    plt.plot(x,v,"--")
    ani_vel, = plt.plot(x[0], v[0], "ro")
    plt.axis([-2, 13, -6, 6])
    
    ani01 = animation.FuncAnimation(fig1, update_points_pos, np.arange(0, N), interval=15, blit=True)
    ani02 = animation.FuncAnimation(fig2, update_points_vel, np.arange(0, N), interval=15, blit=True)
    
    plt.show()
    

    三、Zeno 行为

    弹球是展示 Zeno 现象的最简单模型之一。一般来说,Zeno 行为的特征可非正式地表示为某些混合动力系统(Hybrid System)在有限时间间隔内发生无限数量的事件。在弹球模型中,球在失去能量的同时,将以越来越小的时间间隔与地面发生多次碰撞。因此,模型会经历 Zeno 行为。具有 Zeno 行为的模型很难在计算机上进行仿真,但在许多常见的重要工程应用中又时常出现。

    Wikipedia 上对于 zeno behavior 的英文描述如下:

    英文不太熟的可以看下面这个自动翻译来了解一下这个有趣的现象:

    四、MATLAB Simulink 弹球仿真

    MATLAB Simulink 的弹球仿真本文不展开,留个链接如下:

    https://ww2.mathworks.cn/help/simulink/slref/simulation-of-a-bouncing-ball.html

    不展开的原因是理论基础有点高,要了解最常用的积分变换方法之一:拉普拉斯变换。这里给出与弹球仿真相关的两个拉低变换表,以供愿意研究 Simulink 的读者参考。

    关注作者

    欢迎扫码关注我的公众号MultiMCU EDU

    提示:在公众号“关于我”页面可加作者微信好友。

    喜欢本文求点赞,有打赏我会更有动力。

    展开全文
  • 背景介绍:Sugar 上次写过一篇《MATLAB 动画没有秘密》,这次是其姐妹篇:Python 动画也没有秘密。但这个妹篇比姐姐要成熟很多,不仅说了如何用 Python 绘图、做动画,还由浅入深丰富了更多的知识内容。想知道丰富了...

    背景介绍:
    Sugar 上次写过一篇《MATLAB 动画没有秘密》,这次是其姐妹篇:Python 动画也没有秘密。
    但这个妹篇比姐姐要成熟很多,不仅说了如何用 Python 绘图、做动画,还由浅入深丰富了更多的知识内容。
    想知道丰富了什么就请往下看吧!

    Python 基本绘图

    在做动画之前,先用下面的例子来看下 Python 是怎样绘图的:

    import numpy as npimport matplotlibimport matplotlib.pyplot as pltimport matplotlib.animation as animationx = np.linspace(0, 2*np.pi, 100)y = np.sin(x)fig = plt.figure(tight_layout=True)plt.plot(x,y)plt.grid(ls="--")plt.show()

    Sugar 在 Thonny IDE 下的效果是这样的:

    04e05e61718f1d32dcb2491cb4a427e0.png

    【解读】
    1、linspace() 函数与 MATLAB 的同名函数作用相同,可以参考《MATLAB 动画没有秘密》;
    2、tight_layout = True 是让绘图自动紧凑布局,以免文字遮挡图线,详细请参考《matplotlib 进阶之Tight Layout guide》
    3、ls="--" 这个 ls 指的是 linestyle,指定图线的线型(与 MATLAB 非常类似),详细请参考《matplotlib绘图线条样式和线条颜色》、《Python可视化中Matplotlib(线条的详细样式及线型、保存图片、plot的详细风格和样式)、背景色、点和线的详细设置》

    需要注意的是本例的 ls="--" 设定提网格线型,这一点 Sugar 觉得比 MATLAB 要灵活。

    Python 基本动画

    试一试下面的例子:

    import numpy as npimport matplotlibimport matplotlib.pyplot as pltimport matplotlib.animation as animationdef update_points(num):    '''    更新数据点    '''    point_ani.set_data(x[num], y[num])    return point_ani,x = np.linspace(0, 2*np.pi, 100)y = np.sin(x)fig = plt.figure(tight_layout=True)plt.plot(x,y)point_ani, = plt.plot(x[0], y[0], "ro")plt.grid(ls="--")# 开始制作动画ani = animation.FuncAnimation(fig, update_points, np.arange(0, 100), interval=100, blit=True)# ani.save('sin_test2.gif', writer='imagemagick', fps=10)plt.show()

    效果:

    c1838a0e32f39b394212da623f6ddab3.gif        

    【解读】

    c80ce109d4154e07a6581b996e2b8f34.png

    97df1d4a15844a8a7a236a07770d621e.png

    弹球建模

    MATLAB 的弹球建模见《matlab三个简单物理建模实例(笔记)》

    Sugar 把《matlab三个简单物理建模实例(笔记)》对译成一份 Python 版,通过对比会发现 matplotlib 与 MATLAB 很相似,非常的易学。

    一、自由落体建模

    import numpy as npimport matplotlibimport matplotlib.pyplot as pltg=9.8    # 重力加速度v=0      # 设定初始速度条件s=[0]    # 设定初始位移条件t=[0]    # 设定起始时间dt=0.1   # 设置计算步长N=20     # 设置仿真递推次数. 仿真时间等于N与dt的乘积for k in range(0,N):    v=v+g*dt                    # 计算新时刻的速度    s.append(s[k]+v*dt)         # 新位移    t.append(t[k]+dt)           # 时间更新# 理论计算, 以便与仿真结果对照t_theory=np.arange(0, N*dt, 0.01)       # 设置解析计算的时间点v_theory=g*t_theory                     # 解析计算的瞬时速度s_theory=1/2*g*(t_theory**2)            # 解析计算的瞬时位移# 作图: 仿真结果与解析结果对比t=np.arange(0,N*dt+0.01,dt)p1,p2 = plt.plot(t,s,'o', t_theory,s_theory, '-')plt.legend([p1, p2], ["仿真结果", "理论结果"], loc='upper left', prop={'family':'SimHei','size':15})plt.show()

    效果:

    80a113cc7d6f15ad11ccb0cfd1c77b04.png

    改进一下:

    import numpy as npimport matplotlibimport matplotlib.pyplot as pltg=9.8    # 重力加速度v=[0]    # 设定初始速度条件s=[0]    # 设定初始位移条件t=[0]    # 设定起始时间dt=0.1   # 设置计算步长N=20     # 设置仿真递推次数. 仿真时间等于N与dt的乘积for k in range(0,N):    v.append(v[k]+g*dt)                    # 计算新时刻的速度    s.append(s[k]+v[len(v)-1]*dt)         # 新位移    t.append(t[k]+dt)           # 时间更新# 理论计算, 以便与仿真结果对照t_theory=np.arange(0, N*dt, 0.01)       # 设置解析计算的时间点v_theory=g*t_theory                     # 解析计算的瞬时速度s_theory=1/2*g*(t_theory**2)            # 解析计算的瞬时位移# 作图: 仿真结果与解析结果对比t=np.arange(0,N*dt+0.01,dt)plt.subplot(1,2,1)p1,p2 = plt.plot(t,s,'o', t_theory,s_theory, '-')plt.legend([p1, p2], ["位移仿真结果", "位移理论结果"], loc='upper left', prop={'family':'SimHei','size':15})plt.subplot(1,2,2)p3,p4 = plt.plot(t,v,'o', t_theory,v_theory, '-')plt.legend([p3, p4], ["速度仿真结果", "速度理论结果"], loc='upper left', prop={'family':'SimHei','size':15})plt.show()

    效果:

    9cc83f6c6b04120fa220652756fb07a7.png

    这里仔细思考一下“位移的仿真结果为什么会在理论结果之上”,这个问题的答案就是离散采样的误差来源之一。如果想明白了,那么就能做出下面这个效果:

    5cf2564339a1a9099522455dafde991c.png

    知道了离散采样的误差来源,就能想办法消除相应的误差,那么就会达到下图的效果:

    53b6141a19726b5fd9cdc2f5fd2feca8.png

    看到这里就能理解:为什么在控制上总是倾向于更高速的处理器。以上两图的代码可以在 MultiMCU EDU 公众号后台回复 py01 获得,如果读者动脑想了,不妨与 Sugar 的代码对比一下是不是一样。

    二、弹球建模

    理解了上面的自由落体仿真,下面就用动画形式展示一下小球自由落体触地之后的情况。为使模型简单方便理解,需做出如下假设:

    1、忽略空气阻力;
    2、落点为光滑水平面,触地立即反弹;
    3、固定撞击损耗(每撞击一次速度降为原来的 85%)。

    下面先来看一下效果:

    a9f6e24dde4ccfe238b3b3fd678133f9.gif

    然后给出 Python 代码,如下:

    import numpy as npimport matplotlibimport matplotlib.pyplot as pltimport matplotlib.animation as animationdef update_points_pos(num):    ani_pos.set_data(x[num], y[num])    return ani_pos,def update_points_vel(num):    ani_vel.set_data(x[num], v[num])    return ani_vel,g=9.8      # 重力加速度v0=0       # 初始速度y0=1       # 初始位置m=1        # 小球质量t0=0       # 起始时间K=0.85     # 弹跳的损耗系数N=1100     # 仿真的总步进数dt=0.005   # 仿真步长v=[v0]     # 初状态y=[y0] vx=2       # 水平速度x=[0]      # 水平方向的初始位置for k in range(1,N):     if y[len(y)-1]>0:      # 小球在空中的动力方程计算        v.append(v[len(v)-1] - g*dt)        y.append(y[len(y)-1] + v[len(v)-1]*dt)    else:        # 碰击瞬间的计算        y.append(-K*v[len(v)-1]*dt)          v.append(-K*v[len(v)-1]-g*dt)       x.append(x[len(x)-1] + vx*dt)fig1 = plt.figure(tight_layout=True)plt.plot(x,y,"--")ani_pos, = plt.plot(x[0], y[0], "ro")plt.axis([-2, 13, 0, 1])fig2 = plt.figure(tight_layout=True)plt.plot(x,v,"--")ani_vel, = plt.plot(x[0], v[0], "ro")plt.axis([-2, 13, -6, 6])ani01 = animation.FuncAnimation(fig1, update_points_pos, np.arange(0, N), interval=15, blit=True)ani02 = animation.FuncAnimation(fig2, update_points_vel, np.arange(0, N), interval=15, blit=True)plt.show()

    三、Zeno 行为

    弹球是展示 Zeno 现象的最简单模型之一。一般来说,Zeno 行为的特征可非正式地表示为某些混合动力系统(Hybrid System)在有限时间间隔内发生无限数量的事件。在弹球模型中,球在失去能量的同时,将以越来越小的时间间隔与地面发生多次碰撞。因此,模型会经历 Zeno 行为。具有 Zeno 行为的模型很难在计算机上进行仿真,但在许多常见的重要工程应用中又时常出现。

    Wikipedia 上对于 zeno behavior 的英文描述如下:

    e3120f92bbe5387fa6eef0cc6e564fa3.png

    英文不太熟的可以看下面这个自动翻译来了解一下这个有趣的现象:

    f9ac39aff1f6437aaf47d83f1685125f.png

    四、MATLAB Simulink 弹球仿真

    MATLAB Simulink 的弹球仿真本文不展开,留个链接如下:

    https://ww2.mathworks.cn/help/simulink/slref/simulation-of-a-bouncing-ball.html

    不展开的原因是理论基础有点高,要了解最常用的积分变换方法之一:拉普拉斯变换。这里给出与弹球仿真相关的两个拉低变换表,以供愿意研究 Simulink 的读者参考。

    ae452274cbfb9b80c45b5872b07e2c12.png

    452a91a1f2598f5102ba6c3774404398.png

    PS

    本篇内的链接由于是在公众号上的原因,与微信无关的都会被屏蔽。Sugar 在 CSDN 上发了同样一篇,可以点链接、图片更清晰。

    2ca5db265ad24beaa4b8780de8e0bf6d.png

    关注作者

    欢迎扫码关注我的公众号MultiMCU EDU5137b73431f9169bc5e61e48a089a3cc.png

    提示:在公众号“关于我”页面可加作者微信好友。

    喜欢本文求点赞,有打赏我会更有动力。

    展开全文
  • 父亲节到了,教你用Python动画神器送上节日祝福

    千次阅读 多人点赞 2019-06-15 13:59:10
    我上周介绍了3b1b的manim项目用Python快乐学数学,Github万星神器Manim简介,原计划在暑假期间教一下孩子在manim上做一个入门动画。结果没想到在今天教孩子“hello world"的时候,宝宝竟然还记得周末是父亲节,直接...

            我上周介绍了3b1b的manim项目用Python快乐学数学,Github万星神器Manim简介,原计划在暑假期间教一下孩子在manim上做一个入门动画。结果没想到在今天教孩子“hello world"的时候,宝宝竟然还记得周末是父亲节,直接问我“父亲节快乐”应该怎么做。我真的是太惊喜了,下面我就会使用Manim来制作祝福的教程奉送给大家。

                 Manim的Happy father's Day初步教程

          Manim中文字属于TextMobject类,圆形(circle)、方形(square)形状属于Mobject类,”hello world“这种简单显示文字的要求,只需要新建一个TextMobject类的对象,然后显示出来即可。咱们可以继续拿example_scenes.py开刀,使用gedit example_scenes.py命令打开example_scenes.py,在其中新建一个HappyFathersDay函数即可,具体代码如下:

    Class HappyFathersDay(Scene):
    	Def construct(self):
            happyfatherdayText=TextMobject(“Happy father’s Day”)#然后再定义一个文字对
    		Self.play(ShowCreation(happyfatherdayText))#再把这个对象show出来即可。
    

          当然这里如果读者把第三行的“Happy father's day"换成”hello world“,就是经典的hello world教程了。然后使用以下命令就能看到效果了。

    python extract_scene.py example_scenes.py HappyFathersDay -pl

           如果读者遇到报错” latex:not found"那可没关系,这是因为latex太大,安装起来可能漏过了一些包,使用以下命令就能修复

    sudo apt install texlive-full --fix-missing

         之后生成的结果如下,虽然简单,而且4行代码中的3行半还都是我敲的,不过孩子能有这份心我真的欣慰啊。

         Happy father's Day进阶 

       

          除了文字和形状外,manim还可以定义点。语法如下:DotN=Dot(color,point),通过点还可以定义线这个也简单lineN=Line(dotn1,dotn2),有了线就可以做一淡入淡出的工作了。具体代码如下:

    Class HappyFathersDay(Scene):
    	Def construct(self):
            happyfatherdayText=TextMobject(“Happy father’s Day”)
            Dot1=Dot(color=COLOR_MAP[“RED_A”],point=UL+DL)
            Dot2=Dot(color=COLOR_MAP[“RED_A”],point=UR+DR)
            Line1=Line(Dot1,Dot2)
            self.play(ShowCreation(happyfatherdayText))#显示文字
            self.play(Transform(happyfatherdayText, Line1))#变为直线
            self.play(FadeOut(Line1))#直线淡出
    

        上述代码使用“python extract_scene.py example_scenes.py HappyFathersDay -pl”生成后的效果如下: 

        那么淡入的效果其实不贴代码想必读者也可以完成了吧。

               后续

        Manim之父3b1b实在是一个伟大的机构,笔者随手就能做出一些非常强悍数学动画效果出来,比如像这样,我在后续的博客中有机会还会继续向大家介绍Manim的使用心得。

         今天就到这里,最后祝所有码二代们都能成绩优秀;编程技术一代更比一代强;祝所有程序员父亲们节日快乐! 

     

    展开全文
  • 图像在屏幕上:screen.blit(character.images,(30,100))以下是类变量包含的内容:^{pr2}$此变量从不更新,因此自然不会显示任何动画。在以下是我使用this image作为精灵表的实现:import pygame, sysfrom pygame....

    你在瞎说字符.图像在屏幕上:screen.blit(character.images,(30,100))

    以下是类变量包含的内容:

    ^{pr2}$

    此变量从不更新,因此自然不会显示任何动画。在

    以下是我使用this image作为精灵表的实现:import pygame, sys

    from pygame.locals import *

    sheet = 'sheet.png'

    pygame.init()

    screen = pygame.display.set_mode((500, 500))

    FPS = 30

    FPSCLOCK = pygame.time.Clock()

    class Character(object):

    def __init__(self, sheet, width, height, end):

    self.sheet = pygame.image.load(sheet)

    self.width = width

    self.height = height

    self.end = end

    self.counterX = 0

    self.counterY = 0

    self.imageWidth = self.sheet.get_rect().size[0]

    self.imageHeight = self.sheet.get_rect().size[1]

    self.spritesPerRow = self.imageWidth / self.width

    self.spritesPerCol = self.imageHeight / self.height

    # These assertions will raise an exception if image size, sprite size

    # and sprite count don't add up as they should be. You can experiment

    # with this by changing the values when this object is instantiated.

    assert self.imageWidth % self.width == 0, 'Incorrect sprite width!'

    assert self.imageHeight % self.height == 0, 'Incorrect sprite height!'

    assert self.spritesPerRow * self.spritesPerCol == self.end, \

    'Incorrect number of sprites!'

    def update(self):

    # The counters keep track of which sprite to display from the

    # sprite sheet.

    self.spriteArea = (self.counterX * self.width,

    self.counterY * self.height,

    self.width, self.height)

    self.counterX += 1

    if self.counterX == self.spritesPerRow:

    self.counterX = 0

    self.counterY += 1

    if self.counterY == self.spritesPerCol:

    self.counterX = 0

    self.counterY = 0

    Test = Character(sheet, 125, 125, 16)

    # Displays the sprite sheet for one second.

    screen.blit(Test.sheet, (0, 0))

    pygame.display.update()

    pygame.time.wait(1000)

    while True:

    for event in pygame.event.get(QUIT):

    pygame.quit()

    sys.exit()

    screen.fill((255, 255, 255))

    Test.update()

    screen.blit(Test.sheet, (188, 188), Test.spriteArea)

    pygame.display.update()

    FPSCLOCK.tick(FPS)

    免责声明:

    我也是一个Pygame/Python新手,我不知道这种方法是否有效。。。但至少它能如愿工作!在

    展开全文
  • 主要介绍了10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • Python动画设计教程】系列文章目录 【第一讲】软件准备 【第二讲】搭建界面,Excel读取,图片读取 【第三讲】图像绘制 【第四讲】制作动画 【第五讲】问题处理 文章目录1 轮换序列的表格2 根据表格轮换图片3 使用...
  • 如果Python可以做动画Python来写动画,有这么神奇吗?先把体验地址给大家放送出来吧!http://xuepython.cn/lesson/python_huahua_01这个网站的效果图如下,分为两个区域,画布区用于显示动画,代码区编写代码...
  • The iteration update very slow, n+=3 for each time only but my data has 10000 elements.Like, It tries to update every single frame n=1,n=2,n=3.. but the hist function is really power consuming....
  • 这里开始介绍使用Python库Pygame来编写游戏和动画,用代码来编写属于自己的游戏,想想就是特别有成就感,学习编程也会变得非常有趣。Pygame是一个开源的Python模块,可以用于2D游戏制作,包含对图像、声音、视频、.....
  • Matplotlib是一个Python的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。...
  • 我可以用形状和数字创建一个简单的图表....videofile(figpath + 'trax_0.mp4', fps=fps) clip.ipython_display(fps=fps, width=W, autoplay=0, loop=0) 我希望能够在循环的每个步骤之间使用延时来创建动画GIF.
  • Python动画实现

    千次阅读 2019-12-04 15:18:16
    这里只是简单的移动了一下飞机,当飞机完全出屏幕上部返回屏幕底部 # 1.在游戏初始化定义一个pygame.Rect的变量记录大飞机初始位置 # 2....# 3.y<=0将大飞机移到屏幕的底部 import pygame from pygame.locals ...
  • 10分分钟钟教教你你用用python动动画画演演示示深深度度优优先先算算法法搜搜寻寻逃逃出出迷迷宫宫的的路路径径 这篇文章主要介绍了10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径,非常不错具 一定的...
  • I'm trying to generate an animated GIF using images2gif.py (pastebin to the most recent verson : bit.ly/XMMn5h ).I'm using this Python script:__author__ = 'Robert'from images2gif import writeGiffrom ....
  • 迭代更新很慢,每次n+=3,但我的数据有10000元素。比如,它尝试更新每一帧n=1,n=2,n=3。。但是hist函数真的很耗电。我不知道有没有什么方法可以跳过从n=1到n=500再到n=1000的帧。在import matplotlib.animation as...
  • from turtle import *'''Python学习'''#无轨迹跳跃defmy_goto(x, y):penup()goto(x, y)pendown()#眼睛defeyes():fillcolor("#ffffff")begin_fill()tracer(False)a= 2.5for i in range(120):if 0 <= i < 30 or ...
  • Python动画设计教程】系列文章目录 【第一讲】软件准备 【第二讲】搭建界面,Excel读取,图片读取 【第三讲】图像绘制 【第四讲】制作动画 【第五讲】问题处理 文章目录【Python动画设计教程】系列文章目录1 绘制...
  • 寻找起始节点与目的节点之间路径的算法,常用于搜索逃出迷宫的路径。主要头脑是,从入口最先,依次征采周围可能的节点坐标,但不会重复经由同一个节点,且不能通过障碍节点。若是走到某个节点发现无路可走,那么就会...
  • I'm working on a python project using spyder from anaconda and I am trying to get the animation function working.I found a basic animation example here: ...
  • 您需要注意,保存的动画是blit = False时将显示的动画.因此,发生的是所有填充都加到了画布上.一种解决方案是在添加下一个之前删除前一个(因为set_data之类的内容不直接用于填充).再次,我们将创建一个填充列表,并实际...
  • 征服python一书所附资源,包括源码使用说明及动画演示,学习python语言的有用资料啊。
  • 计划2020年1月18日完成4小时课时,完成动画设计1 轮换序列的表格svn地址:svn://gitee.com/bigearrabbit/kevinpython/kevinanimation检出版本:5表格设计按照30度一个图片,360/30 = 12个图片。每行为一个时间的状态...
  • I am currently trying to animate a series of images where for each image an initially unknown number of ellipses are drawn. I have tried many things so far, but haven't found a solution yet, though I ...
  • 计划2020年1月18日完成4小时课时,完成动画设计1 轮换序列的表格svn地址:svn://gitee.com/bigearrabbit/kevinpython/kevinanimation检出版本:5表格设计按照30度一个图片,360/30 = 12个图片。每行为一个时间的状态...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,478
精华内容 1,791
关键字:

python动画

python 订阅