بكسل في الثانية
جزء من قسم حلقة اللعبة في رحلة Pygame على Coddy. الدرس 19 من 32.
إن سرعة قدرها 4 بكسلات في الإطار تعادل 240 بكسلًا في الثانية فقط عند 60 إطارًا في الثانية. عند 30 إطارًا في الثانية، تعمل اللعبة نفسها بنصف السرعة. استخدم السرعات بوحدة بكسل في الثانية بدلًا من ذلك، واضربها في dt للحصول على مقدار الحركة في هذا الإطار:
speed = 200
if keys[pygame.K_RIGHT]:
x += speed * dtعند 60 إطارًا في الثانية، تكون قيمة dt نحو 0.017 وتتحرك الكرة نحو 3.4 بكسلات في الإطار. وعند 30 إطارًا في الثانية، تكون قيمة dt نحو 0.033 وتتحرك نحو 6.7 بكسلات: أي ضعف المسافة في كل إطار، لكن تظل 200 بكسل في الثانية.
تصبح الإحداثيات أعدادًا عشرية مثل 243.4. وهذا لا بأس به: تقبل pygame الإحداثيات العشرية وترسم على بكسلات كاملة.
التحدي
سهل- قبل الحلقة، عيّن
speed = 200. - اجعل كل سهم يحرّك الكرة بمقدار
speed * dtبدلًا من 4.
جرّب بنفسك
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Pixels per Second")
clock = pygame.time.Clock()
x, y = 240, 180
dt = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
x -= 4
if keys[pygame.K_RIGHT]:
x += 4
if keys[pygame.K_UP]:
y -= 4
if keys[pygame.K_DOWN]:
y += 4
screen.fill((30, 30, 46))
pygame.draw.circle(screen, (255, 196, 0), (x, y), 16)
pygame.display.flip()
dt = clock.tick(60) / 1000
pygame.quit()
جميع دروس حلقة اللعبة
تدرّب بنفسك: Playground لـ Pygame