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?
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.
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?
Evet kod çalışıyor hocam
Teşekkürler
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.