JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=04a81e19bee8220d7d973ef56ac88c42Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Kapitel 19: Blaue Sterne
Gehe zu Seite 1, 2  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
Blubb-Tec
JLI'ler


Alter: 33
Anmeldedatum: 29.03.2005
Beiträge: 171
Wohnort: Düsseldorf
Medaillen: Keine

BeitragVerfasst am: 13.06.2005, 17:19    Titel: Kapitel 19: Blaue Sterne Antworten mit Zitat

ich hab folgendes Problem:

wenn ich das Beispielprogramm von Kapitel 19 von CD kompiliere und starte, sehe ich weisse Sterne, wenn ich aber mein eigenes starte, sehe ich Blaue Sterne.

Vielleicht hatte jemand schnomal das gleiche Problem, sonst aknn ich auch Code posten.

mfg,
Blubb-Tec
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
DirectXer
Dark JLI'ler



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

BeitragVerfasst am: 13.06.2005, 17:20    Titel: Antworten mit Zitat

also code.

immer direkt code.

einfach code Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Blubb-Tec
JLI'ler


Alter: 33
Anmeldedatum: 29.03.2005
Beiträge: 171
Wohnort: Düsseldorf
Medaillen: Keine

BeitragVerfasst am: 13.06.2005, 17:49    Titel: here comes the code... Antworten mit Zitat

so, dann poste ich mal den Code:

CPP:
class Star
{
public:
   Star(void);
   void Move(void);
   void Draw(unsigned short* wlpSurface,long Pitch);

private:
   float x,y;
   float dy;
   int Length;
};

class Stars
{
public:
   Stars(int Anzahl);
   void Draw(LPDIRECTDRAWSURFACE7 lpDDSurface);

private:
   int Anzahl_Sterne;
   Star * Starfield;
};

struct STARCOLORS
{
   BYTE r;
   BYTE g;
   BYTE b;
};

STARCOLORS StarColors[4] = {
                            {128,128,128},
                            {168,168,168},
                            {200,200,200},
                            {255,255,255}
                          };

Star::Star()
{
   x  = (float)(rand()%SCR_WIDTH);
   y  = (float)(rand()%SCR_HEIGHT);
   dy = (float)(rand()%MAX_SPEED + 1);
   dy /= 10;
   Length = (int)(dy+1);
}

void Star::Move(void)
{
   y += dy;

   if(y >= SCR_HEIGHT - Length)
   {
      x  = (float)(rand()%SCR_WIDTH);

      dy = (float)(rand()%MAX_SPEED + 1);
      dy /= 10;

      y = dy;

      Length = (int)(dy + 1);
   }
}

void Star::Draw(unsigned short* wlpSurface,long Pitch)
{
   
   int index ((int)y * Pitch + (int)x);

   for(int i=0;i<Length;i++)
    {       
        wlpSurface[index + i * Pitch] = CalcColor(StarColors[i].r,
                                                  StarColors[i].g,
                                                  StarColors[i].b);
    }     


}

Stars::Stars(int Anzahl)
{
      //Den Zufallsgenerator auf einen Startpunkt, die jetzige Zeit setzen
   srand((unsigned)time(NULL));
   
   Starfield = new Star[Anzahl];

   Anzahl_Sterne = Anzahl;
   
}

void Stars::Draw(LPDIRECTDRAWSURFACE7 lpDDSurface)
{
   DDSURFACEDESC2 DDSurfDesc;
    ZeroMemory(&DDSurfDesc,sizeof(DDSurfDesc));
    DDSurfDesc.dwSize = sizeof(DDSurfDesc);
   
    // Surface sperren, damit direkter Zugriff möglich ist
    if(FAILED(lpDDSurface->Lock(NULL,&DDSurfDesc,DDLOCK_WAIT,NULL)))
    {
        Error("Kann Surface nicht sperren");
        return;
    }
    else
    {   
      WORD*  wlpSurface = (WORD*)DDSurfDesc.lpSurface;   
        DDSurfDesc.lPitch /= 2;

        for(int i=0;i<Anzahl_Sterne;i++)
        {
           
            Starfield[i].Draw((WORD*)DDSurfDesc.lpSurface,DDSurfDesc.lPitch);
            Starfield[i].Move();
        }
        // Oberfläche wieder freigeben
        lpDDSurface->Unlock(NULL);
   }
}



so, ich hoffe das reicht, sonst poste ich noch mehr

PS: sorry das da keine Kommentare sind, beim nächsten Mal gibbet welche
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 13.06.2005, 18:02    Titel: Antworten mit Zitat

Zeige mal bitte deine Funktion:

CPP:
unsigned short CalcColor(short,short,short)

_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Blubb-Tec
JLI'ler


Alter: 33
Anmeldedatum: 29.03.2005
Beiträge: 171
Wohnort: Düsseldorf
Medaillen: Keine

BeitragVerfasst am: 13.06.2005, 18:16    Titel: Antworten mit Zitat

so, hier is die funktion, nur nich unsigned short:

CPP:
void DeterminePixelFormat(LPDIRECTDRAWSURFACE7 lpDDSurface)
{
    // Pixelformat bestimmen
    DDPIXELFORMAT ddpf;
    ddpf.dwSize = sizeof(ddpf);
    lpDDSurface->GetPixelFormat(&ddpf);

    // Werte für Rot bestimmen      
    while(0 == (ddpf.dwRBitMask & 1))   
    {      
       ddpf.dwRBitMask >>= 1;
       PosRed++;   
    }   
    ShiftRed = (ddpf.dwRBitMask == 31) ? 3 : 2;   

    // Werte für Grün bestimmen   
    while(0 == (ddpf.dwGBitMask & 1))   
    {      
       ddpf.dwGBitMask >>= 1;      
       PosGreen++;   
    }   
    ShiftGreen = (ddpf.dwGBitMask == 31) ? 3 : 2;   

    // Maske für blau beginnt immer bei 0
    PosBlue = 0;
    ShiftBlue = (ddpf.dwBBitMask == 31) ? 3 : 2;           
}


// Farbe berechnen
int CalcColor(int r, int g, int b)
{     
    switch(COLOR_DEPTH)
    {
        case 32:
        case 24:
                return ((r<<16) + (g<<8) + b);
        break;
           
        case 16:
           return ((( (r) >> ShiftRed)   << PosRed)   +
                   (( (g) >> ShiftGreen) << PosGreen) +    
                 (( (b) >> ShiftBlue)  << PosBlue));
         
        default:
                return 0;
    }
}

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
JkerryZ
JLI Master Trainee



Anmeldedatum: 18.05.2004
Beiträge: 575
Wohnort: Wolfsburg
Medaillen: Keine

BeitragVerfasst am: 14.06.2005, 09:56    Titel: Antworten mit Zitat

Wenn du den Arbeitsbereich von der CD startest und kompilierst ist es kein Wunder, denn du kannst die Daten ja auf der CD nicht verändern Surprised
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Blubb-Tec
JLI'ler


Alter: 33
Anmeldedatum: 29.03.2005
Beiträge: 171
Wohnort: Düsseldorf
Medaillen: Keine

BeitragVerfasst am: 14.06.2005, 12:07    Titel: Antworten mit Zitat

ne, auch wenn ich es von festplatte kompiliere und starte, komen weisse sterne, und da kann ich schon was verändern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 14.06.2005, 13:59    Titel: Antworten mit Zitat

Hast du mal eine andere Farbtiefe ausprobiert?

BTW: Fehlt da nicht ein '='...?
CPP:
int index ((int)y * Pitch + (int)x);

_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Blubb-Tec
JLI'ler


Alter: 33
Anmeldedatum: 29.03.2005
Beiträge: 171
Wohnort: Düsseldorf
Medaillen: Keine

BeitragVerfasst am: 14.06.2005, 15:03    Titel: Antworten mit Zitat

jo, bei ich hab 16, und bei 32 hab ich nur auf der rechten Hälfte Sterne, und die sind rot und türkis Sad
das '=' hat gefehlt, aber es funzt immer noch nich Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 15.06.2005, 06:43    Titel: Antworten mit Zitat

Nee TLOP fehlt net das ist ein direkter Aufruf eines Konstruktors.

Blaue Sterne sind doch hübsch Wink
Hmm, wenn die nicht mal über den ganzen Bildschirm sind kann es sein das mit dem Pitch was net stimmt.
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 15.06.2005, 11:57    Titel: Antworten mit Zitat

und wenn du mal die Farbe der Sterne änderst?Also, so das die et normalerweise weiß sind sondern normalerweise rot? Bleiben die dann blau, oder ändern die dann imemrnoch die Farbe?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 15.06.2005, 12:37    Titel: Antworten mit Zitat

Hälfte des Screens und falsche Farbe, das hört sich ganz danach an, als ob du auf dem Screen 32-Bit- eingestellt hast, das Programm aber denkt es sind nur 16Bit und nutzt deswegen 16-Bit-Berechnungen...
Überprüfe deswegen nochmal die DirectDraw-Initialisierungsroutine.
Im Fenstermodus musst du übrigens die Farbtiefe des Screen übernehmen und kannst nicht einfach was anderes bestimmen. Im Vollbildmodus bestimmst du eh den Modus, das Programm sollte sich dann ber auch strikt daran halten, Mischmasch fürt zu deinen Problemen...
(Stell einfach mal dein Screen auf 16 Bit und teste erneut)
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Blubb-Tec
JLI'ler


Alter: 33
Anmeldedatum: 29.03.2005
Beiträge: 171
Wohnort: Düsseldorf
Medaillen: Keine

BeitragVerfasst am: 15.06.2005, 12:43    Titel: Antworten mit Zitat

also, ich weiss nich genau wo ich die Farbe ändern soll, denn wenn ich sie im

CPP:
struct STARCOLORS
{
   BYTE r;
   BYTE g;
   BYTE b;
};

STARCOLORS StarColors[4] = {
                            {128,128,128},
                            {168,168,168},
                            {200,200,200},
                            {255,255,255}
                          };



wenn ich da da jeweils die Blau-Werte alle auf 000 setzte, bleibt es trotzdem blau, wenn ich aber alle Werte auf 000 setzte, werden die Sterne chwarz, is ja klar...

und @HomeLess_PunkDrummer stimmt, hatte den Pitch nich an 32bit Farbtiefe angepasst, aber für 16bit stimmt der Pitch, und ich lass das Programm immer mit 16bit laufen....

<edit>
HIER ist mal ein link, da gibt es alle meine Porgramme, das mit den baluen Sternen ist das FarbPunkt_V1.2_BETA.rar
</edit>
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 16.06.2005, 16:06    Titel: Antworten mit Zitat

Der blaue muss bleiben, die annern müssen 0 sein:

CPP:
STARCOLORS StarColors[4] = {
                            {0,0,128},
                            {0,0,168},
                            {0,0,200},
                            {0,0,255}
                          };


Geschääänkt Very Happy

BTW, warum gehen die bis 255, wenn du doch 16 Bit hast, was D3DFMT_R5G6B5 ist?
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 16.06.2005, 17:36    Titel: Antworten mit Zitat

HomeLess_PunkDrummer hat Folgendes geschrieben:
BTW, warum gehen die bis 255, wenn du doch 16 Bit hast, was D3DFMT_R5G6B5 ist?
Der Farbconverter Shiftet die Bits später doch so, dass die überflüssigen Bits "verlorengehen"...
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
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 1, 2  Weiter
Seite 1 von 2

 
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