Pygame particles

Arkadaşlar belki birileri bu effecti arıyor olabilir bu sebeple yeni bulduğum bu kodu paylaşmak isterim

kodun olayı mouse pozisyonuna bu partiküllleri koyuyor


# Setup Python ----------------------------------------------- #
import pygame, sys, random
 
# Setup pygame/window ---------------------------------------- #
mainClock = pygame.time.Clock()
from pygame.locals import *
pygame.init()
pygame.display.set_caption('game base')
screen = pygame.display.set_mode((500, 500),0,32)
 

particles = []
 
# Loop ------------------------------------------------------- #
while True:
   
    # Background --------------------------------------------- #
    screen.fill((0,0,0))
    mx, my = pygame.mouse.get_pos()
    particles.append([[mx, my], [random.randint(0, 20) / 10 - 1, -4], random.randint(4, 7)])
 
    for particle in particles:
        particle[0][0] += particle[1][0]
        particle[0][1] += particle[1][1]
        particle[2] -= 0.1
        particle[1][1] += 0.1
        pygame.draw.circle(screen, (255, 255, 255), [int(particle[0][0]), int(particle[0][1])], int(particle[2]))
        if particle[2] <= 0:
            particles.remove(particle)
   
    # Buttons ------------------------------------------------ #
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
               
    # Update ------------------------------------------------- #
    pygame.display.update()
    mainClock.tick(60)

mesela rengi kırmızı yapıp kan efekti yapılabilir

tek sıkıntı bunu sabit bir yere belirli zaman süresince olup bitmesini sağlamak

time modülü iş görecektir

1 Beğeni

Kod güzelmiş, nereden buldunuz? (Tamam tahmin ettiğim şeymiş.)


Yapabildiniz mi?

Evet for döngüsü ile

Kod güzel İngilizcesi yetmeyenler bulamayabilir diye paylaştım aslinda bir şey farkettim bu formun pygame kategorisinin neredeyse hepsi benim sorularim

Ha bir şey daha aklıma geldi ateş efekti yapılabilir


# Setup Python ----------------------------------------------- #
import pygame, sys, random
 
# Setup pygame/window ---------------------------------------- #
mainClock = pygame.time.Clock()
from pygame.locals import *
pygame.init()
pygame.display.set_caption('game base')
screen = pygame.display.set_mode((500, 500),0,32)
 

particles = []
 
# Loop ------------------------------------------------------- #
while True:
   
    # Background --------------------------------------------- #
    screen.fill((0,0,0))
    mx, my = pygame.mouse.get_pos()
    particles.append([[mx, my], [random.randint(0, 20) / 10 - 1, -4], random.randint(4, 7)])
 
    for particle in particles:
        particle[0][0] += particle[1][0]
        particle[0][1] += particle[1][1]
        particle[2] -= 0.3
        particle[1][1] += 0
        pygame.draw.circle(screen, (255, 255, 0), [int(particle[0][0]), int(particle[0][1])], int(particle[2]))
        if particle[2] <= 0:
            particles.remove(particle)
   
    # Buttons ------------------------------------------------ #
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
               
    # Update ------------------------------------------------- #
    pygame.display.update()
    mainClock.tick(60)

bir şey sorucam ben bu particle ların attığım alev topunu takip etmesini istiyorum ama benim kamera modülümü nasıl bağlıcam particlelara bilmiyorum çünkü kamera kodu diğim modül uygun olmaz sadece rectangle ile çalışıyor

#camera kodu
class Camera:
    def __init__(self, mapWidth, mapHeight):
        self.camera = pg.Rect(0, 0, mapWidth, mapHeight)
        self.width = mapWidth
        self.height = mapHeight

    def apply(self, sprite):
        return sprite.rect.move(self.camera.topleft)
    def apply_rect(self, rect):
        return rect.move(self.camera.topleft)# For The Enemy Health
    def update(self, target):
        x = -target.rect.centerx + int(WIDTH/2)

        y = -target.rect.centery + int(HEIGHT//1.35)

        # limit scrolling to map size

        x = min(0, x)  # left


        y = min(0, y)  # top

        x = max(-(self.width - WIDTH), x)  # right

        y = max(-(self.height - HEIGHT), y)  # bottom

        self.camera = pg.Rect(x, y, self.width, self.height)

Kamerayla ne alakası var tam anlamadım, kodun bu kısmını inceleyerek particle’ların konumunu hangi değişkenlerin belirlediğini görebilirsiniz:

kameranın amacı karakter zıpladığında daha önce var olan particle ların saçma bi görüntü oluşturmasını engellemek

Yapamadım yardımcı olursan sevinirim @EkremDincel

Kamera sisteminizde bir sıkıntı olsa gerek, kullanımını yeterince esnek hale getirememiş olabilirsiniz. Kamerayı nasıl kullandığınızı ve cisimleri nasıl blit ettiğinizi bilmeden yardım edemem.

örnek göstereyim

screen.blit(image,camera.apply(sprite))#rectangele return