JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Fehlermeldung
Gehe zu Seite Zurück  1, 2, 3, 4, 5  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 15:40    Titel: Antworten mit Zitat

so etzt wirds länger

CPP:
/*


// Headerdateien
#include "Direct3D.h"
#include "Sprite.h"
#include "ResourceManager.h"
#include "InputManager.h"





// Anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance);

// Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

// Das Fensterhandle und Instanz der Anwendung
HWND hWnd = 0;
HINSTANCE hInst = 0;

// Instanz der Klasse CDirect3D
CDirect3D Direct3D;

// Instanz der Klasse ResourceManager
CResourceManager ResourceManager;

// Klasse zur Verwaltung der Benutzereingaben
CInputManager InputManager;

// das Sprite der Spieler
CSprite Player;


// Statusbuffer zur Ausgabe der Framerate, Leben, Punkte
char StatusBuffer[256];

// Textbuffer zur Ausgabe des Textes (Game Over, Neu Starten, Pause)
char TextBuffer[256];

// Programm im Fenster oder Vollbildmodus starten
BOOL bWindowed = TRUE;


// Texturen laden und Objekte initialisieren
BOOL InitGame(void);

// Windows main-Funktion
int WINAPI WinMain(HINSTANCE hInstance,     
                   HINSTANCE hPrevInstance, 
                   LPSTR lpCmdLine,         
                   int nCmdShow)             
{   


    // Fenster erzeugen und Handle speichern
    hWnd  = CreateMainWindow(hInstance);   
    hInst = hInstance;

    // Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
    if(0 == hWnd)
    {
        MessageBox(0,"Fenster konnte nicht erzeugt werden","Fehler",MB_OK);
        return -1;
    }
 
    // Spiel intialisieren
    InitGame();

    // Struktur, in der Informationen zur Nachricht gespeichert werden
    MSG msg = { 0 };
   
    while(msg.message != WM_QUIT)
    {

        if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {             
            // In jedem Schleifendurchlauf muss die Methode Update() aufgerufen
            // werden, da in dieser Methode die Framerate berechnet wird.
            ResourceManager.Update();


            Direct3D.BeginScene();


                // Eingabe holen
                int Key = InputManager.GetInput();

                // auf Tasten reagieren
                Player.Move(Key);
               

               

                // Spieler zeichnen
                Player.Draw();
                // und animieren
                Player.Animate();

            

            Direct3D.EndScene();

        }

    }
   
    // Rückgabewert an Windows
    return 0;
}


// Fenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance)
{
    WNDCLASSEX wndClass =
    {
        sizeof(WNDCLASSEX),                                 // Größe angeben
        CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW,    // Standardstile       
        MessageHandler,                                     // Callback-Funktion
        0,                                                  // Zusätzliche Angaben
        0,                                                  // nicht benötigt
        hInstance,                                          // Anwendungsinstanz
        LoadIcon(NULL, IDI_WINLOGO),                        // Windows-Logo
        LoadCursor(NULL, IDC_ARROW),                        // Normaler Cursor
        (HBRUSH)GetStockObject(WHITE_BRUSH),                // Weißer Pinsel
        NULL,                                               // kein Menü
        "WindowClass",                                      // Der Name der Klasse
        LoadIcon(NULL, IDI_WINLOGO)                         // Windows Logo
    };

    // Klasse registrieren
    RegisterClassEx(&wndClass);

    return CreateWindowEx(NULL,                   // Keine erweiterten Stile nutzen
                          "WindowClass",          // Klassenname
                          "The Master Sword",          // Fenstertitel
                          WS_OVERLAPPEDWINDOW |   // Fenster
                          WS_VISIBLE,             // Eigenschaften
                          0, 0,                   // Anfangsposition
                          SCR_WIDTH, SCR_HEIGHT,  // und Größe des Fensters
                          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 MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    // testen, um welche Nachricht es sich handelt
    switch(msg)
    {
     // Programm beenden, wenn das Fenster
     // geschlossen wird
    case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
         break;

    case WM_KEYDOWN:
           switch(wParam)
           {
             // Bei F1 einen Screenshot speichern
             case VK_F1:   
                    Direct3D.CreateScreenshot("c:\\screenshot.bmp");
                 break;
               
             // Wenn ESC gedrückt, Programm beenden
             case VK_ESCAPE:
                     DestroyWindow(hWnd);
                  break;     
                 
           }
         break;
    }
    // Standardnachrichtenverarbeitung von Windows
    return DefWindowProc(hwnd, msg, wParam, lParam);
}

// Spiel initialisieren
BOOL InitGame(void)
{   
    // Zufallsgenerator initialisieren
    srand(timeGetTime());


    // Direct3D initialisieren
    if(!Direct3D.Init(hWnd,bWindowed))
    {
        return FALSE;
    }

   

   Direct3D.SetBackground(BACKGROUND);
    ShowCursor(FALSE);
   



    // ResourceManager initialisieren
    if(!ResourceManager.Init(Direct3D.GetDevice()))
    {
        return FALSE;
    }

    // InputManager initialisieren
    if(!InputManager.Init(hWnd,hInst))
    {
        return FALSE;
    }


   Player.Create(Direct3D.GetDevice(),&ResourceManager,48);
   Player.SetPosition(64 , SCR_HEIGHT - 256);


    int i;

    char Filename[256];

    // Grafiken für die Spieler laden
    for(i=0;i<16;i++)
    {       
        sprintf(Filename,LAUF,"Right",i+1);
        ResourceManager.AddTexture(Filename);
        Player.AddTexture(WALK_LEFT,ResourceManager.GetTexture(Filename));

        sprintf(Filename,LAUF,"Right",i+1);
        ResourceManager.AddTexture(Filename);
        Player.AddTexture(WALK_RIGHT,ResourceManager.GetTexture(Filename));

      sprintf(Filename,LAUF,"Up",i+1);
        ResourceManager.AddTexture(Filename);
        Player.AddTexture(WALK_UP,ResourceManager.GetTexture(Filename));

        sprintf(Filename,LAUF,"Down",i+1);
        ResourceManager.AddTexture(Filename);
        Player.AddTexture(WALK_DOWN,ResourceManager.GetTexture(Filename));
    }



        sprintf(Filename,LAUF,"Up",1);
        ResourceManager.AddTexture(Filename);
        Player.AddTexture(STAND,ResourceManager.GetTexture(Filename));
      

   






    return TRUE;
}






@PeaceKiller im Asterois funktioniert auch bloß der fenstemodus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 16:13    Titel: Antworten mit Zitat

Dofter
http://www.jliforum.de/board/viewforum.php?f=12

Bisschen für den Einstieg, weil es scheint als ob Du diverse Basics noch nicht so verstanden hast.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 16:51    Titel: Antworten mit Zitat

Wie meinst du des?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 17:00    Titel: Antworten mit Zitat

Dofter
Ich meine es so wie Du es sicherlich verstanden hast Wink
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 19:33    Titel: Antworten mit Zitat

@Dofter
Ach du scheiße, ich glaub, ich guck mir den Rest gar net erst an... Versteh mich jetzt bitte net falsch, aber da fehlen Unmengen an Befehlen. z.B.
Es gibt nur einen Player, wo ist denn der 2. ?

Also irgendwie kann ich dir 2 Sachen net glauben:
Dass das der Code 1. von der CD ist und 2. dass der im Fenstermodus funktionieren soll...

Also, WAS WILLST DU DA MIT DEINEM CODE BEZWECKEN?

Außerdem lädst du hier:
Dofter hat Folgendes geschrieben:
CPP:
 :arrow: sprintf(Filename,LAUF,"Right",i+1);
        ResourceManager.AddTexture(Filename);
        Player.AddTexture(WALK_LEFT,ResourceManager.GetTexture(Filename));

:arrow: sprintf(Filename,LAUF,"Right",i+1);
        ResourceManager.AddTexture(Filename);
        Player.AddTexture(WALK_RIGHT,ResourceManager.GetTexture(Filename));

2 mal die selben Animationen...

Ich weiß ehrlich net, was ich davon halten soll Confused
Wenn du mir eklärt hast, was das soll, poste doch bitte die BeginScene, EndScene und Draw-Methode

Gruß DirectXer, der irgendwie doof aus der Wäsche guckt Shocked
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 20:01    Titel: Antworten mit Zitat

Des is ja auch net genau der code.
und des mit
Zitat:
Dofter hat folgendes geschrieben:
CPP:
sprintf(Filename,LAUF,"Right",i+1);
ResourceManager.AddTexture(Filename);
Player.AddTexture(WALK_LEFT,ResourceManager.GetTexture(Filename));

sprintf(Filename,LAUF,"Right",i+1);
ResourceManager.AddTexture(Filename);
Player.AddTexture(WALK_RIGHT,ResourceManager.GetTexture(Filename));



des sin meine sprites und ich hab noch keine animation für walk_left[/cpp]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 20:11    Titel: Antworten mit Zitat

aha, dann is ja ok. Aber ich dachte, dass der Code von der CD bei JLI-Fighter net funzt, net dass dein eigenes Game net funzt. Hmmh , das macht die Sache en bisschen schwieriger, aber naja.

Also poste doch jetzt mal die 3 Funktionen.

Ach ja, zeig mir bitte auch mal deine Init-Methode von Direct3d, hab da nämlich so ne ganz dunkle Ahnung...

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 20:31    Titel: Antworten mit Zitat

CPP:
// Methoden zum Start/Beenden der Szene
void CDirect3D::BeginScene(void)
{
    m_lpD3DDevice->BeginScene();

    // aktuellen Bereich in den Backbuffer kopieren
    m_lpD3DDevice->StretchRect(m_lpSurface,
                               NULL,
                               m_lpBackBuffer,
                               0,
                               D3DTEXF_NONE);
}


void CDirect3D::EndScene(void)
{
    m_lpD3DDevice->EndScene();

    m_lpD3DDevice->Present(0,0,0,0);
}

// Direct3D initialisieren
BOOL CDirect3D::Init(HWND hWnd, BOOL bWindowed)
{
    // Direct3D-Objekt erzeugen
    m_lpD3D = Direct3DCreate9(D3D_SDK_VERSION);

    if(NULL == m_lpD3D)
    {
        // Fehler, D3D-Objekt wurde nicht erzeugt
        return FALSE;
    }

    // Parameter für den Modus festlegen
    D3DPRESENT_PARAMETERS PParams;
    ZeroMemory(&PParams,sizeof(PParams));

    PParams.SwapEffect       = D3DSWAPEFFECT_DISCARD;
    PParams.hDeviceWindow    = hWnd;
    PParams.Windowed         = bWindowed;

    PParams.BackBufferWidth  = SCR_WIDTH;
    PParams.BackBufferHeight = SCR_HEIGHT;
    PParams.BackBufferFormat = D3DFMT_A8R8G8B8;

    HRESULT hr;
   
    // Direct3D-Gerät anlegen
    if(FAILED(hr = m_lpD3D->CreateDevice(
                                 D3DADAPTER_DEFAULT,
                                 D3DDEVTYPE_HAL,
                                 hWnd,
                                 D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                 &PParams,
                                 &m_lpD3DDevice)))
    {
        // Fehler, Gerät kann nicht angelegt werden
        const char* Err = DXGetErrorDescription9(hr);
 
        DXTRACE_MSG(Err);

        return FALSE;
    }

    // Schrift erzeugen
    CreateFont();

    // Zeiger auf dem Hintergrundpuffer holen
    m_lpD3DDevice->GetBackBuffer(0,0,
                                 D3DBACKBUFFER_TYPE_MONO,
                                 &m_lpBackBuffer);

    return TRUE;
}

// Sprite zeichnen
void CSprite::Draw(void)
{
    float m_TempRot = m_Rotation * D3DX_PI / 180.0f;



    // Sprite in der passenden Animationsstufe zeichnen
    m_lpSprite->Draw(m_vAnimationSequences[m_CurrentAnimation][m_CurrentImage],
                     0,
                     &m_vScale,
                     &m_vRotationCenter,
                     m_TempRot,
                     &m_vPosition,
                     0xFFFFFFFF);


}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 20:46    Titel: Antworten mit Zitat

hmm, auf die ersten Blicke kann ich da keinen Fehler erkennen. Also, ähme, deshalb Rolling Eyes :

1. poste die Animate-Methode(wobei ich net glaube, dass es daran liegt)

2. Sag mir bitte GENAU bei welchen Programmen(egal ob von CD oder net) welcher Fehler auftritt und ob du jeweils etwas und wenn, was, verändert hast.

Ansonsten, naja ma gucken.

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 20:52    Titel: Antworten mit Zitat

CPP:
#define WALK_SEQUENCE_MIN  3
#define WALK_SEQUENCE_MAX 11

// ggf. nächste Animation anzeigen
void CSprite::Animate(void)
{
    int Framerate = m_ResManager->GetFramerate();
   
    // m_CurrentImage in Abhängigkeit der Framerate erhöhen
    m_CurrentImage += m_AnimationSpeed / (float)Framerate;

    // wenn es sich um die Laufanimation handelt, besondere Behandlung, s.o.
    if(m_CurrentAnimation == WALK_LEFT || m_CurrentAnimation == WALK_RIGHT || m_CurrentAnimation == WALK_UP || m_CurrentAnimation == WALK_DOWN)
    {
        if(m_CurrentImage >= WALK_SEQUENCE_MAX)
        {
            m_CurrentImage = WALK_SEQUENCE_MIN;
        }       
    }
    else
    {
        // ansonsten mit der Anzeige wieder beim ersten Bild beginnen
        if(m_CurrentImage >= m_vAnimationSequences[m_CurrentAnimation].size())
        {
            m_CurrentImage = 0;
        }
    }
}




Also bei dem, dann Bei Fighter und asteroids. Aber nur in VOLLBILDMODUS
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 21:02    Titel: Antworten mit Zitat

hmm, dann kann ich mir das im Moment wirklich net eklären. Wennde die Bsp. net verändert hast, müsste das eigentlich bei uns auch net funzen. Daraus kann man schließen, dass irgendwas in deinem Computer mit irgendwas in deinem Programm net klar kommt. Das könnte an deiner GraKa liegen.

Nebenbei: Bei CityHunter und mir kam auch mal en Problem vor, bei dem unser PC anders wollte als der PC der meisten anderen Member hier. Aber das war was anderes...

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 21:04    Titel: Antworten mit Zitat

Dake für die Bemühungen. Mach ich halt weiter in fenstermodus.

Dofter
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 21:27    Titel: Antworten mit Zitat

ähm, du könntest ja noch mal folgendes probieren:

setze in deine Init-Funktion von Direct3d bei den PParams vor dein bwindowed ein !; also
CPP:
PParams.Windowed = !bWindowed
oder so.

Wenn du dann auch nur den Hintergrund und keine Figuren siehst, sags mir bitte

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dofter
Junior JLI'ler


Alter: 34
Anmeldedatum: 13.03.2005
Beiträge: 99
Wohnort: Ebermannstadt
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 21:33    Titel: Antworten mit Zitat

Dann is es aba ka vollbildmodus mehr Confused
Aber ich seh das sprite wieda! Razz
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 06.05.2005, 21:37    Titel: Antworten mit Zitat

Dofter hat Folgendes geschrieben:
Dann is es aba ka vollbildmodus mehr Confused
Aber ich seh das sprite wieda! Razz


nee, ich meinte, das du dein Windowed auf TRUE setzt und nur da den !-operator vortust. Wenns dann nämlich wieder so is, hätte ich noch ne idee... Wink

Gruß DirectXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3, 4, 5  Weiter
Seite 4 von 5

 
Gehe zu:  
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

Impressum