Zniceni tridy – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zniceni tridy – Python – Fórum – Programujte.comZniceni tridy – Python – Fórum – Programujte.com

 

maral
~ Redaktor
0
Newbie
15. 9. 2008   #1
-
0
-

Nevite nekdo jak se da trida znicit zevnitr? Treba mit nejakou metodu destroy, a ta zavola zniceni te tridy.
Pac mam hru, ktera vytvori novou tridu na menu, pak novou na hru, a kdyz prohraju a vrati se mi to do menu, tak mi ta trida cele hry zustane, a kdyz opakuju hru nekolikrat za sebou, tak mi neprijemne roste pamet. Zkousel jsem treba

class Trida:

def __init__(self):
self.data=2
def destroy(self):
del self
Ale nejak to nezabira... Nevite jak na to?

Nahlásit jako SPAM
IP: 85.132.159.–
bukaj0
Věrný člen
15. 9. 2008   #2
-
0
-

maral
jak se da trida znicit
Co to je za blbost ničit třídu? :o)

ktera vytvori novou tridu na menu, pak novou na hru […]
Ale fuj, jestli děláš opravdu tohle! Na začátku nadefinuješ třídy a jejich metody. A pak vytváříš instance tříd a těm nastavuješ vlastnosti. Pokud už objekt (instanci třídy) využívat nepotřebuješ, přestaneš ji referencovat a paměť se uvolní sama.

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
maral
~ Redaktor
0
Newbie
15. 9. 2008   #3
-
0
-

No, tak jinak. Mam tridu Menu a tridu StartLevel. Tim, ze vytvorim instanci Menu, spustim celou aplikaci, a jednou z metod teto instance nasledne vytvorim i StartLevel, tedy pokud si to uzivatel zvoli. No a tim ze to mam uvnitr jedne z metod, tak to proste nemuzu nijak znicit. Mozna to neni spravne slovo... No, pokud se mi udela StartLevel, tak uz jsem ve hre, hraju hraju, prohraju a tim se vratim do menu tak, ze se vytvori dalsi instance Menu... Jenze ta stara tam porad je... A kdyz zase zapnu hru, tak se mi vytvori zas nova, i s nactenim obrazku atd, takze ta pamet docela narusta... No, pokud to nejde, tak to samozrejme muzu zase cely prekopat, ale snadnejsi snad bude tu pamet "uvolnit" nejak zevnitr...

Nahlásit jako SPAM
IP: 85.132.159.–
kokot
~ Anonymní uživatel
2 příspěvky
16. 9. 2008   #4
-
0
-

piča

Nahlásit jako SPAM
IP: 77.78.88.–
KIIV
~ Moderátor
+43
God of flame
16. 9. 2008   #5
-
0
-

co otestovat jestli neni uz vytvorena ta trida a pripadne ni vyresetovat? proc zakladat to co uz je ... ?

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
bukaj0
Věrný člen
16. 9. 2008   #6
-
0
-

maral
Tim, ze vytvorim instanci Menu, spustim celou aplikaci, a jednou z metod teto instance nasledne vytvorim i StartLevel
Zajímavý návrh aplikace :o)

No, pokud se mi udela StartLevel, tak uz jsem ve hre, hraju hraju, prohraju a tim se vratim do menu tak, ze se vytvori dalsi instance Menu...
Chápu správně, že ty vytváříš novou instanci Menu ve stejné metodě, kde vytváříš instanci StartLevel?

Nahlásit jako SPAM
IP: 85.70.13.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
maral
~ Redaktor
0
Newbie
17. 9. 2008   #7
-
0
-

No, radsi bych to uzavrel, vyresil jsem to jinak.
To Bukaj: Jestli chces, poslu ti ten zdrojak

Nahlásit jako SPAM
IP: 85.132.159.–
Spectator0
Věrný člen
17. 9. 2008   #8
-
0
-

To maral : Hoď ho sem, celkem by mě to také zajímalo.

Nahlásit jako SPAM
IP: 89.176.230.–
. . .
maral
~ Redaktor
0
Newbie
19. 9. 2008   #9
-
0
-

Tak ja sem hodim rovnou zip s celou prubeznou hrou... Ty tridy jsou konkretne z main.py.
Puvodne jsem mel neco jako

import pygame


class Startlevel:
def __init__(self):
#tady je kod pro vytvoreni hry
self.mainloop() #spoustim smycku hry

def mainloop(self):
while 1:
#tady jsou vsechna prekreslovani podminky atd.
if event.key == K_ESCAPE:
self.destroy()
def destroy(self):
del self #tady jsem chtel smazat tuto tridu, ale nejde to
Menu() #prejdu zase do Menu()

class Menu():
def __init__(self):
#prekreslim celou obrazovku na menu
#vytvorim menu zatim se dvemi polozkami - start game a quit game
#pokud uzivatel zmacke start game, spusti se self.start()
def start(self):
del self #opet jsem to chtel smazat, ale nic
Startlevel()

if __name__ == "__main__":
pygame.init()
Menu()


No, vyresil jsem to tak, ze pokud bylo escape, tak jsem dal return z mainloopu a vlastne mi to smazalo tridu, a dale to pokracovalo v te funkci start v Menu. Tam jsem teda pridal opetovne prekresleni a pak navrat z funkce, a zase se to vratilo do smycky Menu. Mozna to neni nejstastneji popsane, ale kdyz si to trochu prohlidnete, tak to pochopite. Jo a ta hra neni jeste hotova, takze to, ze protivnici muzou utect z hraci plochy nebo jejich ubohou inteligenci, zatim moc nekritizujte, je to jen beta.

Nahlásit jako SPAM
IP: 85.132.159.–
Spectator0
Věrný člen
19. 9. 2008   #10
-
0
-

To maral : Ja nejak nechapu ten system toho menu a startlevelu. Mam pocit, že tudy cesta nevede :smile17:

Nahlásit jako SPAM
IP: 89.176.230.–
. . .
mallox0
Návštěvník
17. 6. 2009   #11
-
0
-

opravdu nechapu jak se nekdo snazi programovat hru, kdyz nema ani zakladni znalosti jazyka, ve kterem "programuje" a programovani jako takoveho..
1. kazda funkce vykonava JEN jednu akci
2. bod 1 patri i pro tridy - tzn. ze trida Clovek NEMA funkci ridimAuto, ale trida Auto ma funkci jeRizenoNekym()...

takovy zpusobem musi byt navrzeno i GUI hry..menu je menu, level je leve..nikde to nevolas spolecne v jedne funkci..

to na co se pravdepodobne ptas je funkce __del__(self).. ta je volana kdyz se uvodlnuje instance z pameti, v te muzes provest uklid..
jinak uklid se provadi automaticky kdyz je potreba, je zbytecne neefektini explicitne zadat python o uvolnovani pameti.

poud potrebujes nejakou jednu instanci tridy Menu (s obrazky atp., ci jakoukoliv jinou), tak si vytvor wrapper.
Rekneme tridu Hra, a ta bude mit stavy - menu, hraciPlocha..atp.. a to budes dle potreby zobrazovat..pri nacteni zobrazis menu..po vyberu zmenis na zobrazeni hraci plochy..kdyz prohrajes..opet zobrazis menu..pote vynulujes hraci plochu a hrajes znovu..
je to znovupouzitelne, citelne a hlavne se v tom zorientujes lip nez v tom co pises ted

precti si neco o navrhovyv vzorech (design patterns)

Nahlásit jako SPAM
IP: 85.161.129.–
linux v grafice je boj
forum.ubuntu.cz
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 2 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý