|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 14.06.2003, 16:49 Titel: Fehler im Feld gesucht... |
|
|
Also...
Könnt ihr mir bitte mal sagen wo der Fehler ist?
Hab den Code mal verkürzt, damits überblickbar wird...
(Daher falls ein } oder so fehlt lüncht mich nicht...)
Code: | int Screen[800][600][2];
int x1=295;
int y1=232;
int x2=480;
int y2=499; |
Code: |
for (int j=0; j<600;++j)
for (int k=0; k<800;++k)
{
Screen[k][j][0]=0;
}
for (int i=x1;i<=x2;++i)
{
for (int j=y1;j<=y2;++j)
{
Screen[i][j][0]=1;
}
} |
Code: | for (int i=Ship_X;i<=Ship_X+Ship_Size_X;++i)
{
for (int j=Ship_X;j<=Ship_Y+Ship_Size_Y;++j)
{
if (Screen[i][j][0]==1){Explode();}
}
} |
Das Problem ist aber, dass er die Funktion Explode() an den falschen Stellen aufruft, daher das Verhältnis von X und Y Werten stimmt nicht...
Vielleicht sieht hier einer durch und kann mir helfen... |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 14.06.2003, 17:22 Titel: |
|
|
Ich sehe in dem Quelltextausschnitten zwar nicht so schnell durch, aber was ich sehe, ist daß du ein fast 4MB-Großes IntegerFeld in 3 Dimensionen erstellst. Wie Oft sollen denn die Berechnungen aus dem 2. Codeabschnitt ausgeführt werden? Doch nicht 25 mal / Sekunde, oder?
So wie ich das sehe, versuchst du eine "Pixelgenaue" Kollisionsabfrage zu programmieren und dein Quellcodeausschnitt läßt vermuten, dass du den Abschnitt "Pixelgenaue Kollisionsabfrage" aus Christians n2. Buch nicht gelesen/verstanden hast. Du solltest mit einem Bruchteil an Informationen von dem was du derzeit benötigst auskommen.
Mein Vorschlag: Überleg dir ein anderes, besseres System.
Handelt es sich allerdings nicht um einen Kollisionsabfrage - UND - soll diese Berechnung nur sehr selten durchgeführt werden, hab ich nichts gesagt. Ein besseres System wär dann aber trotzdem angebracht. _________________
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 |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 14.06.2003, 17:33 Titel: |
|
|
Es ist keine Kollisionsabfrage... (der zweite Codeabschnitt wird sogar bloß einmal zu initialisierung ausgeführt...)
Aber egal ob es ein besseres System gibt, so muss ich doch trotzdem herrausfindenkönnen wo der fehler liegt oder?
Edit: Ist mir grad so aufgefallen: Hab mir mal das Feld in eine Datei ausgeben lassen mit dem Ergebnis, dass dort Zahlen (3,4,6) auftauchen die ich gar nicht verwende (arbeite nur mit 0 und 1) somit muss schon in der Zeile, wo ich alles null setzte also:
Code: | for (int j=0; j<600;++j)
for (int k=0; k<800;++k)
{
Screen[k][j][0]=0;
}
|
der Fehler sein... |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 14.06.2003, 20:43 Titel: |
|
|
Also gut, wenn ich das jetzt richtig verstanden hab, hast du ein Feld der Art
Code: |
0000000000000
0000000000000
0001111000000
0001111000000
0000000000000
|
und testest, ob ein bestimtes Shiff (Ship_X/Ship_Y/Ship_Size_X/Ship_Size_Y)
an diesen Block rempelt, um die Funktion Explode auszuführen.
Deine 3 Codeabschnitte oben machen jedenfalls genau das, was du willst.
Treten im Feld tatsächlich andere Ziffern auf, muß es an einer anderen Stelle noch Schreibenden zugriff auf dieses Feld geben.
Treten denn diese anderen Ziffern geordnet auf, also ist ein Muster zu erkennen?
Wo hast du noch schreib/Lese/Vergleichzugriff auf das Feld (Falscher Operater beim Vergleichen, = statt == oder so)
AFE-GmdG _________________
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 |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 15.06.2003, 07:01 Titel: |
|
|
Also danke an alle die sich bemüht haben...
Es geht jetzt...
Hab den Code nochmal geschrieben und dann gings...
Hab auch mal das Tempo getestet... Funktioniert auf nem 400 MHZ Rechner ohne Probleme.... |
|
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
|