|
JLI Spieleprogrammierung
|
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
|
Verfasst am: 13.06.2005, 17:19 Titel: Kapitel 19: Blaue Sterne |
|
|
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 |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 13.06.2005, 17:20 Titel: |
|
|
also code.
immer direkt code.
einfach code |
|
Nach oben |
|
|
Blubb-Tec JLI'ler
Alter: 33 Anmeldedatum: 29.03.2005 Beiträge: 171 Wohnort: Düsseldorf Medaillen: Keine
|
Verfasst am: 13.06.2005, 17:49 Titel: here comes the code... |
|
|
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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 13.06.2005, 18:02 Titel: |
|
|
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 |
|
|
Blubb-Tec JLI'ler
Alter: 33 Anmeldedatum: 29.03.2005 Beiträge: 171 Wohnort: Düsseldorf Medaillen: Keine
|
Verfasst am: 13.06.2005, 18:16 Titel: |
|
|
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 |
|
|
JkerryZ JLI Master Trainee
Anmeldedatum: 18.05.2004 Beiträge: 575 Wohnort: Wolfsburg Medaillen: Keine
|
Verfasst am: 14.06.2005, 09:56 Titel: |
|
|
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 |
|
Nach oben |
|
|
Blubb-Tec JLI'ler
Alter: 33 Anmeldedatum: 29.03.2005 Beiträge: 171 Wohnort: Düsseldorf Medaillen: Keine
|
Verfasst am: 14.06.2005, 12:07 Titel: |
|
|
ne, auch wenn ich es von festplatte kompiliere und starte, komen weisse sterne, und da kann ich schon was verändern |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 14.06.2005, 13:59 Titel: |
|
|
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 |
|
|
Blubb-Tec JLI'ler
Alter: 33 Anmeldedatum: 29.03.2005 Beiträge: 171 Wohnort: Düsseldorf Medaillen: Keine
|
Verfasst am: 14.06.2005, 15:03 Titel: |
|
|
jo, bei ich hab 16, und bei 32 hab ich nur auf der rechten Hälfte Sterne, und die sind rot und türkis
das '=' hat gefehlt, aber es funzt immer noch nich |
|
Nach oben |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 15.06.2005, 06:43 Titel: |
|
|
Nee TLOP fehlt net das ist ein direkter Aufruf eines Konstruktors.
Blaue Sterne sind doch hübsch
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 |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 15.06.2005, 11:57 Titel: |
|
|
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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 15.06.2005, 12:37 Titel: |
|
|
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 |
|
|
Blubb-Tec JLI'ler
Alter: 33 Anmeldedatum: 29.03.2005 Beiträge: 171 Wohnort: Düsseldorf Medaillen: Keine
|
Verfasst am: 15.06.2005, 12:43 Titel: |
|
|
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 |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 16.06.2005, 16:06 Titel: |
|
|
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
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 |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 16.06.2005, 17:36 Titel: |
|
|
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 |
|
|
|
|
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
|