Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

1

27.10.2007, 17:50

Flimmer Problem , help ?

Hey ich bins wieder ^.^

Also ich möchte die folgende File als Ascii Video Presentieren:

http://filebeam.com/b2eab0b23cd5df81910eb68ec5b9f393

Das Ganze wird so bewerkstelligt

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void Videosystem::read_picture(const std::string& filename, std::size_t block, std::vector<std::string>& data)
{
    std::ifstream file(filename.c_str());
    if (!file)
       cout << "could not open file";

    data.clear();
    std::ostringstream ss;
    ss << "// Task_Beginn " << std::setw(2) << std::setfill('0') << block;
    std::string start(ss.str());
    ss.str("");
    ss.clear();
    ss << "// Task_End " << std::setw(2) << std::setfill('0') << block;
    std::string line;
    bool in_data = false;
    while (std::getline(file, line))
    {
        if (in_data == false && line.find(start) != std::string::npos)
            in_data = true;
        else if (in_data == true)
        {
            if (line.find(ss.str()) != std::string::npos)
                in_data = false;
            else
                data.push_back(line);
        }
    }
}


benutzt wird es so :

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int Videosystem::Hafen_Video()
{

    std::vector< std::vector<std::string> > data;
    for (std::size_t i = 0; i < 40; ++i)
    {
        std::vector<std::string> tmp_obj;
        data.push_back(tmp_obj);
        read_picture("ASCII/boot.txt", i + 1, data.at(data.size() - 1));
    }
    while (true)
    {
        for (std::size_t i = 0; i < 40; ++i)
        {
            std::system("cls");
            std::copy(data.at(i).begin(), data.at(i).end(), std::ostream_iterator<std::string>(std::cout, "\n"));
            Sleep(8);
        }
    }
    std::cin.get();
}


