• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Pygame Problem z załadowaniem textur

Cloud VPS
0 głosów
278 wizyt
pytanie zadane 18 września 2019 w Python przez Jakub Chomicz 1 Użytkownik (840 p.)
zamknięte 19 września 2019 przez Jakub Chomicz 1

Traceback (most recent call last):
  File "D:/GRY/2/Run.py", line 87, in <module>
    G = Game()
  File "D:/GRY/2/Run.py", line 16, in __init__
    self.player = Player(self)
  File "D:\GRY\2\Sprites.py", line 18, in __init__
    self.image = self.G.ss.get_image(0,0,320,320)
AttributeError: 'Game' object has no attribute 'ss'
 

otóż taki błąd mi się wyświetla co mam zrobić pomóżcie

Tutaj kod : 

import pygame as pg
import random
from Settings import *
from Sprites import *
from os import path
from Menu import *
class Game:
    def __init__(self):
        #Inicjacja Okna Itp.
        pg.init()
        pg.mixer.init()
        self.Display = pg.display.set_mode((W,H))
        pg.display.set_caption(TITLE)
        self.clock = pg.time.Clock()
        self.menu = Button1()
        self.player = Player(self)
        self.block = Blocks
        self.running = True
        self.menu_sprites = pg.sprite.Group()
        self.all_sprites = pg.sprite.Group()
        self.blocks = pg.sprite.Group()
        self.load_data()
        self.Lvl = LVL
        self.Chapter = CHAPTER
    def load_data(self):
        self.dir = path.dirname(__file__)
        img_dir = path.join(self.dir , 'Images')
        self.ss = Spritesheet(path.join(img_dir, SPRITESHEET))

    def New(self):
        #Nowa Gra
        if self.Lvl == 0:
            self.blocks.remove(self.block)
            self.all_sprites.remove(self.player)
            self.menu_sprites.add(self.menu)
        if self.Lvl == 1:
            self.menu_sprites.remove(self.menu)
            for B in BLOCKS_LIST:
                self.block = Blocks(*B)
                self.blocks.add(self.block)
            self.all_sprites.add(self.player)
        self.Run()
    def Run(self):
        #GameLoop
        while self.running:
            self.player.Update()
            self.menu.Update()
            self.clock.tick(FPS)
            self.Events()
            self.Update()
            self.Draw()
    def Update(self):
        #Update
        self.menu_sprites.update()
        self.all_sprites.update()
        self.blocks.update()
        if self.player.vel.y > 0:
            Hits = pg.sprite.spritecollide(self.player,self.blocks,False)
            if Hits:
                self.player.pos.y = Hits[0].rect.top
                self.player.vel.y = 0
    def Events(self):
        #Eventy
        for event in pg.event.get():
            if event.type == pg.QUIT:
                self.running = False
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_ESCAPE:
                    if self.Lvl == 0:
                        self.Lvl = 1
                    else:
                        self.Lvl = 0

    def Draw(self):
        #Rysowanie
        self.Display.fill(BLACK)
        self.all_sprites.draw(self.Display)
        self.menu_sprites.draw(self.Display)
        self.blocks.draw(self.Display)
        pg.display.flip()
    def Show_Start_Screen(self):
        #Start Screen
        pass
    def Show_Go_Screen(self):
        #Game Over Screen
        pass
G = Game()
G.Show_Start_Screen()
while G.running:
    G.New()
    G.Show_Go_Screen()
pg.quit()
import pygame as pg
from Settings import *
vec = pg.math.Vector2
class Spritesheet:
    #Load Spritesheet
    def __init__(self,filename):
        self.ss = pg.image.load(filename).convert()

    def get_image(self,x,y,w,h):
        image = pg.Surface((w,h))
        image.blit(self.ss, (0,0) , (x,y,w,h))
        image = pg.transform.scale(image,(w//2,h//2))
        return image
class Player(pg.sprite.Sprite):
    def __init__(self,G):
        pg.sprite.Sprite.__init__(self)
        self.G = G
        self.image = self.G.ss.get_image(0,0,320,320)
        self.image.set_colorkey(BLACK)
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.center = (W/2,H/2)
        self.pos = vec(W/2,H/2)
        self.vel = vec(0,0)
        self.acc = vec(0,0)

    def Update(self):
        self.acc = vec(0,PLAYER_GRAVITY)
        Keys = pg.key.get_pressed()
        #Chód W Prawo
        if Keys[pg.K_d]:
            self.acc.x = PLAYER_ACC
        #Chód W Lewo
        if Keys[pg.K_a]:
            self.acc.x = - PLAYER_ACC
        #Skok
        if Keys[pg.K_SPACE] or Keys[pg.K_w]:
            self.rect.x+=1
            Hits = pg.sprite.spritecollide(self, self.G.blocks, False)
            self.rect.x -= 1
            if Hits:
                self.vel.y = -H/18

        self.acc += self.vel * PLAYER_FRICTION
        self.vel += self.acc
        self.pos += self.vel + 0.5 * self.acc

        self.rect.midbottom = self.pos

class Blocks(pg.sprite.Sprite):
    def __init__(self,x,y,w,h):
        pg.sprite.Sprite.__init__(self)
        self.image = pg.Surface((w,h))
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = 
komentarz zamknięcia: Pytanie Zostało Rozwiązane
komentarz 18 września 2019 przez tkz Nałogowiec (42,060 p.)
AttributeError: 'Game' object has no attribute 'ss'

Nie masz literówki?
komentarz 18 września 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
Nie Wiem właśnie patrzyłem wszędzie chyba :/
komentarz 18 września 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
nigdzie nie ma żadnej literówki :/ co to może być ?

1 odpowiedź

0 głosów
odpowiedź 18 września 2019 przez RafalS VIP (122,820 p.)
wybrane 19 września 2019 przez Jakub Chomicz 1
 
Najlepsza
Odwołujesz się do ss przed jego ustawieniem w load_data, który jest wołany po self.player = Player(self) a pownien być przed.
komentarz 19 września 2019 przez Jakub Chomicz 1 Użytkownik (840 p.)
Dzięki Już Działa :D

Podobne pytania

+1 głos
1 odpowiedź 573 wizyt
pytanie zadane 18 czerwca 2022 w Python przez Karp.exe Początkujący (340 p.)
+1 głos
1 odpowiedź 546 wizyt
pytanie zadane 20 czerwca 2023 w Python przez Bondrusiek Maniak (61,440 p.)

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...