tkinter和pymunk物理引擎结束的一个粒子效果源码程序。本程序还借用了pygame模块的Clock类,用来调整fps。
下面是部分代码预览:
"""
tkinter物理引擎粒子效果,把半径改大些就是一个个的弹球了。
每个物体之间会有互碰效果,这是由于采用了pymunk这个物理引擎。
本程序还借用了Pygame模块提供的Clock类,以便固定FPS。
"""
import pymunk
from tkinter import *
from random import *
from pygame.time import Clock # 导入Clock类
def rndcolor():
"""产生随机颜色"""
s = "0123456789ABCDEF"
s = [choice(s) for _ in range(6)]
s.insert(0,"#")
return "".join(s)
class Ball:
"""受重力的物理弹球类"""
container = []
def __init__(self,pos,radius,color,canvas,space):
"""
pos:坐标
radius:半径
color:颜色
canvas:画布
space:空间
假设所有的小球物理系数都是一样的。
"""
self.pos = pos
self.radius = radius
self.color = color
self.canvas = canvas
self.space = space
x1,y1 = pos[0] - radius,pos[1] - radius
x2,y2 = pos[0] + radius,pos[1] + radius
..............
window=Tk()
window.resizable(width=False,height=False) # 设置窗口不能变化大小
window.geometry("480x360+200+200") # 设置窗口的几何尺寸
window.title('tkinter物理引擎粒子效果 by lixingqiu') # 设置窗口的标题
canvas=Canvas(window,width=480,height=360,bg="white") #创建canvas
canvas.pack(expand=True)
space = pymunk.Space() # 创建物理空间
space.gravity = 0,100 # 设置重力参数,注意这里改成了正数
rectangle=canvas.create_rectangle(100,300,300,320,fill='magenta',outline='magenta')
a ,b = (100,320),(300,320)
board1 = pymunk.Segment(space.static_body,a,b,20) # 创建静态板子
board1.elasticity = 0.95 # 弹性系数
board1.friction = 0.9 # 摩擦系数
space.add(board1)
radius = 2
counter = 0
clock = Clock()
................
如需要查看所有源代码,请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

