国产日韩欧美一区二区三区综合,日本黄色免费在线,国产精品麻豆欧美日韩ww,色综合狠狠操

極客小將

您現(xiàn)在的位置是:首頁(yè) » python編程資訊

資訊內(nèi)容

用python和pygame游戲編程入門(mén)-彈球[變換背景]

極客小將2020-10-28-
上一節(jié)我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的彈球動(dòng)畫(huà),本節(jié)我們將在這個(gè)程序的基礎(chǔ)上進(jìn)行改進(jìn),增加一個(gè)新的功能,就是背景隨著小球的移動(dòng)不斷變換。

上一節(jié)我們實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的彈球動(dòng)畫(huà),本節(jié)我們將在這個(gè)程序的基礎(chǔ)上進(jìn)行改進(jìn),增加一個(gè)新的功能,就是背景隨著小球的移動(dòng)不斷變換。

用python和pygame游戲編程入門(mén)-彈球[變換背景]

第一步:定義一個(gè)bgcolor對(duì)象,這是Pygame 中用于描述顏色的對(duì)象


bgcolor = pygame.Color("black")


Pygame 使用 Color 類表示 RGBA 顏色值,每個(gè)顏色值的取值范圍是 0 ~ 255。允許通過(guò)基本的算術(shù)運(yùn)算創(chuàng)造新的顏色值,支持轉(zhuǎn)換為其他顏色空間,例如 HSV 或 HSL,并讓你調(diào)整單個(gè)顏色通道。當(dāng)沒(méi)有給出 alpha 的值是,默認(rèn)是 255(不透明)。

第二步:設(shè)置bgcolor對(duì)象的RGB色彩,色彩值與當(dāng)前小球的位置相關(guān)聯(lián),實(shí)現(xiàn)小球位置變化,背景顏色也跟著改變

pygame.Color.r  —  獲取或設(shè)置 Color 對(duì)象的紅色值

pygame.Color.g  —  獲取或設(shè)置 Color 對(duì)象的綠色值

pygame.Color.b  —  獲取或設(shè)置 Color 對(duì)象的藍(lán)色值

具體代碼:

bgcolor.r = RGBchannel(ballrect.left*255/width)
bgcolor.g = RGBchannel(ballrect.left * 255 / height)
bgcolor.b = RGBchannel(min(speed[0],speed[1]) * 255 / max(speed[0],speed[1],1))

RGBchannel(a)是自定義的一個(gè)方法,負(fù)責(zé)返回一個(gè)0~255的值,當(dāng)a<0時(shí) 返回值為0,當(dāng)a>255時(shí) 返回值為255,當(dāng)0

第三步:定義RGBchannel(a)方法:

def RGBchannel(a):
    return 0 if a<0 else (255 if a>255 else int(a))

第四步: 由于圖片不斷運(yùn)動(dòng),運(yùn)動(dòng)后原位置默認(rèn)填充白色,因此需要不斷刷新,更新背景顏色,將之前的黑色背景改為bgcolor


screen.fill(bgcolor)


完整的程序代碼:

import pygame, sys  # 引入pygame sys	
pygame.init()  # 初始化  對(duì)pygame內(nèi)部各功能模塊進(jìn)行初始化創(chuàng)建及變量設(shè)置,默認(rèn)調(diào)用
size = width, height = 600, 400

speed = [1,1]
BLACK = 0, 0, 0
screen = pygame.display.set_mode(size)  
pygame.display.set_caption("彈球")  # 設(shè)置窗口標(biāo)題
ball = pygame.image.load("img/ball.png")  # pygame.image.load(filename) 將filename路徑下的圖像載入游戲,支持13種常用圖片格式
ballrect = ball.get_rect()              # surface對(duì)象 ball.get_rect() pygame使用內(nèi)部定義
fps = 300  # Frame per second 每秒幀率參數(shù)
fclock = pygame.time.Clock()  # pygame.time.Clock() 創(chuàng)建一個(gè)Clock對(duì)象,用于操作時(shí)間surface對(duì)象表示所有載入的圖像,其中.get_rect()方法返回一個(gè)覆蓋圖像的矩形(圖像的外接矩形)rect對(duì)象rect中top, bottom, left, right表示上下左右,width, height表示寬度,高度
bgcolor = pygame.Color("black")
def RGBchannel(a):
	#當(dāng)a<0時(shí) 返回值為0,當(dāng)a>255時(shí) 返回值為255,當(dāng)0255 else int(a))

while True:  # 執(zhí)行死循環(huán)
    for event in pygame.event.get():  # 從事件隊(duì)列中取出事件,并從隊(duì)列中刪除該事件
        if event.type == pygame.QUIT:  # pygame.QUIT是Pygame中定義的退出時(shí)間常量
            sys.exit()      # sys.exit()用于退出結(jié)束游戲并退出
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:
               sys.exit()   # sys.exit()用于退出結(jié)束游戲并退出

    if pygame.display.get_active() :     #當(dāng)顯示器上處于活動(dòng)狀態(tài)時(shí)返回True,進(jìn)一步半段后可以暫停游戲,改變響應(yīng)模式等
        ballrect = ballrect.move(speed[0],speed[1])  # ballrect.move(x,y) 矩形移動(dòng)一個(gè)偏移量(x,y)x,y為整數(shù)
    if ballrect.left < 0 or ballrect.right > width:
            speed[0] = -speed[0] 
    if ballrect.top < 0 or ballrect.bottom > height:
            speed[1] = -speed[1]  # 碰壁后速度取反
	
    bgcolor.r = RGBchannel(ballrect.left*255/width)
    bgcolor.g = RGBchannel(ballrect.left * 255 / height)
    bgcolor.b = RGBchannel(min(speed[0],speed[1]) * 255 / max(speed[0],speed[1],1))
	#顯示窗口背景填充為color顏色采用RGB色彩體系 由于圖片不斷運(yùn)動(dòng),運(yùn)動(dòng)后原位置默認(rèn)填充白色,因此需要不斷刷新
    screen.fill(bgcolor)

    screen.blit(ball, ballrect)     # screnen,blit(src,dest)將圖像繪制在另一個(gè)圖像上,即將src繪制到dest位置上,通過(guò)rect對(duì)象引導(dǎo)對(duì)壁球的繪制
    pygame.display.update()      # 對(duì)顯示窗口進(jìn)行刷新,默認(rèn)窗口全部重繪
    fclock.tick(fps)    # clock.tick(framerate) 控制幀速度,即窗口刷新速度。

本站部分內(nèi)容轉(zhuǎn)載自網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系管理員及時(shí)刪除。

預(yù)約試聽(tīng)課

已有385人預(yù)約都是免費(fèi)的,你也試試吧...

主站蜘蛛池模板: 平定县| 黑河市| 陆良县| 石首市| 礼泉县| 绥芬河市| 玉龙| 浮山县| 新晃| 上虞市| 南宁市| 丰镇市| 甘孜县| 南召县| 陵水| 通渭县| 邯郸市| 阜南县| 双峰县| 安宁市| 聂荣县| 丹巴县| 喀什市| 阿尔山市| 卢湾区| 博野县| 色达县| 新昌县| 宽城| 顺义区| 平乡县| 方城县| 肥乡县| 虞城县| 天柱县| 普兰县| 三台县| 仙桃市| 沈阳市| 太谷县| 江门市|