Mermi ateşleyen bir kod yazıyorum, Python Oyun Geliştirme - Ateşleme Mekaniği - YouTube videosundan alıntılayarak yaptım bir çok şeyi. Gemi hareket etmesine rağmen mermileri sadece orta noktadan atıyor. Bunun sebebi ne olabilir?
import pygame
import time
pygame.init()
durum = True
gen = 900
yuk = 700
fps = 25
saat = pygame.time.Clock()
pencere = pygame.display.set_mode((gen,yuk))
class oyuncu(pygame.sprite.Sprite):
def __init__(self,birinci_grup) :
super().__init__()
self.image = pygame.image.load('uzay_gemisi.png')
self.rect = self.image.get_rect()
self.rect.centerx = gen/2
self.rect.centery = yuk-100
self.birinci_grup = birinci_grup
self.hiz = 12
def update(self):
klavye = pygame.key.get_pressed()
if klavye[pygame.K_RIGHT] and self.rect.right <= 900:
self.rect.centerx += self.hiz
elif klavye[pygame.K_LEFT] and self.rect.left >= 0:
self.rect.centerx -= self.hiz
def atesle(self):
if len(self.birinci_grup) < 2:
mermi(self.birinci_grup, self.rect.x, self.rect.top)
class mermi(pygame.sprite.Sprite):
def __init__(self, birinci_grup,x,y):
super().__init__()
self.image=pygame.image.load('line.png')
self.rect = self.image.get_rect()
self.rect.centerx = x
self.rect.centery = y
self.hiz = 12
birinci_grup.add(self)
def update(self):
self.rect.y -= self.hiz
if self.rect.bottom < 0:
self.kill()
ikinci_grup = pygame.sprite.Group()
ucuncu_grup = pygame.sprite.Group()
oyuncu2 = oyuncu(ikinci_grup)
ucuncu_grup.add(oyuncu2)
while durum:
for etk in pygame.event.get():
if etk.type == pygame.QUIT:
durum = False
if etk.type == pygame.KEYDOWN:
if etk.key == pygame.K_SPACE:
oyuncu(ikinci_grup).atesle()
pencere.fill((0,0,0))
ikinci_grup.update()
ikinci_grup.draw(pencere)
ucuncu_grup.update()
ucuncu_grup.draw(pencere)
pygame.display.update()
saat.tick(fps)
pygame.quit()
Çok teşekkür ederim. Sıkıntı döngünün içerisinde ateşleme kısmında nesne ile sınıfı karıştırmammış. Sınıflar konusu çok yeni benim için bu sebeple grupları 1. 2. gibi tanımlamıştım ama daha kafa karıştırıcı oldu :).