你是否也想做出下图这么漂亮的动态效果?想的话就跟着我一起做吧=.=

工具:

Python——Pygame

仔细观察上图,你能发现哪些机制呢?再在下面对比一下是否跟你想的一样。

运行机制:

1、随机方向,随机速度,随机初始位置的点,在屏幕上面运动,撞到屏幕边缘会"反向”

2、点与点之间,距离在某一个值内会产生线段,且线段的颜色深浅跟距离有关

3、鼠标也能产生2的效果,说明鼠标也是一个点,只不过这个点看不见

4、看似鼠标能把点给拉动,其实是下面的两个机制组合的效果:

(1)、在鼠标周围某一个环形区域内,锁定点到鼠标之间的距离,也就是说,点在这个环形区域内点是不能动的

(2)、在另一个比较大的环形区域内,点的速度被加快,并且点的方向改为朝着鼠标移动

知道上面的机制,我们就可以开始动手实现了。

流程:

点类:

这个效果是以点为基础的,所以我们可以先描述一下点的特性:

说到点的特性,肯定有横纵坐标、大小对吧 (其实谈到点的大小,你们可能就清楚了,这里的点,其实是很小的圆),而我们这里的点,不仅仅如此,它还能动,所以它应该具有“动”这个方法,对于运动的点,你又该怎么去描述呢?运动肯定就得有方向和速度(这里不考虑加速度),方向又该怎么去描述呢?你可以用坐标去描述方向,但这里我不推荐,因为后面方向要经常变换,用坐标不方便,所以这里用运动方向与x轴顺时针的角度(弧度制)作为点的方向,而这些只是数据处理层面,还没有显示真正的点。所以还应该有“显示点”这个方法

综上

点:

属性:坐标、方向(弧度)、大小

方法:运动(根据方向),显示

import pygame as py
import math
import random
py.init()
mysize = width,height=800,600
screen = py.display.set_mode(mysize)
fullscreen=False #全屏开关
py.display.set_caption("游戏测试")
class Point:
speed=0
upspeed=1;
direction=0
position=[0,0]
size=1
def __init__(self,position,speed,direction,size):
self.position=position
self.speed=speed
self.direction=direction
self.size=size
return #坐标,速度,方向,点大小
def run(self,):
if(self.position[0]<=0 or self.position[0]>=width):
self.direction=-self.direction+math.pi
if(self.position[1]<=0 or self.position[1]>=height):
self.direction=-self.direction
if(self.distance(py.mouse.get_pos())>130 and self.distance(py.mouse.get_pos())<200):
y=(py.mouse.get_pos()[1]-self.position[1])
x=(py.mouse.get_pos()[0]-self.position[0])
if x!=0:
self.mouse_direction=math.atan2(y,x)
self.upspeed=3
x=self.upspeed*self.speed*math.cos(self.mouse_direction)
y=self.upspeed*self.speed*math.sin(self.mouse_direction)
if x!=0 and (self.distance(py.mouse.get_pos())<110 or self.distance(py.mouse.get_pos())>130):
self.position[0]+=x/abs(x)*math.ceil(abs(x))
if y!=0 and (self.distance(py.mouse.get_pos())<110 or self.distance(py.mouse.get_pos())>130):
self.position[1]+=y/abs(y)*math.ceil(abs(y))
else :
self.upspeed=1
x=self.upspeed*self.speed*math.cos(self.direction)
y=self.upspeed*self.speed*math.sin(self.direction)
if x!=0 and (self.distance(py.mouse.get_pos())<110 or self.distance(py.mouse.get_pos())>130):
self.position[0]+=x/abs(x)*math.ceil(abs(x))
if y!=0 and (self.distance(py.mouse.get_pos())<110 or self.distance(py.mouse.get_pos())>130):
self.position[1]+=y/abs(y)*math.ceil(abs(y)) #运动
def show(self):
self.position=[int(i+0.5) for i in self.position]
py.draw.circle(screen,(44,67,116),self.position,self.size) #图像变动
def distance(self,other): #求点距
return math.sqrt((self.position[0]-other[0])**2+(self.position[1]-other[1])**2)
class Graph:
pointlist=[] #点列表
def __init__(self,number):
self.pointlist.append(Point([0,0],0,0,0))
for i in range(number):
self.pointlist.append(Point([random.randint(1,width),random.randint(1,height)],random.randint(1,3),i/number*2*math.pi,3)) #根据number创建点个数
def run(self):
for it in self.pointlist:
it.run() #运动
def show(self):
for it in self.pointlist:
it.show()
self.line() #图像变动
def line(self): #画线
color=[0,0,0]
self.pointlist[0].position=py.mouse.get_pos()
for i in self.pointlist:
for j in self.pointlist:
s=i.distance(j.position)
if s<150:
color=[int(s*1.6),int(80+s),int(180+s*0.5)]
py.draw.aaline(screen,color,i.position,j.position,5) mygraph=Graph(40) #画线
while True:
screen.fill((255,255,255))
for each in py.event.get():
if each.type==py.KEYDOWN:
if each.key==py.K_F11:
fullscreen=not fullscreen
if fullscreen:
mysize=width,height=1920,1080
screen = py.display.set_mode((1920,1080),py.FULLSCREEN|py.HWSURFACE)
else:
mysize = width,height=800,600
screen = py.display.set_mode(mysize) mygraph.run()
mygraph.show()
py.display.flip()
py.time.Clock().tick(150)

