August 29, 2001
Jo, nu ska jag försöka förklara:
I min 3d motor, så har jag gjort en lista(char *texturelist[128]) med alla textures som ska laddas(denna är definerad "utanför" void main( void ) ). Jag har lyckats få opengl att ladda dem efter listan, så det är inte där problemet ligger.
När man ska läsa in banorna(i .map format), så lyckas han läsa exturerna och spara dessa i texturelist. Dock endast temporärt, för när programmet går ur if-satsen(en ganska stor), så sparas endast texturelist[1](teexturelist[0] är fördefinerad till "font"). Då blir ALLTID denna AAATRIGGER, aldrig grass1, grass2 lr ngt annat, även om de är först i map filen...
Om man fördefinerar(vilket sker innan man laddar banan) aaatrigger, grass1 och grass2, så funkar det..
Det är lite svårt att förklara, men kom med lite förslag, så ska jag se om jag kan förklara ytterligarre.
Alltså: en lista med char pekare sparar endast fördefinerade värden(som INTE är definerade i en if-sats och/lr while loop) samt den andra char pekaren i den listan...
Hoppas ni inte blev alltför snurriga i huvudet 😕
August 29, 2001
Suck....Jobbigt...
Här kommer pseudo koden:
blablabla(includes etc.)
char *texurelist[128];
short texturenum = 0;
blablabla
void main( void )
{
blablabla
texturelist[0] = "font";
texturenum = 1;
fopen( map.map );
while( tills filen är slute )
char texture[256];
char *textures[10]; //10 = max antal faces/brush
ladda in en rad tills enter
if( vi har lite koordinater till en brush )
{
sök efter koordinater och textures
sscanf( ch, "( %i %i %i ) ( %i %i %i ) ( %i %i %i ) %s", en massa ints, &texture );
textures[fnum] = texture;
fnum++; //<-- antal faces i brushen
if( texture inte är itexturelist )
{
texturelist[texturenum] = texture;
texturenum++;
//här funkar det
}
//här funkar det
}
//här funkar det INTE
August 2, 2001
En gissning har inte kollat så noggrannt.
Det verkar ju som char texture [256] ligger i början i while slingan i så fall så lagrar du i texturelist en pekare till en temporär variabel eftersom det skapas en ny texture varje varv i while slingan möjligen med samma address eftersom den föregående förkastas och kan återanvändas. Om du vill kunna använda innehållet i char texture[256] efter varje varv i while slingan så måste du köra malloc i varje varv i slingan på texture typ:
texture = malloc(256);
August 2, 2001
texture är endast en temporär som kan förkastas säger du men vad är det då som pekarna i texturelist pekar på? för du kör ju
texturelist[texturenum] = texture;
texturelist innehåller ju en mängd pekare är du säker på att du allokerat ut rymme till den pekare som du sparar i texturelist?
För det låter som något problem med pekare. När den har samma innehåll i alla positioner.
Ex vis så skulle följande kod innehålla apa på båda positionerna i array eftersom strcpy skriver över hus med apa, dvs array har samma pekare på båda positionerna.
char hus[4] = {'h','u', 's',''};
char *array[2];
array[0] = hus;
strcpy(hus, "apa"); //kopiera apa dit hus pekar
array[1] = hus;
printf("%s %s", array[0], array[1]);
EDIT: Dåligt exempel ändrade.
[ Detta Inlägg ändrades av: _paul_ den 2001-10-17 20:41 ]
[ Detta Inlägg ändrades av: _paul_ den 2001-10-17 20:43 ]
1 Guest(s)