ben oyunuma bir dükkan eklemek istiyorum ama nasıl yapıcam sadece karakteri ve konuşmasını yaptım kodum
class Store(pg.sprite.Sprite):
    def __init__(self, x, y, screen, textList = None):
        pg.sprite.Sprite.__init__(self)
        self.image = pg.image.load("standing.png")
        self.rect = self.image.get_rect(topleft = (x, y))
        self.textList = textList
        self.screen = screen
        self.Collide = False
        self.Bubble = False
        self.press = True
    def draw_QuestionMark(self, rect):
        if self.Collide == True and self.Bubble == False:
            self.screen.blit(pg.image.load("StoreQuestion.png"), (rect.x + 20, rect.top - 25))
        
    def CheckSpeech(self):
        key = pg.key.get_pressed()
        if key[pg.K_j] and  self.press:
            if not self.Bubble:
                self.sb = SpeechBubble(self.rect.x + 45, self.rect.top - 40, self.textList)
                all_sprites.add(self.sb) 
                self.Bubble = True
            else:
                # if itertools loop end,Bubble = False
                self.Bubble = self.sb.nextText()
            self.press = False
        elif not key[pg.K_j]:
            self.press = True
''Question Mark"    karakter   dükkanın yanına yaklaştığında soru işareti yapıcak ve eğer karakter “J” tuşuna basarsa etkileşime geçecek yani SpeechBubble (konuşma balonu) aktif olucak ve sonunda da market menu’sunun gelmesini istiyorum menu dizaynını bile yaptım
             
            
              
              
              
            
                
           
          
            
            
              nasıl yapıcağım bana yardım edermisiniz
ekranı kaplamasını istemiyorum.
ekrana basitçe blit metodu ile bastığımızda biraz performans sorunu yaşıyorum
onuda nasıl yapacağız.
             
            
              
              
              
            
           
          
            
            
              Kodunuzun tamamını veya market menüsünü çalıştırmamıza yetecek kadar bir kısmını atarsanız işimiz kolaylaşır. Şu anda kodunuzu deneyemiyoruz, çünkü tek başına bir anlam ifade etmiyor.
             
            
              
              
              
            
           
          
            
            
              
def draw_QuestionMark(self, rect):
        if self.Collide == True and self.Bubble == False:
            self.screen.blit(pg.image.load("StoreQuestion.png"), (rect.x + 20, rect.top - 25))
Burada her seferinde resmi pg.image.load fonksiyonu ile tekrar diskten okuyup oluşturuyorsunuz. Performans kaybının sebebi bu olabilir. Okuma işlemini bütün program içerisine bir defa yapmanız da yeterli olacaktır. Eğer resimlerin ekrana daha hızlı çizilmesini istiyorsanız convert metodunu kullanabilirsiniz. 10000 sprite ile denediğimde FPS 13’den 20’ye çıkmıştı. Deneme için bu kodu kullanabilirsiniz:
import pygame as pg
from random import randint
from timeit import default_timer as timer
pg.init()
ekran = pg.display.set_mode((600,400))
resim = pg.image.load("resim.png")  #.convert()  ## bir de convert ile deneyin
clock = pg.time.Clock()
frame = 0
time = timer()
while True:
    ekran.fill((255,255,255))
    
    pg.event.get()
    for i in range(1000):
        ekran.blit(resim, (randint(0,600),randint(0,400)))
    pg.display.flip()
    frame += 1
    now = timer()
    if now > time+1:
        print(frame)
        frame = 0
        time = now
             
            
              
              
              
            
           
          
            
            
              market menusunu yapamadım o yüzden bu konuyu açtım
             
            
              
              
              
            
           
          
            
            
              aslında menu:
key = pg.key.get_pressed()
if key[pg.K_n] and self.collide:
   #menu açılacak 
             
            
              
              
              
            
           
          
            
            
              self.Bubble = self.sb.nextText()
