日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python——动画精灵

發布時間:2023/12/18 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python——动画精灵 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

繼續探索Python中Pygame的強大功能~~ Fighting ^ ▽^

文章目錄

    • 一. 什么是動畫精靈
    • 二. Sprite類
    • 三. move( ) 方法

前邊已經講到,看似簡單的動畫實際上并不簡單。如果有大量圖像在四處移動,要想跟蹤每個圖像“底下”有些什么,以便在移動圖像時能夠重繪,這要給很大的功夫。我們之前的小狗,因為背景是白色的,所以更容易一些。倘若背景上有一些圖形,肯定會復雜得多。

下面就要介紹這一篇的主角——動畫精靈,pygame有一個特殊的模塊來處理動畫精靈。

一. 什么是動畫精靈

動畫精靈表示一個單位來移動和顯示一組像素,這是一種圖形對象。

“動畫精靈”這個詞是從老式計算機和游戲機流傳下來的。這些老式游戲機不能很快地繪制和擦除圖形來保證游戲正常工作。這些游戲機有一些特殊的硬件,專門用來處理需要快速移動的游戲對象。這些對象就稱為“動畫精靈”。它們有一些特殊的限制,不過可以非常快地繪制和更新……如今,一般來講,計算機的速度已經足夠快了,不需要專門的硬件也可以很好地處理類似動畫精靈的對象。不過‘動畫精靈’這個詞仍用來便是二維游戲中的所有動畫對象。

可以把動畫精靈想成一個小圖片——一種可以在屏幕上移動的圖形對象,并且可以與其他圖形對象交互。

二. Sprite類

Pygame的sprite模塊提供了一個動畫精靈基類,名為sprite。正常情況下,我們不會直接使用基類,而是基于pygame.sprite.Sprite來創建自己的子類,下邊創建一個類,并命名為MyDogClass。代碼如下:

class MyDogClass(pygame.sprite.Sprite):def __init__(self, image_file, location):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image_file)self.rect = self.image.get_rect()self.rect.left, self.rect.top = location

接下來創建它的一些實例:

img_file = "timg.png" dogs = [] for row in range(0,3):for column in range(0,3):location = [column * 180 + 10,row * 180 + 10]dog = MyDogClass(img_file,location)dogs.append(dog)

我們還需要把小狗移到顯示表面:

for dog in dogs:screen.blit(dog.image, dog.rect) pygame.display.flip()

把所有代碼放在一起如下:

import sys,pygameclass MyDogClass(pygame.sprite.Sprite):def __init__(self, image_file, location):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image_file)self.rect = self.image.get_rect()self.rect.left, self.rect.top = locationsize = width,height = 640,480 screen = pygame.display.set_mode(size) screen.fill([255,255,255]) img_file = "timg.png" dogs = [] for row in range(0,3):for column in range(0,3):location = [column * 180 + 10,row * 180 + 10]dog = MyDogClass(img_file,location)dogs.append(dog) for dog in dogs:screen.blit(dog.image, dog.rect) pygame.display.flip()running = True while running:for event in pygame.event.get():if event.type == pygame.QUIT:rynning = False pygame.quit()

效果圖:

注意程序中一個小變化:

size = width,height = 640,480 screen = pygame.display.set_mode(size)

這個代碼不僅設置了窗口的大小,還定義了兩個變量width和height,后邊還會用到。

三. move( ) 方法

使用一個新的類方法move( )來移動這些小狗:

def move(self):self.rect = self.rect.move(self,speed)if self.rect.left < 0 or self.rect.right > width:self.speed[0] = - self.speed[0]if self.rect.top < 0 or self.rect.bottom > height:self.speed[1] = -self.speed[1]

動畫精靈有一個內置方法move( )。這個方法需要一個speed參數來告訴它對象要移動多遠。在2—D,speed是一個包含兩個數的列表,一個對應x-speed,另一個對應y-speed:

class MyDogClass(pygame.sprite.Sprite):def __init__(self, image_file, location,speed):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image_file)self.rect = self.image.get_rect()self.rect.left, self.rect.top = locationself.speed = speeddef move(self):self.rect = self.rect.move(self,speed)if self.rect.left < 0 or self.rect.right > width:self.speed[0] = - self.speed[0]if self.rect.top < 0 or self.rect.bottom > height:self.speed[1] = -self.speed[1]

讓小狗隨機移動就更有意思,使用random.choice( )函數來設置速度:

from random import * speed = [choice([-2,2], choice[-2,2])]

完整程序為:

import sys,pygame from random import *class MyDogClass(pygame.sprite.Sprite):def __init__(self, image_file, location,speed):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load(image_file)self.rect = self.image.get_rect()self.rect.left, self.rect.top = locationself.speed = speeddef move(self):self.rect = self.rect.move(self.speed)if self.rect.left < 0 or self.rect.right > width:self.speed[0] = - self.speed[0]if self.rect.top < 0 or self.rect.bottom > height:self.speed[1] = -self.speed[1]size = width,height = 640,480 screen = pygame.display.set_mode(size) screen.fill([255,255,255]) img_file = "timg.png" dogs = [] for row in range(0,3):for column in range(0,3):location = [column * 180 + 10,row * 180 + 10]speed = [choice([-2,2]), choice([-2,2])]dog = MyDogClass(img_file,location,speed)dogs.append(dog)running = True while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsepygame.time.delay(20)screen.fill([255,255,255])for dog in dogs:dog.move()screen.blit(dog.image, dog.rect)pygame.display.flip()pygame.quit()

如果把圖片換成立體的小球,碰到邊界時更有感覺:

小球的圖片在這里:

總結

以上是生活随笔為你收集整理的Python——动画精灵的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。