Diskuze: Odstranění objektu třídy, Plynulost prekreslovani UserControl

C# .NET .NET (C# a Visual Basic) Odstranění objektu třídy, Plynulost prekreslovani UserControl American English version English version

Avatar
Gramli
Redaktor
Avatar
Gramli:

Zdravím,
mám vytvořenou hru, kterou vykresluju do Formuláře pomocí eventu Paint tohoto formuláře, ovšem jakmile chci jakoby hru restartovat (Vrátit se do hlavního Menu a dát nová hra), tak mi objek HerniSvet(jadro hry) vytvorený jako první pořád zůstává ve formuláři a přidá se druhý.

Case z metody pro vyber polozky hlavniho menu:

                case PolozkyNabidky.NovaHra:
                    HlavniNabidka.Hide();
                    SpustHru();
                    break;
V metode SpustHru vytvarim Objekt Herniho sveta Hra a inicializuji ho:
        private void SpustHru()
        {
            this.BackgroundImage = Invasion.Properties.Resources.Space_1;
            toolStripMenu.Visible = true;
            Class.HerniSvet Hra = new Class.HerniSvet(this, toolStripMenu, toolStripLabel_FPS, HlavniNabidka);

        }

Jak můžu ten předchozí objekt, který mi zůstává ve formuláři vymazat??
Zkoušel jsem Class.HerniSvet Hra deklarovat na začátku třídy a pak jej přepisovat (i nulovat Hra=null) v metodě SpustHru() nepomohlo.

Napadlo mě řešení vytvořit další UserControl pro vykreslování hry a při vrácení do hlavního menu ho jen zavřít, ale když jsem to vykresloval v tomto UserControlu, tak to nešlo plynule. Proč??

Chci se tedy zeptat: 1)Jak ten objekt hra vymazat?
2)Proč se hra neprekresluje tak plynule v novem UserControlu(ten UserControl je zobrazovan ve Formulari a pro vykreslovani pouzivam event Paint UserControlu) jako ve Formulaři???

Diky za odpovědi.

Odpovědět 14.3.2014 18:05
Kdo to říká ten to je...
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Gramli
David Čápka:

Máš to dost divně udělané, vůbec se v tom nevyznám a jelikož tu nemáš žádnou jinou reakci, tak asi nejsem sám. Hry se dělají většinou tak, že si vytvoříš nějakou třídu Objekt a třídu Mistnost. Místnost má v sobě list objektů. Objekt má metodu vykresli, zpracuj a nějaký obrázek. Místnost má metodu zpracujobjekty a vykresliobjekty. Instance místnosti jsou potom menu, první level, úvodní obrazovka a podobně. Jednoduše mezi nimi přepínáš. V nějakém timeru na aktuální místnosti voláš zpracuj a vykresli.

Nahoru Odpovědět 15.3.2014 9:30
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Gramli
Redaktor
Avatar
Odpovídá na David Čápka
Gramli:

Tak jak to máš napsané tak to je. HerniSvet = místnost, Objekt = Formulář.
HerniSvet obsahuje list objektů které pomocí timeru vykresluju a kontroluju kolize.. A mě jde o to, že když dám pauseGame = Timer.Stop() zobrazí se mi PaseMenu ve kterém chci dát NováHra = deklaruju nový HerniSvet(Mis­tnost), ale problém je v tom, že ten starý HerniSvet(Mistnost) se neodstraní a zůstává stále ve formuláři(objektu). Jak jsem psal minule nemůžu ten HerniSvet, který probíhal před pauseGame odstranit z paměti.

Nahoru Odpovědět 15.3.2014 11:28
Kdo to říká ten to je...
Avatar
Gramli
Redaktor
Avatar
Gramli:

Vyřešeno!
Otázky:
1)stačilo při restartu hry odstranit eventy formuláře ve kterém vykresluju
2)překresloval se UserControl i formulář najednou..

Nahoru Odpovědět  +1 24.3.2014 9:21
Kdo to říká ten to je...
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 4 zpráv z 4.