• 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

VPS Starter Arubacloud
0 głosów
194 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,000 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ź 342 wizyt
pytanie zadane 18 czerwca 2022 w Python przez Karp.exe Początkujący (340 p.)
+1 głos
1 odpowiedź 252 wizyt
pytanie zadane 20 czerwca 2023 w Python przez Bondrusiek Maniak (61,370 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...