動態畫素繪畫 StarDust

2021-09-05 18:00:02 字數 3961 閱讀 7933

最早的繪畫起源遠古人類對於事物的記錄,在漫長的發展過程中,繪畫由最初的注重外在,而向事物內在進行探尋。從單純的記錄到表達情感,傳遞思考。因此我選擇了用星塵stardust這個亙古不變的題材,串聯起遠古和現在,希望使用者能輕鬆的創作這樣一幅星塵的畫作。

用drawing判斷是否開始繪畫,開始繪畫時生成隨機數,判斷此時生成那種圖案,並且為了避免行星圖案過於密集,因此通過隨機數對其出現次數進行限制

#筆刷類

class brush (object):

def __init__(self,screen):

self.drawing = false

self.screen = screen

self.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_su***ce):

pygame.sprite.sprite.__init__(self)

self.image = star_su***ce

self.rect = self.image.get_rect()

self.rect.topleft = initial_position

self.speed = 1

def update(self):

self.rect.top -= self.speed

if self.rect.top < 0:

self.kill()

繼承星星父類,初始化三張,並根據程式幀數變換更新,讓動起來。

class star_1(star):

def __init__ (self,initial_position):

self.star_su***ces = [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 = 0

star.__init__(self,initial_position,self.star_su***ces[self.r])

def update(self,tick):

star.update(self)

tick = tick//(animate_cycle//3 )

if self.flag != tick :

self.r +=1

self.flag = tick

if self.r >=3:

self.r = 0

self.image = self.star_su***ces[self.r]

初始化,視窗大小,幀數計數

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 +=1

for event in pygame.event.get():

if event.type == quit:

return

elif 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)

pass

elif event.type == mousebuttonup:

self.brush.end_draw()

if self.ticks >= animate_cycle:

self.ticks = 0

self.brush.brush_group.update(self.ticks)

self.brush.brush_group.draw(self.screen)

pygame.display.update()

mysql動態sql無效 mysql 動態sql

解析類 xmllanguagedriver 可以通過setting 中的配置解析類。xmlscriptbuilder 動態sql 語句 bind bindhandler and 通過ognl 計算值,賦值給變數 foreachhandler forecah 標籤的解析解析 select from b...

利用CSS3 動畫 繪畫 圓形動態時鐘

什麼是動畫?這是我們應該先了解的問題。按照百科的解釋動畫是採用逐幀拍攝物件並連續 而形成運動的影像技術。不論拍攝物件是什麼,只要它的拍攝方式是採用的逐格方式,時連續 形成了活動影像,它就是動畫。放在 css3 中大致可以理解為使元素從一種樣式逐漸變為另一種樣式,即將多個過渡效果放在一起形成的效果。c...

曝三星S22搭載2億畫素奧林巴斯相機 明年1月發布

高畫素作為手機相機的乙個方向,有企業仍在不懈堅持,甚至要創新紀錄。據報道,8月11日的galaxy發布會主角將是z fold 3摺疊屏 屏下攝像頭 z flip 3等,在note系列今年缺席後,三星的主要精力放在計畫明年1月發布的galaxy s22上。訊息稱,s22將搭載奧林巴斯認證的2億畫素攝像...