昨天我的「小淘氣」弄了一個晚上終於成功讓他動了。
今天想要讓他跳一下...
感覺應該不會太難吧(呸呸呸 話不能說太早
那就開始吧!!
首先,先上今天的程式碼:
import pygame
import random
pygame.init()
black = (0, 0, 0)
green = (91,231,196)
gameNaughtybox = pygame.display.set_mode((600,600))
pygame.display.set_caption("Naughty Box")
gameNaughtybox.fill(black)
x = 50
y = 50
width =60
height = 60
vel = 8
isJump = False
jumpCount = 15
run = True
while run:
pygame.time.delay(20)
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
if keys [pygame.K_RIGHT] and x < 600 - width - vel:
x += vel
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
else:
if isJump >= -10:
neg = 1
if jumpCount < 0:
neg = -1
y -= (jumpCount ** 2) * 0.5 * neg
jumpCount -= 1
else:
isJump = False
jumpCount = 10
gameNaughtybox.fill((0,0,0))
pygame.draw.rect(gameNaughtybox, (247,80,0), (x, y, width, height))
pygame.display.update()
pygame.quit()
話果然不能說的太早...
真的是有難度啊!!!!!
這之前要記得在最一開始「定義」跳躍的關鍵字,我是放在x = 50 y = 50 width =60 height = 60 vel = 8
下面,在下面多加兩行「定義」:
isJump = False
jumpCount = 15
接著就是要使用昨天的程式碼,如下:
keys = pygame.key.get_pressed()
if keys [pygame.K_LEFT] and x>vel:
x-=vel
if keys [pygame.K_RIGHT] and x<600-width:
x+=vel
if keys [pygame.K_UP] and y>vel:
y-=vel
if keys [pygame.K_DOWN] and y<600-height:
y+=vel
要在上面的程式碼中間加上執行動作。
首先,要選什麼按鍵執行「跳」這個動作。
我也很老套的選擇了空白鍵(Space)
因此,除了上下左右鍵以外,下面還要加上 Space 鍵的指令,
變成下方的指令碼:
keys = pygame.key.get_pressed()
if keys [pygame.K_LEFT] and x>vel:
x-=vel
if keys [pygame.K_RIGHT] and x<600-width:
x+=vel
if keys [pygame.K_UP] and y>vel:
y-=vel
if keys [pygame.K_DOWN] and y<600-height:
y+=vel
if keys [pygame.K_SPACE]:
isJump = True
按左右鍵的時候,不可以跳。
按上下鍵的時候,可以跳。
這個要用 if/else,所以接下來就是要把 if/else 填進去,
變成下面這樣:
keys = pygame.key.get_pressed()
if keys [pygame.K_LEFT] and x>vel:
x-=vel
if keys [pygame.K_RIGHT] and x<600-width:
x+=vel
if not (isJump):
if keys [pygame.K_UP] and y>vel:
y-=vel
if keys [pygame.K_DOWN] and y<600-height:
y+=vel
if keys [pygame.K_SPACE]:
isJump = True
else:
「跳」這個動作是怎麼樣運作的?
老實說,這個在看教程以前,還真的沒有思考過這個問題。
今天看了教程,覺得真的很有趣,所以決定把它圖像化來表示。
好的,我竟然為了製圖,文章寫不完...
文字候補...
文章越來越長(?
希望能把自己的想法更條理化。
題外話,在製圖的過程中,突然覺得我真的是個很熱愛影像的人欸~)大笑
看到上面的圖,就可以開始用座標來思考了。
如果不是在螢幕上的坐標,是在紙上的座標,假設物體從45度角彈出去,然後再從45度角降落,那就是從(0,0)彈到(3,3),在那裡停留以後,再從那裡降落到(5,5),這時候可以發現距離有點像是平方的概念。
因此可以開始試寫程式了,程式碼如下:
keys = pygame.key.get_pressed()
if keys [pygame.K_LEFT] and x > vel:
x -= vel
if keys [pygame.K_RIGHT] and x < 600 - width - vel:
x += vel
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
else:
if jumpCount >= -10:
neg = 1
if jumpCount < 0:
neg = -1
y -= (jumpCount ** 2) * 0.5 * neg
jumpCount -= 1
else:
isJump = False
jumpCount = 10
仔細檢視 y -= (jumpCount ** 2) * 0.5 * neg
就是這個概念。
但是,我必須要說
if jumpCount >= -10:
neg = 1
if jumpCount < 0:
neg = -1
y -= (jumpCount ** 2) * 0.5 * neg
jumpCount -= 1
else:
isJump = False
jumpCount = 10
這段程式碼,我自己只能意會,不能言傳。像是 neg = 1
、neg = -1
、jumpCount = 1
這裡我還是不能參透。
不過這時候我必須要大力稱讚教程中的老師,這個老師真的很棒,他說了一段話就是「不會的話就先跳過,複製貼上以後,再慢慢弄懂它就好了」。對的!!!我也是很喜歡這種方式啊,看多了,總有一天會開竅的!!
給大家看今天的成果吧!!!
小淘氣跳跳影片
是說為什麼上傳影片只能先傳到youtube,有點麻煩啊...
最後,附上我看的教學影片,我覺得很淺顯易懂,很適合新手學習。
還有這幾天有在想,要怎麼替這個活動劃下句點。
今天有想到了,揪讓 我們 我自己拭目以待吧!!!