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

Pygame游戲開(kāi)發(fā)之太空射擊實(shí)戰(zhàn)入門篇

 更新時(shí)間:2022年08月04日 10:47:35   作者:acktomas  
相信大多數(shù)8090后都玩過(guò)太空射擊游戲,在過(guò)去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來(lái)自己動(dòng)手實(shí)現(xiàn)它,在編寫學(xué)習(xí)中回顧過(guò)往展望未來(lái),下面開(kāi)始入門篇

視頻

觀看視頻

入門

pygame

這是我們教程系列“使用 Pygame 進(jìn)行游戲開(kāi)發(fā)”的第 1 部分。它適用于對(duì)游戲開(kāi)發(fā)和提高Python編碼技能感興趣的初學(xué)者/中級(jí)程序員。

什么是Pygame

Pygame是一個(gè)“游戲庫(kù)” - 一套幫助程序員制作游戲的工具。其中一些內(nèi)容是:

  • 圖形和動(dòng)畫
  • 聲音(包括音樂(lè))
  • 控制(鍵盤、鼠標(biāo)、游戲手柄等)

游戲循環(huán)

每個(gè)游戲的核心都是一個(gè)循環(huán),我們稱之為“游戲循環(huán)”。這個(gè)循環(huán)不斷運(yùn)行,一遍又一遍,做所有使游戲工作需要做的事情。每次游戲經(jīng)歷此循環(huán)時(shí),稱為幀。

每個(gè)幀,可能會(huì)發(fā)生許多不同的事情,但它們可以組織成三個(gè)不同的類別:

1. 處理輸入(或事件)

游戲需要響應(yīng)的任何內(nèi)容。這些可能是鍵盤按鍵,鼠標(biāo)移動(dòng)等。

2. 更新游戲

更改框架上需要更改的任何內(nèi)容。如果一個(gè)角色在空中,重力需要把它拉下來(lái)。如果兩個(gè)物體相互碰撞,它們需要爆炸。

3. 渲染(或繪制)

在此步驟中,我們將在屏幕上繪制所有內(nèi)容。背景、角色、菜單或玩家需要查看的任何其他內(nèi)容都必須在屏幕上的正確位置繪制。

時(shí)鐘

循環(huán)的另一個(gè)重要方面是控制整個(gè)循環(huán)的運(yùn)行速度。您可能聽(tīng)說(shuō)過(guò)術(shù)語(yǔ)FPS,它代表每秒幀數(shù)。這意味著此循環(huán)每秒應(yīng)發(fā)生多少次。這很重要,因?yàn)槟幌M螒蜻\(yùn)行得太快或太慢。你也不希望它在不同的計(jì)算機(jī)上以不同的速度運(yùn)行 。

構(gòu)建 Pygame 模板

現(xiàn)在我們知道了使游戲正常工作需要哪些部分,我們可以開(kāi)始編寫一些代碼了。首先,我們將制作一個(gè)簡(jiǎn)單的pygame程序,除了打開(kāi)一個(gè)窗口并運(yùn)行游戲循環(huán)之外,什么都不做。對(duì)于您想要制作的任何pygame項(xiàng)目來(lái)說(shuō),這都將是一個(gè)很好的起點(diǎn)。

在程序的頂部,我們將導(dǎo)入所需的庫(kù),并為游戲選項(xiàng)設(shè)置一些變量:

# Pygame 模板 - 游戲框架
import pygame
import random
WIDTH = 360  # 游戲窗口寬度
HEIGHT = 480 # 游戲窗口高度
FPS = 30 # 每秒幀數(shù)

接下來(lái)我們需要打開(kāi)游戲窗口:

# 初始化pygame,創(chuàng)建窗口
pygame.init()
pygame.mixer.init()  # for sound
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()

pygame.init()是啟動(dòng)pygame并“初始化”。 將以screen建立游戲屏幕。最后,我們創(chuàng)建了一個(gè)能夠確保游戲以我們想要的FPS運(yùn)行的 clock

接下來(lái)是游戲循環(huán)了:

# 游戲循環(huán)
running = True
while running:
    # Process input (events)
    # Update
    # Render (draw)

