JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Fehler im Feld gesucht...

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
underberg
JLI'ler



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 14.06.2003, 16:49    Titel: Fehler im Feld gesucht... Antworten mit Zitat

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... Surprised
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


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

BeitragVerfasst am: 14.06.2003, 17:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
underberg
JLI'ler



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 14.06.2003, 17:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


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

BeitragVerfasst am: 14.06.2003, 20:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
underberg
JLI'ler



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 15.06.2003, 07:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
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