Menu
CoddyTech

بكسل في الثانية

جزء من قسم حلقة اللعبة في رحلة 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 الإحداثيات العشرية وترسم على بكسلات كاملة.

challenge icon

التحدي

سهل
  1. قبل الحلقة، عيّن speed = 200.
  2. اجعل كل سهم يحرّك الكرة بمقدار 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