最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python Pygame的具體使用講解

 更新時間:2017年11月03日 10:46:07   作者:MCFON  
本篇文章主要介紹了python Pygame的具體使用講解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、實驗介紹

1.1 實驗內(nèi)容

在本節(jié)課中,我們將講解Pygame的常用對象及其操作,包括圖形、動畫、文字、音頻等,確保同學(xué)們對Pygame有一個基礎(chǔ)的了解,同時為后續(xù)課程做好準(zhǔn)備。

1.2 實驗知識點

  1. Pygame圖形
  2. Pygame動畫
  3. Pygame文字
  4. Pygame音頻
  5. Pygame事件

1.3 實驗環(huán)境

  1. Python 2.7.6
  2. Xfce終端

1.4 適合人群

本課程難度為一般,屬于初級級別課程,適合具有Python基礎(chǔ)的用戶,熟悉Python基礎(chǔ)知識加深鞏固。

1.5 代碼獲取

本節(jié)實驗所用到的代碼和相關(guān)資源文件可以通過下面命令下載到實驗樓環(huán)境中,作為參照對比進行學(xué)習(xí)。

$ wget http://labfile.oss.aliyuncs.com/courses/940/foundation.zip

解壓縮至 /home/shiyanlou/foundation :

$ unzip foundation.zip

二、開發(fā)準(zhǔn)備

本次課程主要利用Pygame模塊來進行開發(fā),首先我們需要打開Xfce終端,并使用 pip 命令來安裝Pygame

$ sudo pip install pygame

安裝完成之后進入Python的交互界面,輸入以下命令查看是否成功安裝。

import pygame

若無異常,則說明安裝成功。

三、實驗步驟

3.1 HelloWorld

首先開始我們第一個HelloWorld程序:

# -*- coding: UTF-8 -*-
# helloworld.py

# 導(dǎo)入所需的模塊
import pygame, sys
# 導(dǎo)入所有pygame.locals里的變量(比如下面大寫的QUIT變量)
from pygame.locals import *


# 初始化pygame
pygame.init()

# 設(shè)置窗口的大小,單位為像素
screen = pygame.display.set_mode((500, 400))

# 設(shè)置窗口標(biāo)題
pygame.display.set_caption('Hello World')

# 程序主循環(huán)
while True:

  # 獲取事件
  for event in pygame.event.get():
    # 判斷事件是否為退出事件
    if event.type == QUIT:
      # 退出pygame
      pygame.quit()
      # 退出系統(tǒng)
      sys.exit()

  # 繪制屏幕內(nèi)容
  pygame.display.update()

效果圖如下:

 

這里解釋一下上面程序的運行方式

一個游戲循環(huán)(也可以稱為主循環(huán))就做下面這三件事:

  1. 處理事件
  2. 更新游戲狀態(tài)
  3. 繪制游戲狀態(tài)到屏幕上

 

3.2 繪制圖形

Pygame的坐標(biāo)原點(0,0)點位于左上角,X軸自左向右,Y軸自上向下,單位為像素。

這里介紹一下常用的方法:

pygame.draw.line(Surface, color, start_pos, end_pos, width)此方法用于繪制一條線段

pygame.draw.aaline(Surface, color, start_pos, end_pos, blend)此方法用于繪制一條抗鋸齒的線

pygame.draw.lines(Surface, color, closed, pointlist, width)此方法用于繪制一條折線

pygame.draw.rect(Surface, color, Rect)此方法用于繪制一個矩形

pygame.draw.rect(Surface, color, Rect, width)此方法用于繪制一個矩形框

pygame.draw.ellipse(Surface, color, Rect)此方法用于繪制一個橢圓

pygame.draw.ellipse(Surface, color, Rect, width)此方法用于繪制一個橢圓框

pygame.draw.polygon(Surface, color, pointlist, width)此方法用于繪制一個多邊形

pygame.draw.arc(Surface, color, Rect, start_angle, stop_angle, width)此方法用于繪制一條弧線

pygame.draw.circle(Surface, color, Rect, radius)此方法用于繪制一個圓

以下為示例代碼:

# -*- coding: UTF-8 -*-
# drawing.py

