Có cách nào để nhảy và thêm trọng lực không?

Có cách nào để nhảy và thêm trọng lực không ạ ? viết lại giúp em!

import pygame
pygame.init()
cuaso = pygame.display.set_mode((800,600))
pygame.display.set_caption("game boring 1")
dongho = pygame.time.Clock()
x = 100
y = 120
rong = 15
cao = 15
vantoc = 3
running = True
while running:
    dongho.tick(60) #60fps
    cuaso.fill('azure 3')
   
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    phim = pygame.key.get_pressed()
    if phim [pygame.K_LEFT] and x >= vantoc:
        x-= vantoc
    if phim [pygame.K_RIGHT] and x <= 800-rong:
        x+= vantoc
    if phim [pygame.K_UP] and y >= vantoc:
        y-= vantoc        
    if phim [pygame.K_DOWN] and y <= 600-cao:
        y+= vantoc
    pygame.draw.rect(cuaso,'gray0',(x,y,rong,cao))
    pygame.display.update()
 
pygame.quit()

Bạn tự làm, chưa được thì hỏi thêm, mọi người sẽ chỉ dẫn.

3 Likes

Để simulate nhảy cùng trọng lực thì bạn cần có những thứ sau:

  • Delta time (Time tick): Là thời gian giữa 2 lần loop.
  • Phương trình chuyển động theo đúng vật lý lớp 8:
    image

Trong đó:

  • g là gia tốc trọng trường, đơn vị là m/s^2. Tuy nhiên m là đơn vị rất lớn, giả sử nhân vật của bạn có chiều cao gần tương đương với người thật (ví dụ nhân vật Mario trong game), thì bạn có thể cho nhân vật cao cỡ 1.5m ~ 150 pixel, quy đổi ra hệ quy chiếu của game có thể là 100 pixel/s^2.
  • t là thời gian tính từ lúc nhảy cho tới thời điểm hiện tại. Giả sử mỗi delta time là 10ms thì mỗi loop sẽ cộng dồn delta t.
  • v0 là vận tốc ban đầu của cú nhảy, giá trị này bạn tùy chỉnh theo thực tế, có thể là 50 pixel/s (di chuyển được 50 pixel mỗi giây).

Bạn có thể thấy choáng ngợp với thông tin ở trên, tuy nhiên nó là cách duy nhất để tạo ra hiệu ứng “giống” với thực tế nhất và KHÔNG hề dễ ăn đâu :smiley:

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?