這是我們的游戲循環(huán),它是一個(gè)由變量控制的循環(huán)。如果我們想讓游戲結(jié)束,只需要設(shè)置running = False就會(huì)結(jié)束循環(huán)?,F(xiàn)在我們可以用一些基本代碼填充每個(gè)部分。

渲染/繪制部分

我們將從*“繪制*”部分開(kāi)始。我們還沒(méi)有任何代碼,但我們可以用純色填充屏幕。為此,我們需要討論計(jì)算機(jī)如何處理顏色。

計(jì)算機(jī)屏幕由像素組成,這些像素有 3 個(gè)部分:紅色、綠色和藍(lán)色。每個(gè)部分被點(diǎn)亮的程度決定了該像素是什么顏色,如下所示:

三種原色中的每一種都可以具有介于 0(關(guān)閉)和 255(100% 打開(kāi))之間的值,因此三種原色中的每一種都有 256 種不同的可能性。以下是您可以制作的一些顏色的一些示例:

您可以通過(guò)乘法找到計(jì)算機(jī)可以顯示的顏色總數(shù):

>>> 256 * 256 * 256 = 16,777,216

現(xiàn)在我們已經(jīng)了解了顏色,讓我們?cè)诔绦虻捻敳慷x一些:

# Colors (R, G, B)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

然后我們可以用黑色填充屏幕。

    # 繪制、渲染
    screen.fill(BLACK)

對(duì)于計(jì)算機(jī)顯示的工作方式,這還不夠。更改屏幕上的像素意味著讓顯卡告訴監(jiān)視器更改實(shí)際像素。在計(jì)算機(jī)方面,這是一個(gè)非常非常緩慢的過(guò)程。因此,如果您在屏幕上要繪制很多東西,則可能需要很長(zhǎng)時(shí)間才能全部繪制出來(lái)。我們可以通過(guò)使用稱為雙緩沖的東西以一種聰明的方式解決這個(gè)問(wèn)題。這聽(tīng)起來(lái)很花哨,但它實(shí)際上只是意味著:

想象一下,我們有一個(gè)雙面白板,可以翻轉(zhuǎn)以顯示一面或另一面。正面將是顯示器(玩家看到的屏幕),而背面是隱藏的,只有計(jì)算機(jī)才能“看到”它。每一幀,我們所有的繪畫都在背面。然后,當(dāng)我們完成后,我們將板翻轉(zhuǎn)過(guò)來(lái)并顯示新框架。這意味著我們只做一個(gè)緩慢的過(guò)程,每幀與顯示器交談一次,而不是屏幕上的每一件事都這樣做。

所有這些都在pygame中自動(dòng)發(fā)生。你只需要告訴它當(dāng)你完成繪圖時(shí)翻轉(zhuǎn)白板。實(shí)際上,該命令甚至被命名為:flip()

    # 繪制、渲染
    screen.fill(BLACK)
    # 繪制所有的事情后翻轉(zhuǎn)顯示
    pygame.display.flip()

如果你在flip()翻轉(zhuǎn)后嘗試畫一些東西,它們不會(huì)顯示在屏幕上!

輸入/事件部分

我們還沒(méi)有游戲,所以我們不能準(zhǔn)確說(shuō)出想要監(jiān)聽(tīng)的鍵盤或鼠標(biāo)按鈕或其他控制事件。

如果您現(xiàn)在嘗試運(yùn)行該程序,您會(huì)發(fā)現(xiàn)自己遇到了問(wèn)題:無(wú)法關(guān)閉窗口!單擊角落中的“X”不起作用。那是因?yàn)檫@是一個(gè)事件,我們需要告訴我們的程序監(jiān)聽(tīng)該事件并讓它退出游戲。

事件可能隨時(shí)發(fā)生。如果玩家在更新或繪制循環(huán)部分時(shí)單擊“跳轉(zhuǎn)”按鈕,該怎么辦?不要忽略這個(gè)輸入, 玩家會(huì)感到沮喪。因此,Pygame所做的就是保存自上一幀以來(lái)發(fā)生的所有事件。這樣,即使玩家快速搗碎許多按鍵,也能記錄下來(lái)所有這些按鈕。所有事件存放在一個(gè)列表,因此我們運(yùn)行一個(gè)for循環(huán)來(lái)查看所有事件:

    for event in pygame.event.get():
        # 檢查屏幕關(guān)閉事件
        if event.type == pygame.QUIT:
            running = False