Çıkıcak yazılar bittiğinde bu fonksiyon ne döndürüyor veya bir hata yükseltiyor mu? Bu yüzden sizden kodunuzu rica etmiştim, SpeechBubble sınıfını bilmiyoruz.
             
            
              
              
              
            
           
          
            
            
              class SpeechBubble(pg.sprite.Sprite):
    def __init__(self, x, y, dialogList):
        pg.sprite.Sprite.__init__(self)
        self.image = pg.image.load("SpeechBubble.png")
        self.rect = self.image.get_rect(topleft=(x, y))
        self.dialogList = chain(dialogList)
        self.textList = next(self.dialogList)
        
        
       
    def nextText(self,):
        
        try:
            self.textList = next(self.dialogList)
        except StopIteration:
            self.kill()
            return False
        return True   
            
              
        
        
    def drawText(self, rect, screen):
        textcounter = 0
        pos = rect.y + 2
        for x in range(len(self.textList)):
            MyFont = pg.font.Font("Fonts\\Typecast-Bold.ttf", 15)
            Mytext = MyFont.render("{}".format(self.textList[x]), True, (255, 0, 0))
            screen.blit(Mytext, (rect.x + 13, pos))
            pos += 12 # moves the following line down 10 pixels
             
            
              
              
              
            
           
          
            
            
              menu tasarımı yaptım isterseniz atayım
             
            
              
              
              
            
           
          
            
            
                          else:
                # if itertools loop end,Bubble = False
                self.Bubble = self.sb.nextText()
                if not self.Bubble: 
                  ... buraya girildi ise yazı baloncuğu bitmiş demek ...
             
            
              
              
              
            
           
          
            
            
              evet öyle çalışıyor eğer loop bitmiş ise bubble False oluyor yani her şey başa dönüyor ------------------------------------------------------------------------------------------ peki ben dükkan menusunun gui’sini nasıl yapıcam o konudada yardım etseniz yani demek istediğim şu şekilde sprite classı içinde yapamazmıyım
class StoreMenu(pygame.sprite.Sprite):
         def__init__(self,x,y):
                pass
             
            
              
              
              
            
           
          
            
            
              Yapabilirsiniz. Ancak burada asıl zor olan GUI’yi kodlamak zaten. Buton gibi bolca kullanacağınız nesneler için kendi sınıfınızı yazmanız kolaylık sağlar.
             
            
              
              
              
            
           
          
            
            
              peki sırf Store için ayrı bir python dosyası kullanmama gerek varmı
             
            
              
              
              
            
           
          
            
            
              yada bir menu classı içinde bütün widget ları toplamam mümkünmü
zaten sadece buton lazım
             
            
              
              
              
            
           
          
            
            
              
Bunu bana sormanıza gerek yok ki 
 Eğer ihtiyaç duyuyorsanız programınızı modüllere ayırabilirsiniz.
Eğer oyununuzun başka yerlerinde de GUI kullanacak iseniz bir UI modülü oluşturup gerekli sınıfları orada oluşturmanız iyi olabilir.
             
            
              
              
              
            
           
          
            
            
              peki ana döngüde nerde  çizdirilecek bunun içinde yardım edebilirmisiniz
döngü taslağı:
class Game:
   def__init__(self,):
          pass
  def new(self):
       pass
  def update(self):
        pass
  def run(self):
      pass
  def draw(self):
       pass
yani draw’da nasıl şöylemi
if self.store.menu == True:
   #menu çizdir
             
            
              
              
              
            
           
          
            
            
              ve konuyla alakasız ama forum kodları yazarken ki tırnak işareti farklı onu nasıl klavyede
yapabilirim zorlanıyorumda.
sürekli forumun o konusuna dönüyorum.
kopyalıyorum 
             
            
              
              
              
            
           
          
            
            
              Ctrl + Alt + , ve AltGr + , bende çalışıyor. Sizde çalışmaz ise buraya bakabilirsiniz.
             
            
              
              
              
            
           
          
            
            
              
O şekilde de yapabilirsiniz. Bu size kalmış. Şahsen be çok fazla sprite içeren bir oyun yaptığımda bir liste içerisinde çizilecek bütün spriteları tutmayı tercih ediyorum. Gerektiğinde de sprite ekleyebiliyorum veya silebiliyorum.
             
            
              
              
              
            
           
          
            
            
              bende all_sprites diye grup oluşturdum ama  o grup  oyunun kamerasına
bağlı yani eğer menuyu o gruba eklersem menu de hareket etmeye başlar
nasıl yapacağım
çünkü eğer menuyu  yanlış yerde basarsam screen.fill() metodu ile ekranı temizlediğimizde hepsi gitmiş olacak