IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Gramli
Tvůrce
Avatar
Gramli:14.3.2014 18:05

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 Hartinger
Vlastník
Avatar
Odpovídá na Gramli
David Hartinger:15.3.2014 9:30

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
New kid back on the block with a R.I.P
Avatar
Gramli
Tvůrce
Avatar
Odpovídá na David Hartinger
Gramli:15.3.2014 11:28

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
Tvůrce
Avatar
Gramli:24.3.2014 9:21

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
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.