tkinter物理引擎粒子效果

tkinter物理引擎粒子效果 python physics particle effect

tkinter物理引擎粒子效果 python physics particle effect

"""
   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
        self.id = canvas.create_oval(x1,y1,x2,y2,fill=color,outline=color)
        body = pymunk.Body(1,100)           # 创建质量为1,惯性为100的刚体
        body.position = pos                 # 设置物体的初始坐标
        self.shape = pymunk.Circle(body,radius,(0,0)) # 物体的形状
        self.shape.elasticity = 0.95        # 弹性系数
        self.shape.friction = 0.9           # 摩擦系数
        space.add(self.shape,body )         # 把物体增加到重力空间
        Ball.container.append(self)         # 球是形状表,形状有body属性

You must log in to read the rest of this article. Please log in or register as a user.