动态像素绘画——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相关推荐

  1. 【原】通俗说法所谓数码相机的“动态像素”和“静态像素”背后的故事

    疑问:我的手机,拍照片时候分辨率达到2500多×1700多,录视频时候确是640×480.为什么差距这么大? 关键字:动态像素,静态像素,数码相机,DC,DV,CCD工作原理,CCD结构,RGB差值补 ...

  2. 支持动图、一键生成,基于 React 的开源像素绘画应用 —— Pixel Art to CSS

    目录 ​编辑 前言简介--何为React? 基于React的 Pixel Art to CSS 绘画编辑器 示例 效果演示 生成代码 具体操作 其他功能 下载地址 前言简介--何为React? 基于R ...

  3. 使用GAN绘制像素画,用机器学习的方式协助绘画者更快地完成作品

    Sprite生产的几个阶段. 即草图,线条图,底纹,区域上色和索引. 上面的图片来自Trajes Fatais:Feats of Fate游戏,我作为首席开发者从事该游戏的制作. 长话短说,每个精灵要 ...

  4. mini game游戏像素画绘画课-1

    MINI GAME 游戏像素绘画-1 -欢迎参与琢玉组的游戏制作- 你好! 也许这是你第一次绘制游戏像素画.如果你想学习像素游戏中地图瓦片与基础物体的画法, 可以仔细阅读这篇文章.同时在文章的最后,会 ...

  5. 如何在网格上绘画【UE4】

    网格绘画是玩家在游戏中的物体上绘画的能力.网格绘画的例子有Super Mario Sunshine中的 goop. Portal 2中的凝胶和Splatoon中的墨水.它可以用作游戏元素,也可以纯粹用 ...

  6. CVPR 2021 Oral | 室内动态场景中的相机重定位

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 关键词:动态场景,相机重定位 导  读 本文是对发表于计算机视觉和模式识别领域的顶级会议 CVPR 2 ...

  7. 面向动态环境基于点的语义SLAM系统

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者:robot L | 来源:知乎 https://zhuanlan.zhihu.com/p/133 ...

  8. CVPR 2021 前景背景分开建模,UCLA 视觉研究组提出用于视频预测的动态语义模型...

    关注公众号,发现CV技术之美 本文分享 CVPR 2021 论文『Learning Semantic-Aware Dynamics for Video Prediction』,前景背景分开建模,UCL ...

  9. Unity实现在白板上绘画涂鸦

    前言 有段时间没有更新博客了,不知道应该写些什么,太简单感觉没有记录的必要,太难自己都没能理解,不知道如何下手.回归初心,记录自己想记录的东西. 需要实现一个白板绘画的功能,可以使用LineRende ...

最新文章

  1. 数据挖掘原理与算法:练习题1
  2. UIControlEvents的几种类型值
  3. mysql修改界面代码_mysql修改编码
  4. 大型网站系统与Java中间件实践pdf
  5. 时间操作(Java版)—获取给定日期N天后的日期
  6. 利用STM32制作红外测温仪之硬件设计
  7. Linux 两台服务器之间传输文件和文件夹
  8. c打开指定路径文件_Selenium 系列篇(五):文件篇
  9. java支付宝第三方支付详解
  10. mysql三高讲解(二):2.2 B+树的B的意义
  11. MySQL Miscellaneous Functions(ip uuid方法)
  12. 西瓜书+实战+吴恩达机器学习(二)机器学习基础(偏差、方差、调试模型技巧)
  13. 牛客小白月赛6 A 鲲
  14. 2018.3.13校内互测总结-bitset-凸包-扫描线
  15. 什么是驱动程序签名,驱动程序如何获取数字签名?
  16. ftp扫描工具,国人最爱用的几款ftp扫描工具
  17. 微众银行“梦见”区块链
  18. 2016年农民工监测调查报告(zz)
  19. PCA与2DPCA及2D-2DPCA零基础理解(上)
  20. layui use 定义js外部引用函数

热门文章

  1. 单片机2017福建省中职省赛_2017年福建省职业院校技能大赛首批设115个赛项
  2. 4)自适应滤波(一)[LMS算法]
  3. java 静态 非静态_Java中的静态类和非静态类
  4. 梳理19年上半年图文记录笔记(ios篇)
  5. kali安装wps办公软件
  6. oracle dblink 验证,oracle通过dblink查询sqlserver报错
  7. 计算机方向 会议级别
  8. 声声不息,新“声”报到
  9. 在线书籍阅读,免费搭建站点
  10. axios核心内容(四)源码分析