Đăng ký công nghệ với Tim!
Thiết lập ranh giới
Trong hướng dẫn cuối cùng, chúng tôi đã tạo một hình chữ nhật mà chúng tôi có thể di chuyển xung quanh màn hình bằng các phím mũi tên. Tuy nhiên, khi chúng ta đi đến cuối màn hình, hình chữ nhật vẫn được phép tiếp tục di chuyển. Để dừng điều này, chúng ta cần thiết lập một số ranh giới và kiểm tra xem hình chữ nhật của chúng ta có nằm trong chúng trước khi di chuyển lại không.
Để làm điều này, chúng tôi chỉ có thể kiểm tra tọa độ X và Y của hình chữ nhật so với kích thước của màn hình. Khi chúng ta làm điều này, chúng ta cần nhớ rằng khi chúng ta vẽ một cái gì đó trong pygame, chúng ta rút ra từ góc trên cùng bên trái của đối tượng. Điều này có nghĩa là góc trên cùng bên trái sẽ là các giá trị X và Y của chúng tôi trong khi góc trên bên phải sẽ là (chiều rộng x +, y) và phía dưới bên trái sẽ là (chiều cao x, y +).
import pygame pygame.init() win = pygame.display.set_mode((500,500)) pygame.display.set_caption("First Game") x = 50 y = 50 width = 40 height = 60 vel = 5 run = True while run: pygame.time.delay(100) 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: # Making sure the top left position of our character is greater than our vel so we never move off the screen. x -= vel if keys[pygame.K_RIGHT] and x < 500 - vel - width: # Making sure the top right corner of our character is less than the screen width - its width x += vel if keys[pygame.K_UP] and y > vel: # Same principles apply for the y coordinate y -= vel if keys[pygame.K_DOWN] and y < 500 - height - vel: y += vel win.fill((0,0,0)) pygame.draw.rect(win, (255,0,0), (x, y, width, height)) pygame.display.update() pygame.quit()
Bây giờ nhân vật của chúng tôi không thể di chuyển khỏi màn hình!
Nhảy
Để nhảy, chúng ta cần thiết lập một vài biến.
# These go near the top of your program, outside the while loop isJump = False jumpCount = 10
Bây giờ chúng tôi sẽ kiểm tra xem người dùng có chạm vào thanh không gian không. Nếu họ làm, chúng ta sẽ thay đổi Isjump thành True và bắt đầu nhảy.
# Goes inside the while loop, under event for moving down if keys[pygame.K_SPACE]: isJump = True
Bây giờ khi chúng tôi đang nhảy, chúng tôi không muốn cho phép người dùng nhảy lại hoặc có thể di chuyển lên xuống. Để không cho phép người dùng làm điều này, chúng tôi sẽ thêm một câu lệnh khác.
import pygame pygame.init() win = pygame.display.set_mode((500,500)) pygame.display.set_caption("First Game") x = 50 y = 50 width = 40 height = 60 vel = 5 isJump = False jumpCount = 10 run = True while run: pygame.time.delay(100) 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: # Making sure the top left position of our character is greater than our vel so we never move off the screen. x -= vel if keys[pygame.K_RIGHT] and x < 500 - vel - width: # Making sure the top right corner of our character is less than the screen width - its width x += vel if not(isJump): # Checks is user is not jumping if keys[pygame.K_UP] and y > vel: # Same principles apply for the y coordinate y -= vel if keys[pygame.K_DOWN] and y < 500 - height - vel: y += vel if keys[pygame.K_SPACE]: isJump = True else: # This is what will happen if we are jumping win.fill((0,0,0)) pygame.draw.rect(win, (255,0,0), (x, y, width, height)) pygame.display.update() pygame.quit()
Bây giờ chúng tôi sẽ bắt đầu viết mã để làm cho nhân vật nhảy. Chúng tôi sẽ thực hiện một công thức bậc hai cho việc nhảy của chúng tôi. Điều này là do lý tưởng nhất là chúng tôi muốn nhảy của chúng tôi trở nên mượt mà và trông giống như thế này:
Bên trong người khác & nbsp; chúng tôi sẽ dán như sau.else we will paste the following.
if jumpCount >= -10: y -= (jumpCount * abs(jumpCount)) * 0.5 jumpCount -= 1 else: # This will execute if our jump is finished jumpCount = 10 isJump = False # Resetting our Variables
Và bây giờ nhân vật của chúng ta có thể nhảy!
*Nếu bạn bị nhầm lẫn bởi điều này, vui lòng tham khảo video bắt đầu từ 11: 00.*
Lưu ý: Tôi sử dụng ABS () sử dụng thay vì ** chỉ để loại bỏ sự cần thiết của biến NEG được thấy trong video. Cả hai phiên bản của mã này hoạt động giống nhau. I use abs() use instead of ** just to eliminate the need for the neg variable seen in the video. Both versions of this code work the same.
Mã đầy đủ
Đây là những gì mã đầy đủ của bạn nên trông như thế nào.
import pygame pygame.init() win = pygame.display.set_mode((500,500)) pygame.display.set_caption("First Game") x = 50 y = 50 width = 40 height = 60 vel = 5 isJump = False jumpCount = 10 run = True while run: pygame.time.delay(100) 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 < 500 - vel - width: x += vel if not(isJump): if keys[pygame.K_UP] and y > vel: y -= vel if keys[pygame.K_DOWN] and y < 500 - height - vel: y += vel if keys[pygame.K_SPACE]: isJump = True else: if jumpCount >= -10: y -= (jumpCount * abs(jumpCount)) * 0.5 jumpCount -= 1 else: jumpCount = 10 isJump = False win.fill((0,0,0)) pygame.draw.rect(win, (255,0,0), (x, y, width, height)) pygame.display.update() pygame.quit()