iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
0
自我挑戰組

不要太認真學 Python! 之 我又重新報名了系列 第 28

不要太認真學 Python! - Day 31

  • 分享至 

  • xImage
  •  

[前情提要]

前天弄出了音樂,昨天弄出了背景。
今天想要讓人物顯現。


今天一樣,上程式碼

import pygame
import random

pygame.init()

black = (0, 0, 0)
green = (91,231,196)
  
gameNaughtybox = pygame.display.set_mode((600,600))
pygame.Surface((600,600))
dest = (0,0)

pygame.display.set_caption ("Naughty Box")

player = pygame.image.load('cutegirlfiles/Idle (1).png')
walkRight = [pygame.image.load('cutegirlfiles/Walk (1).png'), pygame.image.load('cutegirlfiles/Walk (2).png'), pygame.image.load('cutegirlfiles/Walk (3).png'), pygame.image.load('cutegirlfiles/Walk (4).png'), pygame.image.load('cutegirlfiles/Walk (5).png')]
walkLeft = [pygame.image.load('Angel-1-7.png'), pygame.image.load('Angel-1-6.png')]
character=[pygame.image.load ('cutegirlfiles/Idle (1).png')]
bg = pygame.image.load('pipo-battlebg007b.png')
gameNaughtybox.blit(bg,(0,0))
pygame.display.flip()

clock = pygame.time.Clock()
    
x = 50
y = 50
width =64
height = 64
vel = 8
isJump = False
jumpCount = 15
left = False
right =False
walkCount = 0

def redrwnewWindow():
    global walkCount
    gameNaughtybox.blit(bg,(0,0))
    
    if walkCount + 1 >= 27:
        walkCount = 0
    if left:
        gameNaughtybox.blit ((walkLeft)[walkCount//3. (x,y)])
        walkCount +=1
    elif right:
        gameNaughtybox.blit (walkRight[walkCount//3], (x,y))
        walkCount +=1
    else:
        gameNaughtybox.blit(character, (x,y))
                        
    pygame.display.update()

run = True
while run:
    clock.tick(29)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False 

    keys = pygame.key.get_pressed()
    
    if keys [pygame.K_LEFT] and x > vel:
        x -= vel
        left = True
        right = False
        bg.scroll(5,0)
    elif keys [pygame.K_RIGHT] and x < 600 - width - vel:
        x += vel
        left = False
        right = True
        bg.scroll(-5,0)
    elif keys [pygame.K_UP] and y > vel:
        y -= vel
        right = True
        left = True
    elif keys [pygame.K_DOWN] and y < 600 - height - vel:
        y += vel
        right = False
        left = False
    else:
        right = False
        left = False
        walkCount = 0
    
    if not (isJump):
        if keys [pygame.K_UP] and y > vel:
            y -= vel
        if keys [pygame.K_DOWN] and y < 600 - height - vel:
            y += vel
        if keys [pygame.K_SPACE]:
            isJump = True
            right = False
            left = False
            walkCount = 0
    else:
        if jumpCount >= -10:
            neg = 1
            if jumpCount < 0:
                neg = -1
            y -= (jumpCount ** 2) * 0.5 * neg
            jumpCount -= 1
        else:
            isJump = False
            jumpCount = 10 

pygame.quit()

我在測試的時候,都是一樣先把聲音拉掉。

今天先說結果好了,每天都同一格式發文會痴呆吧...
結果就是...人物依然沒有成功顯示!

https://ithelp.ithome.com.tw/upload/images/20191002/2012042374jEFKFur3.jpg

雖然今天沒有成功,但是弄懂了一些事情。

原先一直想不透前天的其中一個問題:FPS(畫面更新率),其中和幀數問題,結果真的在pygame也會遇到。

pygame 中的物件都是用圖片組成的,包括角色也是,藉由圖片相連接,視覺暫留原理,營造出角色移動的感覺。

因此,我昨天犯了一個錯,我去找了素材和教程,其中都會提到 Sprites 剛開始真的一頭霧水,滿腦子只想到我的飲料的愛牌...

https://ithelp.ithome.com.tw/upload/images/20191002/20120423uNjxX6XaQH.jpg

https://ithelp.ithome.com.tw/upload/images/20191003/20120423tfnGbVgYDu.jpg

今天終於弄懂了, Sprites 就是指螢幕上一個或多個圖片的呈現,原來自己下載那些圖片檔,這麼連續是有意義的,那個時候還想不透,為什麼網路上的素材包都這麼大方給這麼多張人物動作,其實是因為要做成動作的關係。

因為圖片要連接起來像影像,因此就會有幀數和畫面更新率的問題。

幀數過少會顯得很像lag,如果過多又會過快,但這也牽涉到顯示器的問題。不過不多加討論,畢竟問題都要解決不了了啊啊啊

因此,我似乎知道了該怎麼更改程式,不過好像有點耗時,還要再給我一天時間吧)?


好的...
又來了,即使接近比賽尾聲...
依然又要後補)掩面 嘆氣


另外,我在查資料的過程中,也在思考怎麼讓背景能夠滾動,讓角色看起來有在移動。
我查到的關鍵字是 scroll 捲動,但是我把它放在背景程式碼的後方,它依然沒有任何動靜)真的要欲哭無淚了我...

明天再來試其他方法好了。
鬧脾氣收工。


不要太認真學 Python! - Day 30


上一篇
不要太認真學 Python! - Day 30
下一篇
不要太認真學 Python! - Day 32
系列文
不要太認真學 Python! 之 我又重新報名了31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言