  | 
				
					JLI Spieleprogrammierung
    
					
					
				 | 
			 
		
	
 
		 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen   | 
	 
	
	
		| Autor | 
		Nachricht | 
	 
	
		abc_d JLI Master Trainee
  
  Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
  Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 08.03.2003, 18:04    Titel: Finde keine Schleife um aktualisierung für Bildschirm einzub | 
				     | 
			 
			
				
  | 
			 
			
				Hi,
 
 
Ich hab in den letzten 2 Tagen an einem Ping-PongSpiel ohne DirectX und Spielschleife gebastelt. Allerdings stoße ich jetzt(wo ich den ball einbauen will ) auf das Problem das ich keine Schleife finde in der ich den Bildschirm aktualisieren kann(um den ball in einer gleichmässigen animation anzuzeigen), also das das zeug ohne das man ne taste drückt auf den Bildschirm aktuel gezeichnet wird:
 
 
 	  | Code: | 	 		  
 
// Anwendungsfenster erzeugen
 
HWND CreateMainWindow(HINSTANCE hInstance);
 
 
//Callback Funktion zur Nachrichtenbehandlung
 
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
 
 
// Das Fensterhandle
 
HWND hWnd = 0;
 
// Fehlermeldung ausgeben
 
BOOL Error(char* msg);
 
      
 
void Ballberechnen(HWND hWnd1);
 
 
void Render(HDC hDC);
 
 
   PixelListRechteck Rechteck1(x1,y1);
 
   PixelListRechteck Rechteck2(x2,y2);
 
 
// Windows main-Funktion
 
int WINAPI WinMain(HINSTANCE hInstance,      // Handle der Programminstanz
 
                   HINSTANCE hPrevInstance,  // Handle der letzten Instanz
 
                   LPSTR lpCmdLine,          // Kommandozeile
 
                   int nCmdShow)             // Art wie das Fenster angezeigt werden soll
 
{   
 
    // Fenster erzeugen und Handle speichern
 
    hWnd = CreateMainWindow(hInstance);
 
 
    // Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
 
    if(0 == hWnd)
 
    {
 
        MessageBox(0,"Fehler","Fehler",MB_OK);
 
        return 0;
 
    }
 
 
   // Struktur, in der Informationen zur Nachricht gespeichert werden
 
    MSG msg;
 
    // Diese Schleife läuft bis die Nachricht WM_QUIT empfangen wird
 
 
   while(true)
 
   {
 
      if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
 
      {
 
         if(msg.message==WM_QUIT)
 
         {
 
            break;
 
         }
 
            // Nachricht an die Callback Funktion senden
 
         TranslateMessage(&msg);
 
         DispatchMessage(&msg);
 
      }
 
      else
 
      {
 
 
         Ballberechnen(hWnd);
 
 
       }
 
    // Rückgabewert an Windows
 
    return 0;
 
}
 
 
 
HWND CreateMainWindow(HINSTANCE hInstance)
 
{
 
    WNDCLASSEX wndClass;                                   // WNDCLASSEX Struktur
 
  
 
    // Struktur initialisieren
 
    wndClass.cbSize        = sizeof(WNDCLASSEX);           // Größe angeben (nie vergessen!)
 
    wndClass.style         = CS_DBLCLKS | CS_OWNDC |
 
                             CS_HREDRAW | CS_VREDRAW;      // Standard Stile
 
    wndClass.lpfnWndProc   = WindowFunc;                   // Die Callback Funktion angeben
 
 
    wndClass.cbClsExtra    = 0;                            // Zusätzliche Angaben, wird nicht benötigt
 
    wndClass.cbWndExtra    = 0;                            // Zusätzliche Angaben, wird nicht benötigt
 
    wndClass.hInstance     = hInstance;                    // Anwendungsinstanz
 
 
    wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);  // Weisser Pinsel
 
    wndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);  // Normaler Cursor
 
    wndClass.lpszMenuName  = NULL;                         // Das Fenster hat kein Menü
 
    wndClass.lpszClassName = "WindowClass";                // Der Name der Klasse
 
    wndClass.hIcon         = LoadIcon(NULL, IDI_WINLOGO);  // Windows Logo
 
    wndClass.hIconSm       = LoadIcon(NULL, IDI_WINLOGO);  // Windows Logo
 
 
    RegisterClassEx(&wndClass);
 
 
    return CreateWindowEx(NULL,                      // Keine erweiterten Stile nutzen
 
                          "WindowClass",            // Klassenname
 
                          "2 Spieler Pingpong",         // Fenstertitel
 
                          WS_OVERLAPPEDWINDOW |         // Fenster
 
                          WS_VISIBLE,               // Eigenschaften
 
                          200, 100, 500, 500,             // Anfangsposition und Größe
 
                          NULL,                     // Handle des Elternfensters
 
                          NULL,                     // Handle des Menüs
 
                          hInstance,               // Anwendungsinstanz
 
                          NULL);                   // wird nicht benötigt
 
}
 
 
 
// Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht
 
// für Ihr Programm vorliegt
 
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 
{
 
 
    // testen, um welche Nachticht es sich handelt
 
    switch(msg)
 
    {
 
           //Hier keys
 
                    return 0;
 
                break;
 
    }
 
 
    // Wenn wir uns nicht um die Nachricht gekümmert haben
 
    // wird sie an die Standardnachrichtenverarbeitung von Windows
 
    // geschickt
 
    return (DefWindowProc(hwnd, msg, wParam, lParam));
 
}
 
 
void Render(HDC hDC)
 
{
 
 
    // Zeichne Rechteck und berechne/zeichne Ball
 
 
}
 
      
 
void Ballberechnen(HWND hWnd1)
 
{
 
 
//Ballbahn berechnen
 
     HDC hDC1 = GetDC(hWnd1);
 
     InvalidateRect(hWnd1,0,TRUE);   
 
         Render(hDC1);
 
      ReleaseDC(hWnd1,hDC1);
 
}
 
 
 | 	  
 
 
Wenn ich Ballberechnen(BallStatus,BallRichtung,xball,yball,hWnd,x1,y1,x2,y1); in 
 
 
    while(GetMessage(&msg,NULL,0,0))
 
	{
 
 
   		// Nachricht an die Callback Funktion senden
 
			TranslateMessage(&msg);
 
			DispatchMessage(&msg);
 
    }
 
 einbaue funktioniert das nicht und es macht es nur wenn eine nachricht forliegt.
 
 
Wenn ich es in LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) vor switch(msg) einbaue stützt das programm mit einem Schutzfehler ab. Gibt es eine möglichkeit? Wie muss ich den code umstruktureiren[/code] _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
 
 
Never touch a running System - der Systemling
  Zuletzt bearbeitet von abc_d am 10.03.2003, 19:03, insgesamt 3-mal bearbeitet | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Christian Rousselle Site Admin
  
  Alter: 49 Anmeldedatum: 19.07.2002 Beiträge: 1630
  Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 08.03.2003, 19:35    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				| Stelle mal von GetMessage() auf PeekMessage() um und baue es dann ein. | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		abc_d JLI Master Trainee
  
  Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
  Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 09.03.2003, 09:45    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Danke, jetzt muss ich nur noch die Laufbahn des Balles proggen! _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
 
 
Never touch a running System - der Systemling | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		abc_d JLI Master Trainee
  
  Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
  Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 09.03.2003, 12:39    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Jetzt hab ich ein neues Problem. Ich speicherete meine arbeit testete sie und es funktionierte. Ich aß Mittag und machte dann weiter. Dann wollte eine Framerate einbauen wie es im Buch beschrieben ist. Ich sicherte die Arbeit ab ohne das ich was verändert hatte und begann mit der Arbeit an der Spieleschleife. Eingebbaut- jetzt bekam ich plötzlich folgende Fehler:
 
 
Kompilierung läuft...
 
main.cpp
 
D:\C++\Windows\Pingpong\main.cpp(9  : error C2601: 'CreateMainWindow' : Lokale Funktionsdefinitionen sind unzulaessig
 
D:\C++\Windows\Pingpong\main.cpp(136) : error C2601: 'WindowFunc' : Lokale Funktionsdefinitionen sind unzulaessig
 
D:\C++\Windows\Pingpong\main.cpp(212) : error C2601: 'Render' : Lokale Funktionsdefinitionen sind unzulaessig
 
D:\C++\Windows\Pingpong\main.cpp(250) : error C2601: 'Ballberechnen' : Lokale Funktionsdefinitionen sind unzulaessig
 
D:\C++\Windows\Pingpong\main.cpp(310) : fatal error C1004: Unerwartetes Dateiende gefunden
 
Fehler beim Ausführen von cl.exe.
 
 
Dannach machte ich meine Arbeit wieder rückgängig aber es kammen immer noch die gleiceh Fehler
 
 
Ich hab oben beim ersten Beitrag den Code auf den Aktuellen stand gebracht damit ihr set was ich falsch habe. _________________ http://mitglied.lycos.de/sarti/linuxisevil.gif Linux is evil - get the fact.
 
 
Never touch a running System - der Systemling | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Sören JLI Master Trainee
  
 
  Anmeldedatum: 26.07.2002 Beiträge: 647 Wohnort: Bonn Medaillen: Keine 
	
  | 
		
			
				 Verfasst am: 09.03.2003, 12:51    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Sieht so aus als hättest du ein "}" vergessen! Geh noch mal alles durch und achte darauf!   | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		abc_d JLI Master Trainee
  
  Alter: 35 Anmeldedatum: 27.01.2003 Beiträge: 615
  Medaillen: Keine 
	
  | 
		 | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
  | 
   
 
  
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de 
 |