天天看點

Python遊戲開發入門3 Pygame螢幕繪制機制

目錄

螢幕控制

幕控制需求

幕控制的重要函數

幕模式函數

幕設定為大小可調

幕設定為全屏

幕資訊函數

小遊戲(伸縮型)

Python遊戲開發入門3 Pygame螢幕繪制機制
Python遊戲開發入門3 Pygame螢幕繪制機制
Python遊戲開發入門3 Pygame螢幕繪制機制

pygame.display.set_mode(r=(0,0), flags=0)

r是遊戲螢幕的分辨率,采用(width, height)方式輸入

• flags用來控制顯示類型,可用|組合使用,常用顯示标簽如下:

† pygame.RESIZABLE 視窗大小可調

† pygame.NOFRAME 視窗沒有邊界顯示

† pygame.FULLSCREEN 視窗全屏顯示

pygame.display.set_mode(r=(0,0), flags=0)

注意:每種顯示方式要配合相應的處理機制

Python遊戲開發入門3 Pygame螢幕繪制機制

Python遊戲開發入門3 Pygame螢幕繪制機制

Python遊戲開發入門3 Pygame螢幕繪制機制
Python遊戲開發入門3 Pygame螢幕繪制機制
import pygame, sys
import math

pygame.init()
vinfo = pygame.display.Info()

# size = width, height = 600, 400

size = width, height = vinfo.current_w, vinfo.current_h
speed = [2, 2]
BLACK = 0, 0, 0
# print(pygame.display.Info())
screen = pygame.display.set_mode(size, pygame.FULLSCREEN)
# screen = pygame.display.set_mode((600, 400), pygame.FULLSCREEN)
# screen = pygame.display.set_mode((600, 400), pygame.RESIZABLE)
# screen = pygame.display.set_mode((600, 400), pygame.NOFRAME)
# print(pygame.display.Info())

pygame.display.set_caption("Pygame for Game")
ball = pygame.image.load("PYG02-ball.gif")
ballRect = ball.get_rect()

fps = 100
fclock = pygame.time.Clock()

while True:
    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            sys.exit()

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT: # 如果減為零就不用減了
                speed[0] == speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
            elif event.key == pygame.K_RIGHT:
                speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] -1
            elif event.key == pygame.K_UP:
                speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] -1
            elif event.key == pygame.K_DOWN:# 如果減為零就不用減了
                speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()

    ballRect = ballRect.move(speed[0], speed[1])
    if ballRect.left < 0 or ballRect.right > width:
        speed[0] = -speed[0]*abs(math.cos(ballRect.left))
    if ballRect.top < 0 or ballRect.bottom > height:
        speed[1] = -speed[1]

    screen.fill(BLACK)
    screen.blit(ball, ballRect)
    pygame.display.update()
    fclock.tick(fps)
           
Python遊戲開發入門3 Pygame螢幕繪制機制
Python遊戲開發入門3 Pygame螢幕繪制機制
import pygame, sys
import math

pygame.init()

# size = width, height = 600, 400

size = 600, 400
speed = [2, 2]
BLACK = 0, 0, 0
# print(pygame.display.Info())
screen = pygame.display.set_mode(size, pygame.RESIZABLE)
# screen = pygame.display.set_mode((600, 400), pygame.FULLSCREEN)
# screen = pygame.display.set_mode((600, 400), pygame.RESIZABLE)
# screen = pygame.display.set_mode((600, 400), pygame.NOFRAME)
# print(pygame.display.Info())

pygame.display.set_caption("Pygame for Game")
ball = pygame.image.load("PYG02-ball.gif")
ballRect = ball.get_rect()

fps = 100
fclock = pygame.time.Clock()

while True:
    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            sys.exit()

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT: # 如果減為零就不用減了
                speed[0] == speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
            elif event.key == pygame.K_RIGHT:
                speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] -1
            elif event.key == pygame.K_UP:
                speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] -1
            elif event.key == pygame.K_DOWN:# 如果減為零就不用減了
                speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
            elif event.key == pygame.K_ESCAPE:
                sys.exit()
        elif event.type == pygame.VIDEORESIZE:
            size = width, height = event.size[0], event.size[1]
            screen = pygame.display.set_mode(size, pygame.RESIZABLE)

    ballRect = ballRect.move(speed[0], speed[1])
    if ballRect.left < 0 or ballRect.right > width:
        speed[0] = -speed[0]*abs(math.cos(ballRect.left))
    if ballRect.top < 0 or ballRect.bottom > height:
        speed[1] = -speed[1]

    screen.fill(BLACK)
    screen.blit(ball, ballRect)
    pygame.display.update()
    fclock.tick(fps)