# 導(dǎo)入需要的模塊
import pygame, sys
from pygame.locals import *
from math import pi


# 初始化pygame
pygame.init()

# 設(shè)置窗口的大小,單位為像素
screen = pygame.display.set_mode((400,300))

# 設(shè)置窗口標(biāo)題
pygame.display.set_caption('Drawing')

# 定義顏色
BLACK = ( 0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = ( 0, 255, 0)
BLUE = ( 0, 0, 255)

# 設(shè)置背景顏色
screen.fill(WHITE)

# 繪制一條線
pygame.draw.line(screen, GREEN, [0, 0], [50,30], 5)

# 繪制一條抗鋸齒的線
pygame.draw.aaline(screen, GREEN, [0, 50],[50, 80],True)

# 繪制一條折線
pygame.draw.lines(screen, BLACK, False, 
         [[0, 80], [50, 90], [200, 80], [220, 30]], 5)

# 繪制一個空心矩形
pygame.draw.rect(screen, BLACK, [75, 10, 50, 20], 2)

# 繪制一個矩形
pygame.draw.rect(screen, BLACK, [150, 10, 50, 20])

# 繪制一個空心橢圓
pygame.draw.ellipse(screen, RED, [225, 10, 50, 20], 2)

# 繪制一個橢圓
pygame.draw.ellipse(screen, RED, [300, 10, 50, 20])

# 繪制多邊形
pygame.draw.polygon(screen, BLACK, [[100, 100], [0, 200], [200, 200]], 5)

# 繪制多條弧線
pygame.draw.arc(screen, BLACK,[210, 75, 150, 125], 0, pi/2, 2)
pygame.draw.arc(screen, GREEN,[210, 75, 150, 125], pi/2, pi, 2)
pygame.draw.arc(screen, BLUE, [210, 75, 150, 125], pi,3*pi/2, 2)
pygame.draw.arc(screen, RED, [210, 75, 150, 125], 3*pi/2, 2*pi, 2)

# 繪制一個圓
pygame.draw.circle(screen, BLUE, [60, 250], 40)

# 程序主循環(huán)
while True:

  # 獲取事件
  for event in pygame.event.get():
    # 判斷事件是否為退出事件
    if event.type == QUIT:
      # 退出pygame
      pygame.quit()
      # 退出系統(tǒng)
      sys.exit()

  # 繪制屏幕內(nèi)容
  pygame.display.update()

效果圖如下:

 

3.3 實現(xiàn)動畫

由于人類眼睛的特殊生理結(jié)構(gòu),當(dāng)所看畫面的幀率高于24的時候,就會認(rèn)為是連貫的,此現(xiàn)象稱之為 視覺暫留 。

幀率(Frame rate)是用于測量顯示幀數(shù)的量度,所謂的測量單位為每秒顯示幀數(shù)(Frames per Second,簡稱:FPS)

一般來說30fps是可以接受的,但是將性能提升至60fps則可以明顯提升交互感和逼真感,但是一般來說超過75fps一般就不容易察覺到有明顯的流暢度提升了。

在我們原有坐標(biāo)系的基礎(chǔ)上添加偏移量,再重新繪制,依次一張一張的循環(huán)繪制下去,就會得到我們想要的物體移動的效果。

Pygame實現(xiàn)動畫主要用到的方法:

pygame.image.load(filename)加載一張圖片

pygame.Surface.blit(source, dest, area=None, special_flags = 0)將圖片繪制到屏幕相應(yīng)坐標(biāo)上(后面兩個參數(shù)默認(rèn),可以不傳)

pygame.time.Clock()獲得pygame的時鐘

pygame.time.Clock.tick(FPS)設(shè)置pygame時鐘的間隔時間

以下為示例代碼:

# -*- coding: UTF-8 -*-
# animation.py

# 導(dǎo)入需要的模塊
import pygame, sys
from pygame.locals import *

# 初始化pygame
pygame.init()

# 設(shè)置幀率(屏幕每秒刷新的次數(shù))
FPS = 30

# 獲得pygame的時鐘
fpsClock = pygame.time.Clock()

# 設(shè)置窗口大小
screen = pygame.display.set_mode((500, 400), 0, 32)

# 設(shè)置標(biāo)題
pygame.display.set_caption('Animation')

# 定義顏色
WHITE = (255, 255, 255)

# 加載一張圖片(所用到的的圖片請參考1.5代碼獲取)
img = pygame.image.load('resources/shiyanlou.PNG')

# 初始化圖片的位置
imgx = 10
imgy = 10

# 初始化圖片的移動方向
direction = 'right'

# 程序主循環(huán)
while True:

  # 每次都要重新繪制背景白色
  screen.fill(WHITE)

  # 判斷移動的方向,并對相應(yīng)的坐標(biāo)做加減
  if direction == 'right':
    imgx += 5
    if imgx == 380:
      direction = 'down'
  elif direction == 'down':
    imgy += 5
    if imgy == 300:
      direction = 'left'
  elif direction == 'left':
    imgx -= 5
    if imgx == 10:
      direction = 'up'
  elif direction == 'up':
    imgy -= 5
    if imgy == 10:
      direction = 'right'

  # 該方法將用于圖片繪制到相應(yīng)的坐標(biāo)中
  screen.blit(img, (imgx, imgy))

  for event in pygame.event.get():
    if event.type == QUIT:
      pygame.quit()
      sys.exit()

  # 刷新屏幕
  pygame.display.update()

  # 設(shè)置pygame時鐘的間隔時間
  fpsClock.tick(FPS)

效果圖如下:

 

3.4 繪制文字

如果你想繪制文字到屏幕上,Pygame提供了很方便的方法使用.ttf字體文件,這樣我們就能很輕易的將文字繪制在屏幕上了。

這里我使用了ARBERKLEY.ttf作為字體,字體文件的獲取請參考1.5代碼獲取。

主要用到的方法:

pygame.font.Font(filename, size)

filename:字體文件的文件名;

size:字體的高h(yuǎn)eight,單位為像素;

pygame.font.Font.render(text, antialias, color, background=None)

text:要顯示的文字;

antialias: 是否抗鋸齒;

color:字體顏色;

background:背景顏色(可選參數(shù));

.get_rect()

獲得一個對象的rect,以便于設(shè)置其坐標(biāo)位置

以下為示例代碼:

# -*- coding: UTF-8 -*-
# font.py

# 導(dǎo)入需要的模塊
import pygame, sys
from pygame.locals import *

# 初始化pygame
pygame.init()

# 設(shè)置窗口的大小,單位為像素
screen = pygame.display.set_mode((500,400))

# 設(shè)置窗口的標(biāo)題
pygame.display.set_caption('Font')

# 定義顏色
WHITE = (255, 255, 255)
GREEN = ( 0, 255, 0)
BLUE = ( 0, 0, 128)

# 通過字體文件獲得字體對象
fontObj = pygame.font.Font('resources/ARBERKLEY.ttf', 50)

# 配置要顯示的文字
textSurfaceObj = fontObj.render('Pygame', True, BLUE, GREEN)

# 獲得要顯示的對象的rect
textRectObj = textSurfaceObj.get_rect()

# 設(shè)置顯示對象的坐標(biāo)
textRectObj.center = (250, 200)

# 設(shè)置背景
screen.fill(WHITE)

# 繪制字體
screen.blit(textSurfaceObj, textRectObj)

# 程序主循環(huán)
while True:

  # 獲取事件
  for event in pygame.event.get():
    # 判斷事件是否為退出事件
    if event.type == QUIT:
      # 退出pygame
      pygame.quit()
      # 退出系統(tǒng)
      sys.exit()

  # 繪制屏幕內(nèi)容
  pygame.display.update()

效果圖如下:

 

3.5 播放音頻

在Pygame里播放音頻有兩個方法,一個用來播放特效聲音,一個用來播放背景音樂:

pygame.mixer.Sound(filename)

該方法返回一個Sound對象,調(diào)用它的.play( )方法,即可播放較短的音頻文件(比如玩家受到傷害、收集到金幣等);

pygame.mixer.music.load(filename)

該方法用來加載背景音樂,之后調(diào)用pygame.mixer.music.play( )方法就可以播放背景音樂(Pygame只允許加載一個背景音樂在同一個時刻)

以下為示例代碼:

# -*- coding: UTF-8 -*-
# audio.py

# 導(dǎo)入需要的模塊
import pygame, sys
from pygame.locals import *

# 初始化pygame
pygame.init()

# 設(shè)置窗口的大小,單位為像素
screen = pygame.display.set_mode((500,400))

# 設(shè)置窗口的標(biāo)題
pygame.display.set_caption('Audio')

# 定義顏色
WHITE = (255, 255, 255)

# 設(shè)置背景
screen.fill(WHITE)

# 加載并播放一個特效音頻文件(所用到的音頻文件請參考1.5代碼獲?。?
sound = pygame.mixer.Sound('resources/bounce.ogg')
sound.play()

# 加載背景音樂文件
pygame.mixer.music.load('resources/bgmusic.mp3')

# 播放背景音樂,第一個參數(shù)為播放的次數(shù)(-1表示無限循環(huán)),第二個參數(shù)是設(shè)置播放的起點(單位為秒)
pygame.mixer.music.play(-1, 0.0)

# 程序主循環(huán)
while True:

  # 獲取事件
  for event in pygame.event.get():
    # 判斷事件是否為退出事件
    if event.type == QUIT:
      # 停止播放背景音樂
      pygame.mixer.music.stop()
      # 退出pygame
      pygame.quit()
      # 退出系統(tǒng)
      sys.exit()

  # 繪制屏幕內(nèi)容
  pygame.display.update()

注意:因?qū)嶒灅抢飼簳r不能播放音頻,上述代碼在實驗樓環(huán)境中可能無法正常運行,同學(xué)們可以在自己的電腦上嘗試運行。

