pygame學習筆記——自己整理(後續更新~)

一、個人理解 

import sys, pygame
pygame.init()

size = width, height = 320, 200
speed = [2, 2]
black = 0, 0, 0

screen = pygame.display.set_mode(size)

pygame.display.set_caption('Hello World')

ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()

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

    ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = -speed[1]

    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()

 

1.點擊窗口的關閉按鈕,會觸發退出事件,if判斷檢測到,會出退出窗口。沒有下面的代碼,窗口關閉不了。

#遍歷所有事件
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      pygame.quit()
      sys.exit()

事件都是使用隊列存儲的。

2.display這個對象,對應的是下面這個顯示的窗口(display==顯示的窗口),對象有設置標題、窗口大小的方法。

3.pygame.display.set_mode(size)#返回的是Surface對象,也可以當作 screen 的意思

surface == 紅線標出來的窗口)。可以設置填充色等。

ball = pygame.image.load("intro_ball.gif")
print(type(ball))

結果:

<class 'pygame.Surface'> 

4.ball.get_rect() #返回的是Rect對象,圖片轉換成矩形對象。

rect對象 == 矩形圖片)。有移動等方法。

5.ballrect.move(speed)#speed是座標,列表表示。ballrect當前的座標是原點座標,移到speed的座標。

也可以理解,橫向移動speed[0]個像素,縱向移動speed[1]個像素

Pygame的座標原點(0,0)點位於左上角,X軸自左向右,Y軸自上向下,單位爲像素。

6.一個遊戲循環(也可以稱爲主循環)就做下面這三件事:

  1. 處理事件
  2. 更新遊戲狀態
  3. 繪製遊戲狀態到屏幕上

二、視頻筆記

1.Rect對象

2.screen.fill(color)

3.screen.blit(src, dest) 

4.代碼整理預覽

5.控制幀率控制畫面的切換速度

其實就是根據幀率,計算出每次循環應該等的時間間隔,然後每次執行睡眠對應的時間間隔。 

6.鍵盤控制小球

方向鍵控制小球的移動方向。小球一直在根據speed的值move,通過時間改變speed的值來改變小球的移動

import sys, pygame
#初始化每個模塊的調用
pygame.init()

size = width, height = 320, 240
speed = [0, 0]
black = 0, 0, 0
screen = pygame.display.set_mode(size)
print(type(screen))
ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()

ftp = 100
fclock = pygame.time.Clock()
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                speed[1] = -1 #小球向上移動
                speed[0] = 0 #小球左右不移動
            elif event.key == pygame.K_DOWN:
                speed[1] = 1 #小球向下移動
                speed[0] = 0  #小球左右不移動
            elif event.key == pygame.K_LEFT:
                speed[0] = -1  #小球向左移動
                speed[1] = 0 #小球上下不移動
            elif event.key == pygame.K_RIGHT:
                speed[0] = 1  #小球向右移動
                speed[1] = 0 #小球上下不移動
    ballrect = ballrect.move(speed)
    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()
    fclock.tick(ftp)

7.屏幕的相關設置

 

 

 全屏顯示,按ESC退出

import sys, pygame
#初始化每個模塊的調用
pygame.init()
#獲取屏幕的信息
vInfo = pygame.display.Info()
#獲取屏幕的寬度和高度
size = width,height = vInfo.current_w ,vInfo.current_h

#size = width, height = 320, 240
speed = [0, 0]
black = 0, 0, 0

#設置屏幕模式爲全屏
screen = pygame.display.set_mode(size,pygame.FULLSCREEN)

ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()

ftp = 100
fclock = pygame.time.Clock()
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                speed[1] = -1 #小球向上移動
                speed[0] = 0 #小球左右不移動
            elif event.key == pygame.K_DOWN:
                speed[1] = 1 #小球向下移動
                speed[0] = 0  #小球左右不移動
            elif event.key == pygame.K_LEFT:
                speed[0] = -1  #小球向左移動
                speed[1] = 0 #小球上下不移動
            elif event.key == pygame.K_RIGHT:
                speed[0] = 1  #小球向右移動
                speed[1] = 0 #小球上下不移動
            elif event.key == pygame.K_ESCAPE:#當全屏的時候,需要按鍵ESC退出
                sys.exit()
    ballrect = ballrect.move(speed)
    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()
    fclock.tick(ftp)

窗口可以隨意的拖動改變大小。 

import sys, pygame
#初始化每個模塊的調用
pygame.init()
#獲取屏幕的信息
vInfo = pygame.display.Info()
#獲取屏幕的寬度和高度
size = width,height = vInfo.current_w ,vInfo.current_h

#size = width, height = 320, 240
speed = [0, 0]
black = 0, 0, 0

#設置屏幕模式爲全屏
screen = pygame.display.set_mode(size,pygame.RESIZABLE)

ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()

ftp = 100
fclock = pygame.time.Clock()
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                speed[1] = -1 #小球向上移動
                speed[0] = 0 #小球左右不移動
            elif event.key == pygame.K_DOWN:
                speed[1] = 1 #小球向下移動
                speed[0] = 0  #小球左右不移動
            elif event.key == pygame.K_LEFT:
                speed[0] = -1  #小球向左移動
                speed[1] = 0 #小球上下不移動
            elif event.key == pygame.K_RIGHT:
                speed[0] = 1  #小球向右移動
                speed[1] = 0 #小球上下不移動
            elif event.key == pygame.K_ESCAPE:#當全屏的時候,需要按鍵ESC退出
                sys.exit()
        elif event.type == pygame.VIDEORESIZE:#檢測窗口變化事件
            size = event.size[0],event.size[1]#獲取最新的窗口大小
            screen = pygame.display.set_mode(size, pygame.RESIZABLE)#重新設置窗口模式
    ballrect = ballrect.move(speed)
    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()
    fclock.tick(ftp)

 

 

關閉窗口,遊戲停止 

import sys, pygame
pygame.init()

size = width, height = 320, 240
speed = [2, 2]
black = 0, 0, 0

screen = pygame.display.set_mode(size)

ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()

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

    if pygame.display.get_active():#窗口關閉就不移動了
        ballrect = ballrect.move(speed)
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = -speed[1]

    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()

 

filp()是更新全部

update()是更新變化的地方

 

8.事件

 

 

 

 

 

 測試事件的三個屬性,打印出來

import sys, pygame
pygame.init()

size = width, height = 320, 240
speed = [2, 2]
black = 0, 0, 0

screen = pygame.display.set_mode(size)

ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.unicode == "":
                print("#",event.key,event.mod)
            else:
                print(event.unicode,event.key,event.mod)
    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()

 

 

 

import sys, pygame
pygame.init()

size = width, height = 320, 240
speed = [2, 2]
black = 0, 0, 0

screen = pygame.display.set_mode(size)

ball = pygame.image.load("intro_ball.gif")
ballrect = ball.get_rect()

while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                speed[0] = event.pos[0]
                speed[1] = event.pos[1]
                ballrect = ballrect.move(speed)

    screen.fill(black)
    screen.blit(ball, ballrect)
    pygame.display.flip()

 

 

 

#創建一個事件,添加到隊列中
    uevent = pygame.event.Event(pygame.KEYDOWN,{'nuicode':123,'key':pygame.K_SPACE,'mod':0})
    pygame.event.post(uevent)

9.顏色 

 

 

10.畫圖

 

 

 

 

 

 

 

11.繪製文字

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章