İvme ve Sürtünme
Coddy'nin Pygame Journey'sinin Oyun Döngüsü bölümünün bir parçası. Ders 21 / 32.
Disk tam hızda başlar ve tuşu bıraktığında aniden durur. Buzda hızlanmalı ve kaymalıdır. Bunu iki değişiklik sağlar.
İvme, hızın her saniye, saniyede kaç piksel değiştiğidir. Tuşlar ivmeyi belirler ve ivme hızı değiştirir:
acc = pygame.Vector2(0, 0)
if keys[pygame.K_RIGHT]:
acc.x = 600
vel += acc * dt
vel -= vel * 2 * dt
pos += vel * dtacc'yi her karede yeniden oluştur; böylece hiçbir tuşa basılmadığında sıfır olur. Hız kareler arasında değerini korur, bu nedenle disk kaymaya devam eder.
Sürtünme ikinci satırdır. vel * 2 * dt, hızın küçük bir kısmıdır ve disk hızlıyken daha büyüktür. Her karede bu miktarı çıkarmak, hızlı diski çabucak, yavaş diskiyse yavaşça durana kadar yavaşlatır. 2'den büyük bir sayı, daha pürüzlü bir zemin demektir.
Yeterince uzun süre basılı tutulduğunda, itme ve sürtünme 600 / 2 = 300 piksel/saniye azami hızında dengelenir.
Görev
Orta- Döngüde,
vel = pygame.Vector2(0, 0)ifadesiniacc = pygame.Vector2(0, 0)ile değiştir ve her ok tuşununacc.xveyaacc.ydeğerini600ya da-600yapmasını sağla. - Puku hareket ettirmeden önce
acc * dtdeğeriniveldeğerine ekle, ardındanvel * 2 * dtdeğerini ondan çıkar.
Kendin dene
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()
Oyun Döngüsü bölümündeki tüm dersler
1Bir Kareyi Hareket Ettir
Bir Pencere AçArka Planı Doldur4Zamana Göre Hareket
Delta ZamanıSaniyedeki Piksel SayısıVector2İvme ve SürtünmeEkranın Bir Kenarından Çıkıp Diğerinden GirmeKendi başına pratik yap: Pygame playground