动态像素绘画——StarDust
动态像素绘画——StarDust
对绘画的思考:
最早的绘画起源远古人类对于事物的记录,在漫长的发展过程中,绘画由最初的注重外在,而向事物内在进行探寻。从单纯的记录到表达情感,传递思考。因此我选择了用星尘StarDust这个亘古不变的题材,串联起远古和现在,希望使用者能轻松的创作这样一幅星尘的画作。
设计思路
(1)精简交互的机制。为了让绘画内容颜色和大小能与整体相匹配,我没有使用调色板和画笔大小调整功能,而是跟随用户鼠标随机生成预制的图案。
(2)亲和的画面。为了让整个画面更加亲和,而且减少程序的运算效率,我选择了像素这样一种形式,而且图案绘制很方便,在以后可以继续绘制更多图案,丰富程序内容,有较好的拓展性。
(3)音乐与绘画过程的融合。在实际的绘画过程中,我加入了音乐播放的功能,宁静的音乐中,使用者的绘画会有更强的沉浸感。
实现过程
笔刷类
用Drawing判断是否开始绘画,开始绘画时生成随机数,判断此时生成那种图案,并且为了避免行星图案过于密集,因此通过随机数对其出现次数进行限制
#笔刷类
class Brush (object):def __init__(self,screen):self.drawing = Falseself.screen = screenself.brush_group =pygame.sprite.Group()
#开始绘图def start_draw (self,pos):self.drawing = True
#绘图过程def draw(self, pos,drawflag):if drawflag == 0:if self.drawing:chose = randint(0,4)chose2 = randint(0,50)if chose == 0:brush = Star_1(pos)self.brush_group.add(brush)elif chose ==1:brush = Star_2(pos)self.brush_group.add(brush) elif chose ==2:brush = Star_3(pos)self.brush_group.add(brush) elif chose ==3:brush = Star_4(pos)self.brush_group.add(brush) elif chose ==4:if chose2 == 0:brush = Sun_1(pos)self.brush_group.add(brush) if chose2 >0 and chose2 <=3:brush = Sun_2(pos)self.brush_group.add(brush)if chose2 >3 and chose2<6:brush = Sun_3(pos)self.brush_group.add(brush)if chose2 >6 and chose2<10:brush = Sun_4(pos)self.brush_group.add(brush)
#结束绘图 def end_draw(self):self.drawing =False
星星类
继承了pygame.sprite.sprite类,用于让每个星星进行向上移动,初始化图片,碰撞体积,速度
class Star (pygame.sprite.Sprite):def __init__(self, initial_position,star_surface):pygame.sprite.Sprite.__init__(self)self.image = star_surfaceself.rect = self.image.get_rect()self.rect.topleft = initial_positionself.speed = 1def update(self):self.rect.top -= self.speedif self.rect.top < 0:self.kill()
星星1
继承星星父类,初始化三张图片,并根据程序帧数变换更新图片,让图片动起来。
class Star_1(Star):def __init__ (self,initial_position):self.star_surfaces = [pygame.image.load("star2_1.png"),pygame.image.load("star2_2.png"),pygame.image.load("star2_3.png")]self.r = randint(0,2)self.flag = 0Star.__init__(self,initial_position,self.star_surfaces[self.r])def update(self,tick):Star.update(self)tick = tick//(ANIMATE_CYCLE//3 )if self.flag != tick :self.r +=1self.flag = tickif self.r >=3:self.r = 0self.image = self.star_surfaces[self.r]
Painter类
初始化,窗口大小,帧数计数
class Painter(object):def __init__(self):self.screen = pygame.display.set_mode((800, 600))pygame.display.set_caption("Star Dust")self.brush = Brush(self.screen)self.clock = pygame.time.Clock()self.ticks = 0 #帧数计数
计数器更新,监控鼠标事件,更新图片
def run(self):mouse =pygame.image.load("rock.png")self.screen.fill((24, 20, 37))while True:self.screen.fill((24, 20, 37))self.clock.tick(FRAME_RATE)self.ticks +=1for event in pygame.event.get():if event.type == QUIT:returnelif event.type == KEYDOWN:if event.key == K_ESCAPE:self.screen.fill((24, 20, 37))elif event.type == MOUSEBUTTONDOWN:self.brush.start_draw(event.pos)elif event.type == MOUSEMOTION:r = randint(0,2)self.brush.draw(event.pos,r)passelif event.type == MOUSEBUTTONUP:self.brush.end_draw()if self.ticks >= ANIMATE_CYCLE:self.ticks = 0self.brush.brush_group.update(self.ticks)self.brush.brush_group.draw(self.screen)pygame.display.update()
动态像素绘画——StarDust相关推荐
- 【原】通俗说法所谓数码相机的“动态像素”和“静态像素”背后的故事
疑问:我的手机,拍照片时候分辨率达到2500多×1700多,录视频时候确是640×480.为什么差距这么大? 关键字:动态像素,静态像素,数码相机,DC,DV,CCD工作原理,CCD结构,RGB差值补 ...
- 支持动图、一键生成,基于 React 的开源像素绘画应用 —— Pixel Art to CSS
目录 编辑 前言简介--何为React? 基于React的 Pixel Art to CSS 绘画编辑器 示例 效果演示 生成代码 具体操作 其他功能 下载地址 前言简介--何为React? 基于R ...
- 使用GAN绘制像素画,用机器学习的方式协助绘画者更快地完成作品
Sprite生产的几个阶段. 即草图,线条图,底纹,区域上色和索引. 上面的图片来自Trajes Fatais:Feats of Fate游戏,我作为首席开发者从事该游戏的制作. 长话短说,每个精灵要 ...
- mini game游戏像素画绘画课-1
MINI GAME 游戏像素绘画-1 -欢迎参与琢玉组的游戏制作- 你好! 也许这是你第一次绘制游戏像素画.如果你想学习像素游戏中地图瓦片与基础物体的画法, 可以仔细阅读这篇文章.同时在文章的最后,会 ...
- 如何在网格上绘画【UE4】
网格绘画是玩家在游戏中的物体上绘画的能力.网格绘画的例子有Super Mario Sunshine中的 goop. Portal 2中的凝胶和Splatoon中的墨水.它可以用作游戏元素,也可以纯粹用 ...
- CVPR 2021 Oral | 室内动态场景中的相机重定位
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 关键词:动态场景,相机重定位 导 读 本文是对发表于计算机视觉和模式识别领域的顶级会议 CVPR 2 ...
- 面向动态环境基于点的语义SLAM系统
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:robot L | 来源:知乎 https://zhuanlan.zhihu.com/p/133 ...
- CVPR 2021 前景背景分开建模,UCLA 视觉研究组提出用于视频预测的动态语义模型...
关注公众号,发现CV技术之美 本文分享 CVPR 2021 论文『Learning Semantic-Aware Dynamics for Video Prediction』,前景背景分开建模,UCL ...
- Unity实现在白板上绘画涂鸦
前言 有段时间没有更新博客了,不知道应该写些什么,太简单感觉没有记录的必要,太难自己都没能理解,不知道如何下手.回归初心,记录自己想记录的东西. 需要实现一个白板绘画的功能,可以使用LineRende ...
最新文章
- 数据挖掘原理与算法:练习题1
- UIControlEvents的几种类型值
- mysql修改界面代码_mysql修改编码
- 大型网站系统与Java中间件实践pdf
- 时间操作(Java版)—获取给定日期N天后的日期
- 利用STM32制作红外测温仪之硬件设计
- Linux 两台服务器之间传输文件和文件夹
- c打开指定路径文件_Selenium 系列篇(五):文件篇
- java支付宝第三方支付详解
- mysql三高讲解(二):2.2 B+树的B的意义
- MySQL Miscellaneous Functions(ip uuid方法)
- 西瓜书+实战+吴恩达机器学习(二)机器学习基础(偏差、方差、调试模型技巧)
- 牛客小白月赛6 A 鲲
- 2018.3.13校内互测总结-bitset-凸包-扫描线
- 什么是驱动程序签名,驱动程序如何获取数字签名?
- ftp扫描工具,国人最爱用的几款ftp扫描工具
- 微众银行“梦见”区块链
- 2016年农民工监测调查报告(zz)
- PCA与2DPCA及2D-2DPCA零基础理解(上)
- layui use 定义js外部引用函数