3.6 事件

Pygame里常用的事件如下表:

事件 產(chǎn)生途徑 參數(shù)
QUIT 用戶按下關(guān)閉按鈕 none
ACTIVEEVENT Pygame被激活或者隱藏 gain, state
KEYDOWN 鍵盤被按下 unicode, key, mod
KEYUP 鍵盤被放開 key, mod
MOUSEMOTION 鼠標(biāo)移動 pos, rel, buttons
MOUSEBUTTONDOWN 鼠標(biāo)按下 pos, button
MOUSEBUTTONUP 鼠標(biāo)放開 pos, button
VIDEORESIZE Pygame窗口縮放 size, w, h

以下為示例代碼:

# -*- coding: UTF-8 -*-
# event.py

# 導(dǎo)入需要的模塊
import pygame, sys
from pygame.locals import *

# 定義顏色
WHITE = (255, 255, 255)

# 初始化pygame
pygame.init()

# 設(shè)置窗口的大小,單位為像素
screen = pygame.display.set_mode((500,400), 0, 32)

# 設(shè)置窗口的標(biāo)題
pygame.display.set_caption('Event')

# 設(shè)置背景
screen.fill(WHITE)

# 程序主循環(huán)
while True:

  # 獲取事件
  for event in pygame.event.get():
    # 判斷事件是否為退出事件
    if event.type == QUIT:
      # 退出pygame
      pygame.quit()
      # 退出系統(tǒng)
      sys.exit()

    # 獲得鼠標(biāo)當(dāng)前的位置  
    if event.type ==MOUSEMOTION:
      print(event.pos)

    # 獲得鼠標(biāo)按下的位置
    if event.type ==MOUSEBUTTONDOWN:
      print("鼠標(biāo)按下:",event.pos)

    # 獲得鼠標(biāo)抬起的位置
    if event.type ==MOUSEBUTTONUP:
      print("鼠標(biāo)抬起:",event.pos) 

    # 獲得鍵盤按下的事件  
    if event.type == KEYDOWN:
      if(event.key==K_UP or event.key==K_w):
        print("上")
      if(event.key==K_DOWN or event.key==K_s):
        print("下")
      if(event.key==K_LEFT or event.key==K_a):
        print("左")
      if(event.key==K_RIGHT or event.key==K_d):
        print("右")
      # 按下鍵盤的Esc鍵退出
      if(event.key==K_ESCAPE):
        # 退出pygame
        pygame.quit()
        # 退出系統(tǒng)
        sys.exit()

  # 繪制屏幕內(nèi)容
  pygame.display.update()

