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

歡迎訪問 生活随笔!

生活随笔

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

python

Make Games with Python Pygame (2)

發布時間:2025/3/21 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Make Games with Python Pygame (2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

接著上次的繼續。

?

簡單的畫圖函數

Pygame給我們提供了幾個簡單的畫圖函數,比如畫矩形,圓,橢圓,線,獨立的像素點。

下面這個程序就實現了一些簡單畫圖的操作

import pygame, sys from pygame.locals import *pygame.init()DISPLAYSURF = pygame.display.set_mode((500,400),0,32)BLACK = (0, 0 , 0) WHITE = (255, 255, 255) RED = (255, 0, 0) GREEN = (0, 255, 0) BLUE = (0, 0, 255)DISPLAYSURF.fill(WHITE) pygame.draw.polygon(DISPLAYSURF, GREEN, ((146,0),(291,106),(236,277),(56,277),(0,106))) pygame.draw.line(DISPLAYSURF, BLUE, (60, 60), (120,60), 4) pygame.draw.line(DISPLAYSURF, BLUE, (20, 60), (60,20)) pygame.draw.line(DISPLAYSURF, BLUE, (60, 120), (120,120), 4) pygame.draw.circle(DISPLAYSURF,BLUE, (300,50), 20, 0) pygame.draw.ellipse(DISPLAYSURF,RED,(300,250,40,80),1) pygame.draw.rect(DISPLAYSURF,RED,(200,150,100,50))pixObj = pygame.PixelArray(DISPLAYSURF) pixObj[480][380] = BLACK pixObj[482][382] = BLACK pixObj[484][384] = BLACK pixObj[486][386] = BLACK pixObj[488][388] = BLACKdel pixObjwhile True:for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()pygame.display.update()
執行后的效果如圖


這里面有多一些新的Pygame的東西

fill(color)是Surface對象的一種方法,將surface對象的窗口全部填充一種顏色,就是背景色。

pygame.draw.polygon(surface, color, pointlist, width)畫個多邊形,其中surface和color參數告訴畫在哪個對象里和使用的顏色,pointlist參數是由多個點構成的元組或列表,然后就會從第一個點開始,依次連接后面的點從而構成多邊形,width參數是可選的,如果沒有,則多邊形會被color參數的顏色填充,如果有,而不會填充,多邊形輪廓寬度就由width參數決定。傳遞0給width參數跟沒有width參數是一樣的。

需要注意的是,所有pygame.draw畫圖函數都有一個選擇項參數width在最后,它們和pygame.draw,polygon函數中的width參數工作方式相同。

pygame.draw.line(surface, color, start_point, end_point, width) 畫線函數

pygame.draw.lines(surface, color, closed, pointlist, width) 畫多個相連的線,從起點到終點,與pygame.draw.polygon類似,唯一不同的是,如果closed參數為False,終點不會與起點相連接,傳遞True的話,終點會與起點想連接。

pygame.draw.circle(surface, color, center_point, radius, width) 畫圓

pygame.draw.ellipse(surface, color, bounding_rectange, width) 畫橢圓

pygame.draw.rect(surface, color, rectangle_tuple, width) 畫矩形


pygame,PixelArray對象

pygame沒有單獨的畫點函數。而方法就是創建pygame.PixelArray對象然后設置獨立的像素點。創建一個關于Surface的PixelArray對象會‘鎖住’Surface對象。一旦Surface對象被鎖住,畫圖函數仍然可以使用,但是類似PNG或JPG的圖片就不能作用在Surface對象上了,如果你想查看一個Surface對象是否鎖住了,可以調用Surface對象get_locked()方法,如果鎖住了會返回True,反之False。

設置這些獨立像素點的方法是用兩個索引值訪問,比如pixObj[480][380] = BLACK ,這樣就會將X坐標值的480和Y坐標的380這兩個點設為黑色。

為了告訴pygame你完成了畫完獨立像素點,你需要通過一個del語句刪除PixArray對象。刪除PixArray對象會‘解鎖’Surface對象,那樣你就可以繼續在上面加載圖片了。如果忘了刪除,則下次你想在Surface對象上加載圖片的話就會報錯。

pygame.display.update()函數

當你完成所有畫圖函數后,你必須調用pygame.display.update()函數讓起顯示在顯示器上。

需要記住的一點是pygame.display.update()函數只會讓顯示對象(即通過調用pygame.display.set_mode()返回的對象)顯示在屏幕上。如果你想讓圖片顯示在屏幕上,你必須“blit”它們(復制它們的意思)到顯示對象上通過blit()方法。

Animation

讓圖像動起來其實很簡單,就是將圖像從一個地方移動到另一個地方,就是清除掉圖像原來所在地方的圖像,然后在另一個地方加載這個圖像,這樣看上去圖像就像動起來了一樣。在計算機看來,其實就是一群像素的移動。下圖就是一個例子


下面是一段示例代碼

import pygame, sys from pygame.locals import *pygame.init()FPS = 30 # frames per second setting fpsClock = pygame.time.Clock()# set up the window DISPLAYSURF = pygame.display.set_mode((400, 300), 0, 32) pygame.display.set_caption('Animation')WHITE = (255, 255, 255) catImg = pygame.image.load('cat.png') catx = 10 caty = 10 direction = 'right'while True: # the main game loopDISPLAYSURF.fill(WHITE)if direction == 'right':catx += 5if catx == 280:direction = 'down'elif direction == 'down':caty += 5if caty == 220:direction = 'left'elif direction == 'left':catx -= 5if catx == 10:direction = 'up'elif direction == 'up':caty -= 5if caty == 10:direction = 'right'DISPLAYSURF.blit(catImg, (catx, caty))for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()pygame.display.update()fpsClock.tick(FPS)
其中cat.png的下載地址PDF上面已經給出了。下載后必須與源文件放在一個文件夾里面。執行效果就是一只貓兒在一個窗口里面移動。先右,再下,再左,再上,如此循環。

上面這段代碼里面又出現了一些新的東西。

幀率和pygame.time.Clock對象

幀率與刷新率指的是程序一秒鐘能顯示圖片的數目,用FPS和幀每秒來表示。(在其它電腦顯示器上,FPS有個大眾名字叫做赫茲,許多顯示器都有60赫茲的幀速率,或者叫做每秒60幀)低的幀率出現在一些圖像游戲里就會導致游戲看起來是跳躍和抖動的,如果程序有太多的代碼而經常刷新屏幕的話,就會導致FPS下降。但是在這本書里面的游戲因為足夠簡單所以即使在一些老的電腦上也不會出現問題。

pygame.time.Clock對象能夠幫助我們確認程序能跑到的一個最大的確定的FPS值。Clock對象將在游戲主循環中插入小小的暫停以確保我們的游戲程序不會跑的太快。如果我們沒有這些暫停的話,我們的游戲就會跑得跟電腦一樣快。對玩游戲的人來說它確實太快了。在游戲循環中調用Clock對象的tick()方法能保證我們的游戲跑到一個確定的速度不管電腦跑得有多么快。創建Clock對象如下語句

fpsClock = pygame.time.Clock()

tick方法應該在游戲循環的最末尾調用,也就是在pygame.display.update之后,調用語句如下

fpsClock.tick(FPS)

轉載于:https://my.oschina.net/u/1587304/blog/399948

總結

以上是生活随笔為你收集整理的Make Games with Python Pygame (2)的全部內容,希望文章能夠幫你解決所遇到的問題。

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