Diskuze: Odstranění instance

C# .NET .NET (C# a Visual Basic) Odstranění instance American English version English version

Avatar
magic44
Redaktor
Avatar
magic44:

Ahoj :), dělám hru a z důvodu spousty levlů, jsem se rozhosl, že bude jen jedna načítací třída (jeden GameScreen- viz. zdejší engine). První načtení funguje, ale když chci načíst novou mapu, tak mi nějak nejde vymazat minulí obsah, ani načíst nový :). Nešlo by nějak zničit celou instanci a založit jí znova?

Odpovědět 29.5.2014 11:23
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
Gramli
Redaktor
Avatar
Gramli:

Podobný problém jsem řešil, ta třída kterou chceš smazat je form nebo klasická třída?
Pokud je to formulář vymaž mu všechny eventy, proměné. (promena = null, event -= metoda)
Pokud je to klasická třída, tak by mohlo stačit ji deklarovat i inicializovat v např. tlačíku pro spuštění a když ta třída udělá co měla vynuluj ji promene.

Editováno 29.5.2014 11:45
Nahoru Odpovědět 29.5.2014 11:45
Kdo to říká ten to je...
Avatar
Ľuboš Čurgó
Redaktor
Avatar
 
Nahoru Odpovědět 29.5.2014 11:55
Avatar
magic44
Redaktor
Avatar
Odpovídá na Ľuboš Čurgó
magic44:

A jak se takovy destruktor napise?

Nahoru Odpovědět 29.5.2014 11:59
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
Gramli
Redaktor
Avatar
Odpovídá na Ľuboš Čurgó
Gramli:

Destruktor je ale volán automaticky.

Editováno 29.5.2014 12:27
Nahoru Odpovědět 29.5.2014 12:25
Kdo to říká ten to je...
Avatar
Ľuboš Čurgó
Redaktor
Avatar
Odpovídá na magic44
Ľuboš Čurgó:
class Test
    {
        ~Test()
        {
            Console.WriteLine("Zavolanie destruktora");
        }
    }

Ale to co som ti poradil je blbost v tvojom pripade, pouzi Gramilovu radu.

:edit, ano destruktor sa vola implicitne, moja chyba

Editováno 29.5.2014 12:45
 
Nahoru Odpovědět 29.5.2014 12:40
Avatar
magic44
Redaktor
Avatar
magic44:

Nevim, jestli destruktor pomůže, protože v té třídě načítám modely, obrázky atd. a je potřeba aby se vždy po dohraní daného levelu "od-načetly" (aby modely z 1. levelu nepřekážely v levelu druhém).

Nahoru Odpovědět 29.5.2014 12:42
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
Martin
Člen
Avatar
Martin:

a metodu která vždy na začátku levelu nastavila proměný na výchozí stav (poprvé to udělá construktor) a pak na začátku nového levelu zavolat metodu.

Nahoru Odpovědět 29.5.2014 12:59
Je jedno co děláš, ale záleží jak dobře to umíš prodat.
Avatar
magic44
Redaktor
Avatar
Odpovídá na Martin
magic44:

To sice jo, ale tady jde o modely, ne o proměnné.

Nahoru Odpovědět 29.5.2014 13:13
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
Odpovídá na magic44
Libor Šimo (libcosenior):

Pre každý level sú iné moduly, alebo sa len na daný level modifikujú?

Nahoru Odpovědět 29.5.2014 13:21
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Luboš Běhounek (Satik):

Jen vytvoříš novou instanci třídy Level (nebo Map/GamseScreen nebo jak se jmenuje), tím ta stará automaticky zanikne, pokud na ni neodkazuješ odnikud jinud (resp. je ti to fuk, jestli někde v paměti ještě chvíli bude nebo se smaže hned :) ).

Editováno 29.5.2014 13:28
Nahoru Odpovědět 29.5.2014 13:27
:)
Avatar
magic44
Redaktor
Avatar
Odpovídá na Libor Šimo (libcosenior)
magic44:

Level se skládá z podlah a zdí a každý level je má jinak poskládané.

Nahoru Odpovědět 29.5.2014 13:35
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
Gramli
Redaktor
Avatar
Odpovídá na magic44
Gramli:

Nevím jak to máš řešené, ale ideální je to mít tak, že ve třídě kde vykresluješ máš instanci třídy level, kterou jen přepisuješ. Když máš další level tak té instanci přiřadíš nový level a překreslíš.

Re: Satik
To nemusí být pravda, měl jsem s tím problém, že jsem vykresloval nový level a pod ním byl ještě starý:) (Ale to se týkalo formuláře, což byla třída která vykreslovala)

Nahoru Odpovědět 29.5.2014 13:48
Kdo to říká ten to je...
Avatar
magic44
Redaktor
Avatar
Odpovídá na Luboš Běhounek (Satik)
magic44:

Když po ukončení levelu GameScreen odeberu a pak ho na začátku znova založím, tak to funguje :) díky moc všem. Sice se teď nevykreslují ostatní GameScreen (pro pausu atd.), ale tohle je velký pokrok :)

Editováno 29.5.2014 14:01
Nahoru Odpovědět 29.5.2014 14:00
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
magic44
Redaktor
Avatar
Nahoru Odpovědět 29.5.2014 14:02
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
Odpovídá na Gramli
Luboš Běhounek (Satik):

To netuším, jak jsi to měl udělané :D

Nahoru Odpovědět 29.5.2014 14:19
:)
Avatar
Michal Žůrek (misaz):

není nejjednoduší cesta udělat tu proměnnou/attribut nullable a nastavit ho na null? Pak přece ztratí všechny refertence a až bude třeba bude z paměti odstraněn.

Nahoru Odpovědět 29.5.2014 14:21
Nesnáším {}, proto se jim vyhýbám.
Avatar
Luboš Běhounek (Satik):

Uh.
Použití Nullable tu nedává moc smysl, to se používá, když potřebuješ mít možnost uložit Null u něčeho, kde to běžně nejde - např. číslo, bool, structy apod., :)

Obvykle ve hrách je nějaká třída Game, která všechno zastřešuje, a ta má u sebe odkaz na Level.
Pokud měním Level, tak stačí jen vytvořit novou instanci Levelu a nahradit jím tu původní, ta původní zanikne, až si jí všimne GC (neměl bys na tu instanci Levelu odkazovat nikde jinde).

Editováno 29.5.2014 14:29
Nahoru Odpovědět  +1 29.5.2014 14:28
:)
Avatar
Gramli
Redaktor
Avatar
Nahoru Odpovědět 29.5.2014 14:35
Kdo to říká ten to je...
Avatar
magic44
Redaktor
Avatar
magic44:

Tak nakonec jsem to udělal Satikovou metodou :D (nová instance), a problém s vykreslováním ostatních GameScreen taky vyřešen. Díky moc všem :)

Nahoru Odpovědět 29.5.2014 14:50
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
xxxvodnikxxx
Člen
Avatar
xxxvodnikxxx:

Rozkouskuj si to..
Co máš v konstruktoru co ti nastavuje "defaultní stav" si vyhoď do vedlejší metody- při nejlepším private pokud to děláš v daný třídě /formu (všechno je v podstatě třída).

No a potom při načtení novýho levelu vždycky nejdřív zavoláš tu co ti nastaví na default a následně nějakou další která si vykreslí spec. level

Tak něco? ;)

Nahoru Odpovědět 29.5.2014 18:04
Unix- svět, kde chcete být nulou :) (UID)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 21 zpráv z 21.