canvas实现 行人 走路的动画(完整实现)

先看下效果,然后再说如何实现,最终效果如下:



我们知道动画其实是不同的图片循环替换,造成视觉上图片在动。

我们制作这个动画的素材如下:



从右至左,就是一个人的行走的所有动作,抬腿,迈步,脚落下,另一只脚迈步,然后循环如此。

我们将图中的五个动作图截出来,循环播放,效果就如下:



可以看出,这是一个原地踏步的动作,如果给图片加上位移,就是行走的效果。

这里讲一个知识点:Css spirit

我们刚刚已经讲了,动画是5个动作的合成,应该有5张图片,现在我们将5张图片放在一张图片里,需要时截取图片的部分,就可以获取所需实际图片了。

这么做的原因是:

在实际的web应用中,页面上可能有上百张甚至好几百张图片,如果每张图片都是单独的,就需要建立几百个http连接,每个连接的建立都需要耗费一定时间,几个个连接的时间浪费是非常大的。我们可以把多张图片合成到一张大的图片中,然后通过CSS中的背景定位等技术,把背景定位到实际的图片位置,就可以得到所需图片了(canvas也可以利用这种思想)。这样可以节省大量的连接建立时间。是前端优化的一部分。

当然,现在我们使用各种工具构建前端工程,打包时会将很多小图标直接转成BASE64编码。
(例如,webpack, 使用url-loader插件,设置limit,打包时,将所有小于limit的图片进行BASE64编码)。

源码如下:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>walk</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
  <canvas width="500" height="400" id="canvas" style="margin-top: 200px;">
  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的示例代码,展示了如何使用 tkinter 的 canvas 和 PIL 库实现小人走路动画。在这个示例中,我们使用了三个不同的图片,分别表示小人的不同动作。 ```python from tkinter import * from PIL import Image, ImageTk class WalkingMan: def __init__(self, master): self.master = master self.canvas = Canvas(master, width=500, height=500) self.canvas.pack() # 加载小人图片 self.images = [ Image.open("walk1.png"), Image.open("walk2.png"), Image.open("walk3.png") ] self.image_tk = [ImageTk.PhotoImage(image) for image in self.images] # 在画布上创建小人 self.man = self.canvas.create_image(50, 50, image=self.image_tk[0]) # 设置定时器,每隔一段时间更新小人的位置和动作 self.current_image = 0 self.dx = 2 self.master.after(100, self.update) def update(self): # 更新小人的位置和动作 self.canvas.move(self.man, self.dx, 0) self.current_image = (self.current_image + 1) % 3 self.canvas.itemconfig(self.man, image=self.image_tk[self.current_image]) # 如果小人碰到画布边缘,改变移动方向 x1, y1, x2, y2 = self.canvas.bbox(self.man) if x2 > 500 or x1 < 0: self.dx = -self.dx # 继续更新 self.master.after(100, self.update) root = Tk() app = WalkingMan(root) root.mainloop() ``` 在这个示例中,我们创建了一个 `WalkingMan` 类,它包含一个 `Canvas` 对象,用于显示小人的动画。在 `__init__()` 方法中,我们加载了三个不同的小人图片,并在画布上创建了一个小人对象。然后,我们设置了一个定时器,每隔一段时间更新小人的位置和动作。在 `update()` 方法中,我们首先移动小人的位置,然后更新小人的动作。如果小人碰到了画布的边缘,我们会改变它的移动方向。最后,我们使用 `after()` 方法来设置下一次更新的时间,以便我们可以持续不断地更新小人的动画。 如果你想要实现更复杂的动画效果,你可能需要使用更多的图片,以及更复杂的逻辑来控制小人的移动和动作。不过,这个示例代码应该能够帮助你入门 tkinter canvas 和 PIL 库的基本用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值