Menu
CoddyTech

التسارع والاحتكاك

جزء من قسم حلقة اللعبة في رحلة Pygame على Coddy. الدرس 21 من 32.

يبدأ القرص بأقصى سرعة ويتوقف تمامًا عندما تتركه. على الجليد، ينبغي أن تتزايد سرعته وأن ينزلق. يحقق ذلك تغييران.

التسارع هو مقدار تغيّر السرعة المتجهة في كل ثانية، بوحدة البكسل في الثانية. تحدد المفاتيح التسارع، ويغيّر التسارع السرعة المتجهة:

acc = pygame.Vector2(0, 0)
if keys[pygame.K_RIGHT]:
    acc.x = 600

vel += acc * dt
vel -= vel * 2 * dt
pos += vel * dt

أنشئ acc من جديد في كل إطار، لكي تكون قيمته صفرًا عندما لا يكون أي مفتاح مضغوطًا. تحتفظ السرعة المتجهة بقيمتها من إطار إلى آخر، لذلك يواصل القرص الانزلاق.

الاحتكاك هو السطر الثاني. vel * 2 * dt جزء صغير من السرعة المتجهة، ويكون أكبر عندما يتحرك القرص بسرعة. إنقاصه في كل إطار يبطئ القرص السريع بسرعة، والقرص البطيء برفق، حتى يتوقف. الرقم الأكبر من 2 يجعل الأرضية أخشن.

إذا استمر الضغط مدة كافية، يتوازن الدفع والاحتكاك عند سرعة قصوى تبلغ 600 / 2 = 300 بكسل في الثانية.

challenge icon

التحدي

متوسط
  1. في الحلقة، استبدل vel = pygame.Vector2(0, 0) بـ acc = pygame.Vector2(0, 0)، واجعل كل سهم يضبط acc.x أو acc.y على 600 أو -600.
  2. قبل تحريك القرص، أضف acc * dt إلى vel، ثم اطرح منه vel * 2 * dt.

جرّب بنفسك

import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Ice Puck")
clock = pygame.time.Clock()

pos = pygame.Vector2(240, 180)
vel = pygame.Vector2(0, 0)
dt = 0

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()
    vel = pygame.Vector2(0, 0)
    if keys[pygame.K_LEFT]:
        vel.x = -200
    if keys[pygame.K_RIGHT]:
        vel.x = 200
    if keys[pygame.K_UP]:
        vel.y = -200
    if keys[pygame.K_DOWN]:
        vel.y = 200

    pos += vel * dt
    pos.x = max(14, min(pos.x, 466))
    pos.y = max(14, min(pos.y, 346))

    screen.fill((200, 225, 240))
    pygame.draw.circle(screen, (40, 50, 70), pos, 14)
    pygame.display.flip()
    dt = clock.tick(60) / 1000

pygame.quit()

جميع دروس حلقة اللعبة

تدرّب بنفسك: Playground لـ Pygame