Pygame bana doğru gelen düşman

Selamlar

Kısaca ikitane tüp var kırmızı ve mavi, kırmızı küp mavi küpün yanına gidecek ama aniden değil yavaş yavaş yürür gibi olacak. Bunu nasıl yapabiliriz hocam?

Aşağıdaki kodlarda küpler var.

import pygame,sys
pygame.init()

x=655
y=1200
red=(250,0,0)
mavi=(0,0,250)
fps=100
saat=pygame.time.Clock()

py=pygame.Rect(100,100,70,70)
py2=pygame.Rect(100,600,50,50)

pencere=pygame.display.set_mode((x,y))

drm=True
while drm:

pencere.fill((0,0,0))
saat.tick(fps)
pygame.draw.rect(pencere,red,py)
pygame.draw.rect(pencere,mavi,py2)

Selam, Uzaklık Formülü ile yapabiliriz. Biraz uğraştım ve kodun son hali şöyle oldu:

import pygame
import sys
import math

pygame.init()

screen = pygame.display.set_mode((655, 1200))

clock = pygame.time.Clock()

kirmiziKutu = pygame.Surface((70, 70))
kirmiziKutu.fill("red")
kirmiziKutu_rect = kirmiziKutu.get_rect(center=(100, 100))

maviKutu = pygame.Surface((50, 50))
maviKutu.fill("blue")
maviKutu_rect = maviKutu.get_rect(center=(100, 600))
maviKutuKonum = (100, 600)

easingAmount = 0.015

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit(0)

    xDistance = maviKutu_rect.x - kirmiziKutu_rect.x
    yDistance = maviKutu_rect.y - kirmiziKutu_rect.y
    distance = math.sqrt(xDistance * xDistance + yDistance * yDistance)
    if distance > 1:
        kirmiziKutu_rect.x += xDistance * easingAmount
        kirmiziKutu_rect.y += yDistance * easingAmount
    screen.fill("black")
    screen.blit(kirmiziKutu, kirmiziKutu_rect)
    screen.blit(maviKutu, maviKutu_rect)
    pygame.display.update()
    clock.tick(100)

Ayrıca kodunuzda pygame.display.update() olmadığı için program yanıt vermiyordu.

Ayrıca forumda kod paylaşırken </> butonuna tıklayıp kodu içine yapıştırırsanız daha okunabilir olmasını sağlayabilirsiniz ve girintileri ayarlamak için uğraşmak zorunda kalmayız. Bu size daha çok insanın yardım etmesini sağlayabilir.

Hocam Android pydroid ile yazdım olmadı,

import pygame
import sys
import math

pygame.init()

screen = pygame.display.set_mode((655, 1200))

clock = pygame.time.Clock()

kirmiziKutu = pygame.Surface((70, 70))
kirmiziKutu.fill((255, 0, 0))
kirmiziKutu_rect = kirmiziKutu.get_rect(center=(100, 100))

maviKutu = pygame.Surface((50, 50))
maviKutu.fill((0, 0, 255))
maviKutu_rect = maviKutu.get_rect(center=(100, 600))
maviKutuKonum = (100, 600)

easingAmount = 0.015

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit(0)

    xDistance = maviKutu_rect.x - kirmiziKutu_rect.x
    yDistance = maviKutu_rect.y - kirmiziKutu_rect.y
    distance = math.sqrt(xDistance * xDistance + yDistance * yDistance)
    if distance > 1:
        kirmiziKutu_rect.x += xDistance * easingAmount
        kirmiziKutu_rect.y += yDistance * easingAmount
    screen.fill((0, 0, 0))
    screen.blit(kirmiziKutu, kirmiziKutu_rect)
    screen.blit(maviKutu, maviKutu_rect)
    pygame.display.update()
    clock.tick(100)

Şöyle dener misiniz?

1 Beğeni

Evet kod çalışıyor hocam

Teşekkürler

1 Beğeni

tick fonksiyonu bir onceki cagrimindan beri gecen zamani donduruyor.

Framerate’ten bagimsiz animasyon yapmak icin hareketleri (ve zamana bagli diger her seyi) bu zamanla carpmak lazim.

1 Beğeni