pyagme 圖像/圖形繪製

来源:https://www.cnblogs.com/liquancai/archive/2020/07/03/13232469.html
-Advertisement-
Play Games

pygame 圖像 / 圖形繪製 1. pygame 的圖像繪製 pygame 支持多種存儲圖像的方式(也就是圖片格式),例如 JPEG、PNG 等,具體支持 JPEG (一般擴展名為 .jpg 或者 .jpeg ,數位相機、網上的圖片基本上都是這種格式,這是一種有損壓縮方式,儘管對圖片的質量有所損 ...


pygame 圖像 / 圖形繪製

1. pygame 的圖像繪製

pygame 支持多種存儲圖像的方式(也就是圖片格式),例如 JPEG、PNG 等,具體支持 JPEG (一般擴展名為 .jpg 或者 .jpeg ,數位相機、網上的圖片基本上都是這種格式,這是一種有損壓縮方式,儘管對圖片的質量有所損壞,但對於減小文件尺寸很有幫助,其優點很多,只是不支持透明)、PNG(支持透明,無損壓縮)、GIF(網上使用得很多,支持透明和動畫,但只能有 256 種顏色,在軟體和游戲中的使用很少)以及 BMP、PCX、TGA、TIF 等格式。

pygame 使用 surface 對象來載入繪製的圖像。對於 pygame ,載入圖片使用 pygame.image.load(), 給它一個文件名然後返回一個 surface 對象。儘管載入的圖像格式不同,但 surface 對象隱藏了這些不同。用戶可以對一個 surface 對象進行塗畫、變形、複製等各種操作。事實上游戲屏幕也只是一個 surface, pygame.display.set_mode() 返回了一個 surface 對象。

對於任何一個 surface 對象,可以用 get_width() 、get_height() 和 get_size() 函數來獲取它的尺寸,get_rect() 用來獲取它的區域形狀。

例:使用 pygame 開發一個顯示坦克自由移動的游戲視窗

import pygame


def tank():
    
    pygame.init()
    tank_image = pygame.image.load("tank.png")
    tank_rect = tank_image.get_rect()
    screen = pygame.display.set_mode((400, 600))
    pygame.dispaly.set_caption("自由移動的tank")
    screen_rect = screen.get_rect()
    color_back = (255, 255, 255)
    tank_speed = [1, 1]
    fps_clock = pygame.time.Clock()
    
    while True:
        fps_clock.tick(60)
        for event in pygame.event.get():
            if evnet.type == pygame.QUIT:
                pygame.quit()
                exit()
		tank_rect = tank_rect.move(tank_speed)
        if tank_rect.left < 0 or tank_rect.right > screen_rect.right:
            tank_speed[0] = -tank_speed[0]
        if tank_rect.top < 0 or tank_rect.bottom > screen_rect.bottom:
            tank_speed[1] = tank_speed[1]
        screen.fill(color_back)
        screen.blit(tank_image, tank_rect)
        pygame.display.update()
      

if __name__ == '__main__':
    tank()

程式運行後,可以看到白色背景的游戲視窗,標題是“自由移動的 tank ”,如下圖所示:

image-20200703192037735

在該游戲中通過修改塔克圖像( surface 對象)區域的 left 屬性(可以認為是 x 座標)、 surface 對象的 top 屬性(可以認為是 y 屬性)改變坦克位置,從而顯示出坦克自由移動的效果。在視窗(視窗也是 surface 對象)使用的 blit() 函數上繪製坦克圖像,最後註意需要更新視窗顯示內容。

設置 fps_clock 變數的值即可控制創建刷新速度,語法如下:

fps_clock = pygame.time.Clock()

在無限迴圈中寫入 fps_clock.tick(60) ,可以按指定幀頻 60 更新游戲畫面(即每秒刷新 60 次屏幕)。


2.pygame 的圖形繪製

在屏幕上繪製各種圖形時使用 pygame.draw 模塊中的一些函數,事實上,pygame 可以不載入任何圖片,而使用圖形來製作一個游戲。

pygame.draw 中的函數的第 1 個參數總是一個 sueface , 然後是顏色,接著是一系列的座標等。對於電腦中的座標,(0,0)代表左上角,水平向右為 X 軸的正方向,垂直向下為 Y 軸的正方向。該函數的返回值是一個 rect 對象,包含了繪製的區域,這樣就可以很方便的更新那一部分了。pygame.draw 中的函數如下表所示:

函數 作用 函數 作用
rect() 繪製矩形 line() 繪製線
polygon() 繪製多邊形(3個及3個以上的邊) lines() 繪製一系列的線
circle() 繪製圓 aaline() 繪製一根平滑的線
ellipse() 繪製橢圓 aalines() 繪製一系列平滑的線
arc() 繪製圓弧

下麵詳細說明 pygame.draw 中各個函數的使用。

  1. pygame.draw.rect()

    格式:pygame.draw.rect(surface, color, rect, width=0)

    pygame.draw.rect() 在 surface 上畫一個矩形,除了 surface 和 color 以外,rect 接收一個矩形的座標和線寬參數,如果線寬是 0 或省略,則填充。

  2. pygame.draw.polygon()

    格式:pygame.draw.polygon(surface, color, pointlist, width=0)

    polygon() 用於畫多邊形,其用法類似於 rect(), 與 rect() 第1、第2、第 4 個參數都是相同的,只不過 polygon()會接收一系列座標的列表,代表了各個頂點的座標。

  3. pygame.draw.circle()

    格式:pygame.draw.circle(surface, color, pos, radius, width=0)

    circle() 用於畫一個圓,它接收一個圓心座標和一個半徑參數。

  4. pygame.draw.ellipse()

    格式:pygame.draw.ellipse(surface, color, rect, width=0)

    用戶可以把 ellipse 想象成一個被壓扁的圓,事實上,它可以被一個矩形裝起來。ellipse() 的第 3 個參數就是這個橢圓的外接矩形。

  5. pygame.draw.arc()

    格式:pygame.draw.arc(surface, color, rect, start_angle, stop_angle, width=1)

    arc() 是橢圓的一部分,所以它的參數比橢圓多一些。但它不是封閉的,因此沒有 fill() 方法,start_angle 和 stop_angle 為開始和結束的角度。

  6. pygame.draw.line()

    格式:pygame.draw.line(surface, color, start_pos, end_pos, width=1)

    line() 用於畫一條線段,start_pos 和 end_pos 是線段的起點和結點座標。

  7. pygame.draw.lines()

    格式:pygame.draw.lines(surface, color, closed, pointlist, width=1)

    closed 是一個布爾變數,指明是否需要多畫一條線來使這些線條閉合(這樣就和 polygon() 一樣了),pointlist 是一個頂點座標的數組。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java生鮮電商平臺-微服務電商優惠券的架構設計(小程式/APP) 說明:Java生鮮電商平臺的優惠券屬於電子優惠券,不過我們要先看看線下紙質優惠券: 商家決定做促銷,印製了10000張50元代金券; 其中1000張代金券分別發給1000個用戶; 到某一個時刻,這1000個用戶有300個適用了代金券 ...
  • 一、Java基礎知識 二、軟體 1. 軟體是什麼? 軟體=數據+指令[命令]+文檔 2. 軟體開髮指什麼? 軟體開發是根據用戶的需求創建出相應的軟體系統. 軟體開發是一個過程,包含需求的提取,需求分析,軟體的編寫,軟體測試. 三、人與電腦做交互 圖形化界面 vs 命令行方式 dir md rd c ...
  • 前言 剛回到家,又被公司群里的消息轟炸了。讓統計每個人最近是否去過石景山萬達廣場。 這基本上已經是每日必備了,只要有任何風吹草動,就需要我們填各種信息。 我們都知道,北京最近的疫情很不樂觀,從每天的數據就能看出來了。 也許很多小伙伴不在北京,是切實感受不到的。 就拿我自己舉例吧,在去公司的每一天,我 ...
  • 這篇博客還是整理從https://github.com/LyricTian/gin-admin 這個項目中學習的golang相關知識 作者在項目中使用了https://github.com/google/wire 做依賴註入,這個庫我之前沒有使用過,看了作者代碼中的使用,至少剛開始是看著優點懵,不知 ...
  • 轉載:https://blog.csdn.net/walkerJong/article/details/7946109 ...
  • # Definition for a binary tree node.class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Nonea = TreeNode(1)b = TreeNode( ...
  • 編寫程式,讀取在1到100 之間的整數,然後計算每個數出現的次數。假定輸入是以0 結束的。 下麵是這個程式的一個運行示例: Write a program that reads the integers between 1and 100 and counts the occurrences of e ...
  • 安裝pandas 通過python pip安裝pandas pip install pandas pandas數據結構 pandas常用數據結構包括:Series和DataFrame Series Series是一種一維的數組型對象,包含一個值序列(與numpy中的數據類型相似),數據標簽(稱為索引 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...