效果圖如下:

 

四、實驗總結(jié)

本節(jié)課程我們主要講解了Pygame的一些常用對象及操作,這些都是我們后續(xù)課程需要用到的知識點,希望同學(xué)們能熟練掌握這些內(nèi)容。若想要深入了解,可參考下方Pygame官方文檔的鏈接。

五、參考鏈接

Pygame官方文檔

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python安裝及變量名介紹詳解

    python安裝及變量名介紹詳解

    這篇文章主要介紹了python安裝及變量名介紹詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Python最小二乘法矩陣

    Python最小二乘法矩陣

    今天小編就為大家分享一篇關(guān)于Python最小二乘法矩陣,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 一文帶你了解Python閉包的基本用法

    一文帶你了解Python閉包的基本用法

    Python 是一種高級編程語言,擁有強大的功能和工具庫。Python 的閉包是一個強大的編程概念,可以幫助程序員編寫更加模塊化、可重用的代碼。本文將深入介紹 Python 的閉包,從概念、定義、實現(xiàn)、應(yīng)用等多個角度詳細(xì)闡述
    2023-03-03
  • Python從PDF中提取文本的方法效率總結(jié)

    Python從PDF中提取文本的方法效率總結(jié)

    日常工作中我們經(jīng)常會用到pdf格式的文件,大多數(shù)情況下是瀏覽或者編輯pdf信息,但有時候需要提取pdf中的文本,這篇文章主要給大家總結(jié)介紹了關(guān)于Python從PDF中提取文本的方法效率,需要的朋友可以參考下
    2023-09-09
  • python批量同步web服務(wù)器代碼核心程序

    python批量同步web服務(wù)器代碼核心程序

    這篇文章主要介紹了python批量同步web服務(wù)器代碼核心程序,需要的朋友可以參考下
    2014-09-09
  • 腳本測試postman快速導(dǎo)出python接口測試過程示例

    腳本測試postman快速導(dǎo)出python接口測試過程示例

    這篇文章主要介紹了關(guān)于腳本測試postman快速導(dǎo)出python接口測試示例的過程操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • Python實現(xiàn)語音識別Whisper的使用示例

    Python實現(xiàn)語音識別Whisper的使用示例

    Whisper是由OpenAI基于Python開發(fā)的能夠識別多國語言的語音識別模型,本文主要介紹了Python實現(xiàn)語音識別Whisper的使用示例,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • Python單元測試框架unittest使用方法講解

    Python單元測試框架unittest使用方法講解

    這篇文章主要介紹了Python單元測試框架unittest使用方法講解,本文講解了unittest概述、命令行接口、測試案例自動搜索、創(chuàng)建測試代碼、構(gòu)建測試套件方法等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Python實現(xiàn)批量修改文件名實例

    Python實現(xiàn)批量修改文件名實例

    這篇文章主要介紹了Python實現(xiàn)批量修改文件名的方法,實例分析了兩種實現(xiàn)批量修改文件名的技巧,涉及os.rename重命名方法、正則替換及字符串操作的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • Python3 XML 獲取雅虎天氣的實現(xiàn)方法

    Python3 XML 獲取雅虎天氣的實現(xiàn)方法

    下面小編就為大家分享一篇Python3 XML 獲取雅虎天氣的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02

最新評論

内丘县| 宿州市| 新余市| 田东县| 自贡市| 哈尔滨市| 神池县| 巴马| 通城县| 怀宁县| 正蓝旗| 冕宁县| 南开区| 禹州市| 蓝田县| 临颍县| 山丹县| 阜新市| 株洲县| 曲水县| 黄山市| 宾川县| 左权县| 盱眙县| 蓬安县| 探索| 肇州县| 焦作市| 西乡县| 内乡县| 娄底市| 华亭县| 报价| 锡林郭勒盟| 永丰县| 胶州市| 洛宁县| 保康县| 纳雍县| 来宾市| 琼海市|