Mein Problem ist nun das das ganze ziemlich stark flimmert, liegt womöglich an dem System("cls"); und an anderen Faktoren,..
Hat jemand nen Vorschlag wie ich es hinbekomme das ganze als Film auszugeben ohne das es Flackert ? Deviloper konnte mir auch nicht mehr weiter helfen :( .... hoffe ihr habt eine IDee
"Das ist ein Minkovski Raum, manche Menschen nennen ihn auch Weltraum" Prof. Dr. Jürgen Wambach, Theoretische Physik, TU Darmstadt | Meine Homepage

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

27.10.2007, 18:30

Re: Flimmer Problem , help ?

Zitat von »"Toa"«

Deviloper konnte mir auch nicht mehr weiter helfen :( ....


Dann ist es hoffnungslos!!

Versuchs mal mit nem Puffer und WriteConsoleOutput.
@D13_Dreinig

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

3

27.10.2007, 18:33

Re: Flimmer Problem , help ?

Zitat von »"David_pb"«

Zitat von »"Toa"«

Deviloper konnte mir auch nicht mehr weiter helfen :( ....


Dann ist es hoffnungslos!!

Versuchs mal mit nem Puffer und WriteConsoleOutput.


Wow du sprichst mir aber sehr viel Mut zu xD ... Ich hatte mir schon überlegt nur das neuzeichnen lassen was sich bewegt weil dann würde nur das flimmern
"Das ist ein Minkovski Raum, manche Menschen nennen ihn auch Weltraum" Prof. Dr. Jürgen Wambach, Theoretische Physik, TU Darmstadt | Meine Homepage

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

4

27.10.2007, 20:58

Zitat von »"Toa"«


Wow du sprichst mir aber sehr viel Mut zu xD

Schonmal was von Ironie gelesen?

David_pb hat dir gerade eine mögliche Lösung gepostet.
Ich muss dich aber warnen, dass es (zumindest bei mir) teilw Darstellungsprobleme gibt, wenn man öfter als alle 50-100 ms den Konsolenbuffer wechselt.

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

5

27.10.2007, 21:59

DarstellungsProbleme? Wie machen die sich bemerkbar?Das die Bilder nicht mehr richtig angezeigt werden?
"Das ist ein Minkovski Raum, manche Menschen nennen ihn auch Weltraum" Prof. Dr. Jürgen Wambach, Theoretische Physik, TU Darmstadt | Meine Homepage

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

6

27.10.2007, 22:51

Eher so, dass sich immermal kleine Verzerrungen bilden (wenn die Buffer ähnlichen Inhalt haben) oder dass es anfängt übermäßig zu flackern (starke Unterschiede im Inhalt). Is aber in jedem Fall noch besser als system("cls")

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

7

05.12.2007, 19:42

So melde mich nach langer Zeit einmal wieder ^.^

Könntest du , ich hoffe ich darf du sagen eventuell am obigen Beispiel zeigen wie du es mit nem Puffer und WriteConsoleOutput machen würdest habe keine Erfahrungen damit.

MFG Toa

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

8

05.12.2007, 20:40

Also inzwischen bin ich (wie auch schon paar andere hier im Forum) dazu übergegangen, zeichenweise nur nötige Sachen zu aktualisieren.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
HANDLE screen = CreateConsoleScreenBuffer(GENERIC_READ|GENERIC_WRITE, 0, 0, CONSOLE_TEXTMODE_BUFFER, 0);
HANDLE buffer = CreateConsoleScreenBuffer(GENERIC_READ|GENERIC_WRITE, 0, 0, CONSOLE_TEXTMODE_BUFFER, 0);
SetConsoleActiveScreenBuffer(screen);

// mit allen möglichen / nötigen Funktionen buffer befüllen, verändern etc

//...

DWORD tmp = 0;
WriteConsole(buffer, _T("bla bla"), sizeof ("bla bla") / sizeof (TCHAR), &tmp, 0)

// buffer auf screen bringen

CONSOLE_SCREEN_BUFFER_INFO info;
GetConsoleScreenBufferInfo(screen, &info);
COORD coord = {0, 0};
WORD attr1 = 0, attr2 = 0;
TCHAR sign1 = _T(' '), sign2 = _T(' ');
while (coord.X < info.dwSize.X && coord.Y < info.dwSize.Y)
{
    ReadConsoleOutputCharacter(buffer, &sign1, 1, coord, &tmp);
    ReadConsoleOutputAttribute(buffer, &attr1, 1, coord, &tmp);
    ReadConsoleOutputCharacter(screen, &sign2, 1, coord, &tmp);
    ReadConsoleOutputAttribute(screen, &attr2, 1, coord, &tmp);
    if (attr1 != attr2 || sign1 != sign2)
    {
        WriteConsoleOutputCharacter(screen, &sign1, 1, coord, &tmp);
        WriteConsoleOutputAttribute(screen, &attr1, 1, coord, &tmp);
    }
    if ((++coord.X) >= info.dwSize.X)
    {
        coord.X=0;
        ++coord.Y;
    }
}


Das Prinzip sollte halbwegs klar werden, die Umsetzung muss man nat. auf die Situation anpassen.

Toa

Alter Hase

  • »Toa« ist der Autor dieses Themas

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

9

05.12.2007, 21:11

Mh.. zum Verständniss:

Ich müsste hier :

C-/C++-Quelltext

1
WriteConsole(buffer, _T("bla bla"), sizeof ("bla bla") / sizeof (TCHAR), &tmp, 0) 


Doch einfach immer nur das Aktuelle Element des Vectors (in meinem Fall nen String) in einer Schleife übergeben nicht`?

MFG Toa[/cpp]

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

10

05.12.2007, 21:43

joa, das war einfach nur nen Beispiel, wie man was in den Buffer schreiben könnt. mit nem String wär es ca. so:

C-/C++-Quelltext

1
2
std::basic_string<TCHAR> string = _T(""); // was auch immer da drin is - mir ja egal ;)

WriteConsole(buffer, string.c_str(), static_cast<DWORD>(string.size()), &tmp, 0)

Werbeanzeige