粒子动画——Pygame的更多相关文章

  1. Objective-c粒子动画

    前面贴过几篇关于SpriteKit的案例文章,其中涉及到的动画都是材质类的图片切换或则常规的动画效果,没涉及到今天要说的粒子动画,今天说的粒子动画就是在游戏中实现更佳炫酷的效果必须使用的类,OC中粒子 ...

  2. 7款让人惊叹的HTML5粒子动画特效(转载)

    1.HTML5 Canvas粒子模拟效果 这是一款利用HTML5 Canvas模拟出来的30000个粒子动画,当你用鼠标在canvas画布上移动时,鼠标周围的一些粒子就会跟着你移动,并形成一定的图案, ...

  3. canvas学习之粒子动画

    项目地址:http://pan.baidu.com/s/1ccTptc 粒子动画意思就是把一个图片粒子画,然后使用粒子作出动画效果,主要两个问题:一个图片如何粒子化,这里面我们使用canvas的get ...

  4. 7款让人惊叹的HTML5粒子动画特效

    HTML5的很大一个优势就是可以更加便捷高效地制作网页粒子动画特效,特别是Canvas特性,可以实现在网页上绘制任何图形和动画.本文要分享7款让人惊叹的HTML5粒子动画特效,这些粒子特效都提供源代码 ...

  5. WPF特效-粒子动画

    原文:WPF特效-粒子动画 WPF实现泡泡龙小游戏效果.     /// -Ball to Ball Collision - Detection and Handling    /// http:// ...

  6. 带着canvas去流浪系列之九 粒子动画【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  7. 带着canvas去流浪系列之九 粒子动画

    [摘要] canvas实现粒子动画 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 粒子特效 粒子特效一般指密集点阵效果,它并不是canvas独有 ...

  8. 【带着canvas去流浪(9)】粒子动画

    目录 一. 粒子特效 二. 开发中遇到的问题 2.1 卡顿 2.2 轨迹 2.3 复位 2.4 防护层 2.5 二维向量类 三. 实现讲解 3.1 粒子类的update方法 3.2 粒子群的绘制 3. ...

  9. vue-particles粒子动画插件的使用和爬坑出现垂直滚动条

    1下载==>cnpm install vue-particles --save-dev 2引入 注册-->main.js//插件 import VueParticles from 'vue ...

随机推荐

  1. Matlab关于视觉问题中的一些自有API

    [randsample/randperm] y = randsample(n,k);从1:n中随机抽取k个数. y=  randperm(n)或者y=  randperm(n,k) [rectint] ...

  2. jenkins使用(ubuntu16.0环境)

    本文总结了使用jenkins过程.大部分是网上链接,以后自已查看使用. ssh远程链接服务器 检查是否开启ssh   ps -ef|grep ssh 1.安装ssh 2.开启root用户 3.充许ro ...

  3. Wireshark win7 没有找到接口;找不到接口

    下载安装winpcap: https://www.winpcap.org/install/default.htm

  4. 文件处理,三元操作符,seek()函数,迭代函数和列表解析,reduce函数

    1.文件读取方类型 r,r+,w,x,a, r,读文件 w,写文件,文件内容全部删除,并将新内容从第一行开始赋值 x,写文件,只有文件不存在,可写,文件存在,报错 a,在文件莫问追加信息 r+,w+, ...

  5. Azure CosmosDB (2) CosmosDB中的数据一致性

    <Windows Azure Platform 系列文章目录> 为了保证分布式数据库的高可用性和低延迟性,我们需要在可用性.延迟和吞吐量之间进行权衡. 绝大部分的商业分布式数据库,要求开发 ...

  6. 读完这个我懂了JNDI

    转载自:http://私塾在线/forum/blogPost/list/1186.html NDI 是什么 JNDI是 Java 命名与目录接口(Java Naming and Directory I ...

  7. CSS之边框

    <!DOCTYPE html> <!--边框--> <html lang="en"> <head> <meta charset ...

  8. mysql 多个字段合并

    group_concat 函数默认“,”合并 select p.id as patent_id,p.application_no,p.name,p.inventer,group_concat(pi.` ...

  9. Servlet】(2)有关Servlet实现的几个类:GenericServlet、HttpServlet、ServletConfig、ServletContext

    一.GenericServlet 1.所有的成员方法: 1.在javaWeb项目中: 2.web.xml <?xml version="1.0" encoding=" ...

  10. [UGUI]圆形Image

    参考链接: http://www.cnblogs.com/leoin2012/p/6425089.html 前面说过Mask组件会影响性能:https://www.cnblogs.com/lyh916 ...