Diskuze: Vykreslování konzole

C# .NET .NET (C# a Visual Basic) Vykreslování konzole American English version English version

Avatar
Okurkin
Člen
Avatar
Okurkin:

Zdravím.. Momentálně praciji na Pacmanovi v konzoli a můj dotaz bych chtěl směřovat směrem ohledně její vykreslování...
Mám již vytvořené bludiště, hotový pohyb v timeru...
Pokud, ale hraji, zdá se mi, že konzole nestíhá vykreslovat, protože bliká....
Nedá se tomu nějak předejít?? Aby neblikala??
Samozřejmě hra je naprosto v pohodě hratelná, akorád je to takové nepříjemné...

Ta hra je v podstatě dělaná v poli a na každý úhoz timeru se přeresluje...

Není to bohužel dělané v OOP(ještě ho neumím), ale to by nemělo vadit ne? :)

Děkuji za odpovědi... :)
S přáním krásného zbytku dne
Okurkin

 
Odpovědět 6.5.2015 15:11
Avatar
Odpovídá na Okurkin
sadlomaslox25:

predpokladam ze vykreslujes pomoci
Console.Clear();
for(x)
for(y)
Console.Write(da­ta[x,y]);
Console.Write­Line();

osobne bych radsi vykresloval jen zmenene objekty
foreach(var o in objects)
if(o.NeedRedraw)
o.Draw();

 
Nahoru Odpovědět 6.5.2015 21:15
Avatar
Okurkin
Člen
Avatar
Okurkin:

TO mě právě nenapadá jak to udělat, když to dávám do toho pole...

 
Nahoru Odpovědět 7.5.2015 9:10
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:

Možná bych zkusil text vypsat první do stringu, a teprve potom jej celý vykreslit. Při každém volání Console.Write() se kontroluje buffer, jestli není plný, a pokud je, tak se řetězec vykreslí. To znamená použití systémového přerušení. Kromě toho každé Console.WriteLine automaticky buffer vyprázdní.
Zkus si místo Console.Write vytvořit string, do kterého budeš znaky ukládat a vypsat jej až úplně na konci.
Rada1: místo stringu použij StringBuilder, ušetříš výkon, protože string je implementovaný jako neměnný (tzn. při přičtení se vytváří celý původní řetězec znovu a data se do něj musí nakopírovat - výkonostní problém. StringBuilder toto omezuje).
Rada2: namísto WriteLine (tedy jako ukončení řádku) můžeš použít escape sekvence "\r\n"

Editováno 7.5.2015 9:57
Nahoru Odpovědět 7.5.2015 9:56
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
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.