Pygame有很多事件。 pygame.QUIT是單擊“X”時(shí)發(fā)生的事件,因此我們?cè)O(shè)置running=False,游戲循環(huán)將結(jié)束。

控制屏幕刷新頻率

我們還沒(méi)有在“更新”部分中放入任何內(nèi)容,但我們?nèi)匀恍枰褂?code>FPS的設(shè)置來(lái)控制速度。我們可以這樣做:

while running:
    # 保證以正常的速率循環(huán)
    clock.tick(FPS)

'tick()'命令告訴 pygame 每次循環(huán)需要多長(zhǎng)時(shí)間,然后暫停多長(zhǎng)時(shí)間,以使整個(gè)循環(huán)(即整個(gè)幀)持續(xù)正確的時(shí)間。如果我們?cè)O(shè)置FPS為 30,則意味著我們希望幀持續(xù) 1 30 \frac{1}{30} 301? 或 0.03 秒。例如,如果我們的循環(huán)代碼(更新,繪制等)只需要0.01秒,那么pygame將等待0.02秒。

結(jié)束語(yǔ)

最后,讓我們確保當(dāng)游戲循環(huán)結(jié)束時(shí),我們實(shí)際上會(huì)破壞游戲窗口。通過(guò)將pygame.quit()放在代碼的最后來(lái)做到這一點(diǎn)。所以我們的最終pygame模板看起來(lái)像這樣:

# Pygame template - skeleton for a new pygame project
import pygame
import random
WIDTH = 360
HEIGHT = 480
FPS = 30
# define colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# initialize pygame and create window
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()
# Game loop
running = True
while running:
    # keep loop running at the right speed
    clock.tick(FPS)
    # Process input (events)
    for event in pygame.event.get():
        # check for closing window
        if event.type == pygame.QUIT:
            running = False
    # Update
    # Draw / render
    screen.fill(BLACK)
    # *after* drawing everything, flip the display
    pygame.display.flip()
pygame.quit()

祝賀!你有一個(gè)有效的Pygame模板。用一個(gè)pygame template.py名字保存這個(gè)文件,這樣你就可以在每次開(kāi)始一個(gè)新的Pygame項(xiàng)目時(shí)重復(fù)使用它。

本部分代碼

import pygame
import random
# WIDTH, HEIGHT = 360, 480
# WIDTH, HEIGHT = (360, 480)
# WIDTH = 360
# HEIGHT = 480
# SCREEN_SIZE = (WIDTH, HEIGHT)
SCREEN_SIZE = WIDTH, HEIGHT = 360, 480
FPS = 30
# Colors (R, G, B)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE)
pygame.display.set_caption("my game")
clock = pygame.time.Clock()
running = True
while running:
    clock.tick(FPS)
    # 1. 事件
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            running = False
    # 2. 更新組件狀態(tài)
    # 3. 繪制圖像
    screen.fill(BLACK)
    pygame.display.flip()

在下一教程中,我們將使用此模板作為學(xué)習(xí)如何在屏幕上繪制對(duì)象并使其移動(dòng)。

到此這篇關(guān)于Pygame游戲開(kāi)發(fā)之太空射擊實(shí)戰(zhàn)入門篇的文章就介紹到這了,更多相關(guān)Pygame太空射擊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

军事| 微博| 淮滨县| 湛江市| 信宜市| 鹤岗市| 山东| 清镇市| 子长县| 台州市| 偏关县| 富阳市| 呼和浩特市| 卢湾区| 盈江县| 海淀区| 舟曲县| 乌鲁木齐县| 惠东县| 龙南县| 阿拉善右旗| 奉节县| 安达市| 莎车县| 泰来县| 泉州市| 漾濞| 广饶县| 文化| 满城县| 辽源市| 临海市| 葫芦岛市| 长沙市| 内乡县| 上虞市| 咸丰县| 巴东县| 阳曲县| 博客| 鄂伦春自治旗|