Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





MI 1º juego con SDL, no se ejecuta

Iniciado por SPARTANVS, 10 de Mayo de 2008, 09:43:16 AM

« anterior - próximo »

SPARTANVS

Wenas, al fin, termine mi juego, pero aun no puedo dedicarselo a nadie, ya que no funcion  :cry:  :cry:

Bueno estaba terminando el programa arreglando los fallitos (en un principio me dio 37 y 2 warning) y buen los arregle.....y ejecute. nada ser abria y se iba en un segundo sin mostrar nada. El caso es que me acorde que tenia que ponerle la carpeta de las imagenes en el fichero "debug" que es donde esta el ejecutable. pero lo he puesto y sigue igual.

Voy a poner el codigo entero, porque nose lo que pasa ni tengo idea alguna de que parte del programa puede ser. Y bueno asi los novatos como yo aprevechan  :shock:

MUCHAS GRACIAS



/***************
_AntiPlanes 1.0
_Make by Juan Manuel Amador Olivares &
***************/

// Librerias necesarias para poder llamar las funciones del juego
#include <stdio.h>
#include <stdlib.h>
#include <SDL.h>
#include <time.h>

/****
Constantes
****/
#define WIDTH 400 // Anchura del mapa
#define HEIGHT 535 // Altura del mapa

#define MOVCANON 2 // Movimiento del cañon antiereo
#define CANONCICLO 3 // Numero de ciclos que tiene que pasar para que el cañon pueda moverse

#define MAXPLANES 150 // Numero maximo de aviones enemigos
#define MAXEXP 50 // Numero maximo de explosiones
#define MAXSHOT 250 // Numero maximo de disparos del cañon antiaereo

#define UPPOS 10 // Numero de ciclos que tiene que pasar para que se actualice la posicion de los aviones
#define MOVPLANE 5 // Movimiento de los aviones

#define PLANEBYCICLO 6 // Numero de aviones que son creados por ciclo
#define NEWPLANE 5 // Numero de ciclos que tiene que pasar para que se creen mas aviones enemigos

#define UPEXP 5 // Numero de ciclos que tiene que pasar para que se actualice el frame de las explosiones

#define CICLOSHOT 15 // Numero de ciclos que tiene que pasar para que se puedan crear nuevos disparos

#define UPPOSSHOT 10 // Numero de ciclos que tiene que pasar para que se actualice la posicion de los aviones
#define MOVSHOT 5 // Movimiento de los aviones

/****
Estructuras de los diferentes elementos del juego
****/
// Estructura del cañon antiaereo
struct canonstruct
{
SDL_Rect atrib;
} canon;

// Estrcutura de los aviones enemigos
struct enemyplanes
{
SDL_Rect atrib;
int estado;
} planes[MAXPLANES];

// Estructura de las explosiones
struct explosions
{
SDL_Rect atrib;
int frame;
int LastUpCiclo;
int estado;
} exp[MAXEXP];

// Estructura de los disparos
struct antishot
{
SDL_Rect atrib;
int estado;
} shot[MAXSHOT];


/****
Declaracion de superficies y variables
****/
SDL_Rect coordscreen;
SDL_Surface *screen; // Superficie de la pantalla. Con esta superficie se nicializara el modo de video y es la que se renderizara
SDL_Surface *background; // Superficie de el mapa del fondo
SDL_Surface *canonsurp; // Superficie de el cañon antiaereo
SDL_Surface *plane; // Superficie de el avion enemigo
SDL_Surface *shotsurp; // Superficie de el disparo del cañon
SDL_Surface *expsurp[5]; // Superficie de las explosiones de los enemigos
int quit = 0; // Variable usada para el controlar el bucle del juego (Game Loop)
int i = 0; // Variable usada para los bucles del juego
int v = 0; // Variable usada para los bucles del juego
int n = 0; // Variable usada para los bucles del juego
int b = 0; // Variable usada para los bucles del juego
int ciclo = 0; // Variable que contiene el numero de ciclos que ha dado el juego
int ciclouppos = 0; // Variable que guarda el numero de ciclos que llevaba el juego la ultima vez que actualizo la posicion de los aviones
int ciclocreate = 0; // Variable que guarda el numero de ciclos que lleva el juego desde la ultima vez que creo nuevos aviones
int canonppos = 0; // Variable que guarda el numero de ciclos que lleva el juego desde la ultima vez que se movio el cañon
int shotuppos = 0; // Variable que guarda el numero de ciclos que lleva el juego desde la ultima vez que se creo un disparo
int shotpos = 0; // Variable que guarda el numero de ciclos que lleva el juego desde la ultima vez que se actualizo el movimiento de los disparos
Uint8 *keyboard; // Variable utilizada para guardar el estado del teclado

int ini_milisegundos; // Variable utilizada para el control de tiempo de renderizado
int fin_milisegundos; // Variable utilizada para el control de tiempo de renderizado
int frametime; // Variable utilizada para el control de tiempo de renderizado

/***
Funciones de control de tiempo por frame
***/
void resetTimeBase()
{
ini_milisegundos=SDL_GetTicks();
}

int CurrentTime()
{
fin_milisegundos=SDL_GetTicks();
return fin_milisegundos-ini_milisegundos;
}


/****************
Funcion principal
****************/
int main (int argc, char *argv[])
{
atexit (SDL_Quit);


//Iniciar SDL
if (SDL_Init (SDL_INIT_VIDEO) < 0)
{
printf ("No se pudo iniciar SDL: %s\n", SDL_GetError());
exit(1);
}


//Activamos el modo de video
screen = SDL_SetVideoMode (WIDTH,HEIGHT,24, SDL_HWSURFACE);
if (screen = NULL)
{
printf ("No se puede inicializar el modo gráfico: %s\n", SDL_GetError ());
exit (1);
}

/****
Cargamos los graficos del juego en las superficies declaradas
****/
// Imagen de fondo
background = SDL_LoadBMP("background\\background.bmp");
if (background == NULL)
{
printf ("No se pudo cargar el grafico: %s\n", SDL_GetError());
exit(1);
}

// Cañon antiaereo
canonsurp = SDL_LoadBMP("canon\\canon.bmp");
if (canonsurp == NULL)
{
printf ("No se pudo cargar el grafico: %s\n", SDL_GetError());
exit(1);
}
SDL_SetColorKey(canonsurp,SDL_SRCCOLORKEY|SDL_RLEACCEL,SDL_MapRGB(canonsurp->format,0,0,0)); // Determinamos la transparencia de la superficie shotsurp como 0,0,0

// Aviones enemigos
plane = SDL_LoadBMP("enemyplanes\\plane.bmp");
if (plane == NULL)
{
printf ("No se pudo cargar el grafico: %s\n", SDL_GetError());
exit(1);
}
SDL_SetColorKey(plane,SDL_SRCCOLORKEY|SDL_RLEACCEL,SDL_MapRGB(plane->format,0,0,0)); // Determinamos la transparencia de la superficie shotsurp como 0,0,0

// Disparo del cañon antiaereo
shotsurp = SDL_LoadBMP("canon\\shot\\shot.bmp");
if (shotsurp == NULL)
{
printf ("No se pudo cargar el grafico: %s\n", SDL_GetError());
exit(1);
}
SDL_SetColorKey(shotsurp,SDL_SRCCOLORKEY|SDL_RLEACCEL,SDL_MapRGB(shotsurp->format,255,255,255)); // Determinamos la transparencia de la superficie shotsurp como 255,255,255

// 1º imagen de la explosion
expsurp[1] = SDL_LoadBMP("explosion\\exp1.bmp");
if (expsurp[1] == NULL)
{
printf ("No se pudo cargar el grafico: %s\n", SDL_GetError());
exit(1);
}
SDL_SetColorKey(expsurp[1],SDL_SRCCOLORKEY|SDL_RLEACCEL,SDL_MapRGB(expsurp[1]->format,0,0,0)); // Determinamos la transparencia de la superficie shotsurp como 0,0,0

// 2º imagen de la explosion
expsurp[2] = SDL_LoadBMP("explosion\\exp2.bmp");
if (expsurp[2] == NULL)
{
printf ("No se pudo cargar el grafico: %s\n", SDL_GetError());
exit(1);
}
SDL_SetColorKey(expsurp[2],SDL_SRCCOLORKEY|SDL_RLEACCEL,SDL_MapRGB(expsurp[2]->format,0,0,0)); // Determinamos la transparencia de la superficie shotsurp como 0,0,0

// 3º imagen de la explosion
expsurp[3] = SDL_LoadBMP("explosion\\exp3.bmp");
if (expsurp[3] == NULL)
{
printf ("No se pudo cargar el grafico: %s\n", SDL_GetError());
exit(1);
}
SDL_SetColorKey(expsurp[3],SDL_SRCCOLORKEY|SDL_RLEACCEL,SDL_MapRGB(expsurp[3]->format,0,0,0)); // Determinamos la transparencia de la superficie shotsurp como 0,0,0

// 4º imagen de la explosion
expsurp[4] = SDL_LoadBMP("explosion\\exp4.bmp");
if (expsurp[4] == NULL)
{
printf ("No se pudo cargar el grafico: %s\n", SDL_GetError());
exit(1);
}
SDL_SetColorKey(expsurp[4],SDL_SRCCOLORKEY|SDL_RLEACCEL,SDL_MapRGB(expsurp[4]->format,0,0,0)); // Determinamos la transparencia de la superficie shotsurp como 0,0,0

// 5º imagen de la explosion
expsurp[5] = SDL_LoadBMP("explosion\\exp5.bmp");
if (expsurp[5] == NULL)
{
printf ("No se pudo cargar el grafico: %s\n", SDL_GetError());
exit(1);
}
SDL_SetColorKey(expsurp[5],SDL_SRCCOLORKEY|SDL_RLEACCEL,SDL_MapRGB(expsurp[5]->format,0,0,0)); // Determinamos la transparencia de la superficie shotsurp como 0,0,0


srand (time(NULL)); // Para la semilla de rand()

/****
Inicializacion de variables del juego
****/
// Iniciamos las variables de la pantalla
coordscreen.w = screen->w;
coordscreen.h = screen->h;
coordscreen.x = 0;
coordscreen.y = 0;
// Iniciamos las varibles del cañon
canon.atrib.w = canonsurp->w;
canon.atrib.h = canonsurp->h;
canon.atrib.x = WIDTH/2-canon.atrib.w/2;
canon.atrib.y = HEIGHT-canon.atrib.h;

// Iniciamos las variables de los aviones enemigos
for (i=1; i<=MAXPLANES; i++)
{
planes[i].atrib.w = plane->w;
planes[i].atrib.h = plane->h;
planes[i].atrib.x = 0-planes[i].atrib.w;
planes[i].atrib.y = 0;
planes[i].estado = 0;
}

// Iniciamos las variables de las explosiones
for (i=1; i<=MAXEXP; i++)
{
exp[i].atrib.w = expsurp[1]->w;
exp[i].atrib.h = expsurp[1]->h;
exp[i].atrib.x = 0;
exp[i].atrib.y = 0;
exp[i].frame = 0;
exp[i].LastUpCiclo = 0;
exp[i].estado = 0;
}

// Iniciamos las variables de los disparos del cañon antiaereo
for (i=1; i<=MAXSHOT; i++)
{
shot[i].atrib.w = shotsurp->w;
shot[i].atrib.h = shotsurp->h;
shot[i].atrib.x = 0;
shot[i].atrib.y = canon.atrib.y-shot[i].atrib.h;
shot[i].estado = 0;
}



/********
Game Loop
********/

while (!quit)
{
/***************
Entrada de datos
***************/

SDL_PumpEvents(); // Obtiene mapa del estado actual del teclado
keyboard=SDL_GetKeyState(0);

if(keyboard[SDLK_LEFT]) // Flecha izquierda
{
if (ciclo == canonppos + CANONCICLO)
{
canonppos = ciclo;
canon.atrib.x -= MOVCANON;
}
}

if(keyboard[SDLK_RIGHT]) // Flecha derecha
{
if (ciclo == canonppos + CANONCICLO)
{
canonppos = ciclo;
canon.atrib.x += MOVCANON;
}
}
if(keyboard[SDLK_RCTRL]) // Tecla CTRL
{
if (ciclo == canonppos + CICLOSHOT)
{
shotuppos = ciclo;
while (v == 0)
{
v++;
if (shot[v].estado == 0)
{
shot[v].estado = 1;
shot[v].atrib.x = canon.atrib.x;

v = 1;
}
}
v = 0;
}
}
if(keyboard[SDLK_ESCAPE]) {quit=1;} // Tecla ESC


// Se actualiza la posicion de los disparos
if (ciclo == shotpos + UPPOSSHOT)
{
shotpos = ciclo;
for (i=1; i<=MAXSHOT; i++)
{
if (shot[i].estado == 1)
{
shot[i].atrib.y -= MOVSHOT;
}
}
}

// Se comprueba y elimina los disparos que han salido de la pantalla
for (i=1; i<=MAXSHOT; i++)
{
if (shot[i].estado == 1)
{
if (shot[i].atrib.y + shot[i].atrib.h == 0)
{
shot[i].estado = 0;
}
}
}




// Se actualiza la posicion de los aviones enemigos
if (ciclo == ciclouppos + UPPOS) // Si han pasado los ciclos dados por UPPOS
{
ciclouppos = ciclo;
for (i=1; i<=MAXPLANES; i++)
{
if (planes[i].estado == 1)
{
planes[i].atrib.y += MOVPLANE;
}
}
}

// Se comprueba y elimina los aviones que han salido de la pantalla
for (i=1; i<=MAXPLANES; i++)
{
if (planes[i].estado == 1)
{
if (planes[i].atrib.y + planes[i].atrib.h == HEIGHT)
{
planes[i].estado = 0;
}
}
}

// Se crean mas aviones enemigos
if (ciclo == ciclocreate + NEWPLANE)
{
ciclocreate = ciclo;
for (i=1; i<=PLANEBYCICLO; i++)
{
while (v == 0)
{
n++;
if (planes[n].estado == 0)
{
planes[n].atrib.x = 1 + rand() % WIDTH; /*numero aleatorio*/
planes[n].estado = 1;

v = 1;
}
}

v = 0; // Para que en cada ciclo se repita el bucle
}
}

// Aqui va la creacion de explosiones, el cual va dentro de deteccion de colisiones
for (i=1; 1<=MAXPLANES; i++)
{
if (planes[i].estado == 1)
{
for (n=1; n<=MAXSHOT; n++)
{
if (shot[n].estado == 1)
{
if ( ((planes[i].atrib.x + planes[i].atrib.w) > shot[n].atrib.x) && ((planes[i].atrib.y + planes[i].atrib.h) > shot[n].atrib.y) && ((shot[n].atrib.x + shot[n].atrib.w) > planes[i].atrib.x) && ((shot[n].atrib.y + shot[n].atrib.w) > planes[i].atrib.y) )
{
// Crea explosion
while (v == 0)
{
b++;
if (exp[b].estado == 0)
{
exp[b].atrib.x = shot[n].atrib.x + shot[n].atrib.w/2;
exp[b].atrib.y = shot[n].atrib.y;
exp[b].estado = 1;

v = 1;
}
v = 0;
}
}
}
}
}
}

// Se actualizan las explosiones
for (i=1; i<=MAXEXP; i++)
{
if (exp[i].estado == 1)
{
if (exp[i].LastUpCiclo == UPEXP)
{
exp[i].frame++;
exp[i].LastUpCiclo = 0;
}
else
{
exp[i].LastUpCiclo++;
}

if (exp[i].frame == 6)
{
exp[i].frame = 0;
exp[i].estado = 0;
}
}
}

/***
Pegado de superficies
***/
// Se pega la superficie de la imagen de fondo
SDL_BlitSurface(background, NULL, screen, &coordscreen);

// Se pegan los aviones
for (i = 1; i<=MAXPLANES; i++)
{
if (planes[i].estado == 1)
{
SDL_BlitSurface(plane, NULL, screen, &planes[i].atrib);
}
}

// Se pegan los disparos
for (i=1; i<=MAXSHOT; i++)
{
if (shot[i].estado == 1)
{
SDL_BlitSurface(shotsurp, NULL, screen, &shot[i].atrib);
}
}

// Se pega la imagen del cañon antiaereo
SDL_BlitSurface(canonsurp, NULL, screen, &canon.atrib);

// Se pegan las explosiones
for (i=1; i<=MAXEXP; i++)
{
if (exp[i].estado == 1)
{
switch (exp[i].frame) // Segun el frame se renderizan imagenes diferentes
{
case 1:
SDL_BlitSurface(expsurp[1], NULL, screen, &exp[i].atrib);
break;

case 2:
SDL_BlitSurface(expsurp[2], NULL, screen, &exp[i].atrib);
break;

case 3:
SDL_BlitSurface(expsurp[3], NULL, screen, &exp[i].atrib);
break;

case 4:
SDL_BlitSurface(expsurp[4], NULL, screen, &exp[i].atrib);
break;

case 5:
SDL_BlitSurface(expsurp[5], NULL, screen, &exp[i].atrib);
break;
}
}
}

SDL_Flip(screen);


ciclo++; // Se suma un ciclo

// Si NO han pasado 30 milisegundos desde la renderizacion del ultimo frame, no se sigue renderizando
do
{
frametime=CurrentTime();
} while (frametime<30);


} // Aqui termina el bucle del juego

// Se liberan las superficies
SDL_FreeSurface(background);
SDL_FreeSurface(canonsurp);
SDL_FreeSurface(plane);
SDL_FreeSurface(shotsurp);
SDL_FreeSurface(expsurp[1]);
SDL_FreeSurface(expsurp[2]);
SDL_FreeSurface(expsurp[3]);
SDL_FreeSurface(expsurp[4]);
SDL_FreeSurface(expsurp[5]);


return 0;
}

AK47

Algunas veces el debugger dice más que cualquier foro  8)

tamat

Por un stratos menos tenso

Prompt

F10 F10 F10 F10 F10 F10 F10 F10 F10 F10 F10

"Debugea" hombre! no querras que copie pege, me ponga las SDL y lo haga yo por ti no? :P

hehehe

SPARTANVS

ummmmmmmm, me parece que me he metido en un mundo muy grande. Si el debugger, solo hay un problema.... :D  ¿Como se susa el debugger del visual c++ 6.0? o bueno cualquiera ya que nunca he utilizado ninguno jajaja.

estoy buscando en google, pero si sabeis alguna pagina...preferiblemente en spanish, tambei se agradece. GRACIAS

AK47

Primero bajate el Visual C++ 2008 Express, que es totalmente gratuito y mucho mejor que el 6.0. Lo de los tutoriales habra que consultarlo en google, pero es facil: F5 lanza el debugger, y se parara cuando llegue a un breakpoint que hayas puesto en el codigo. Con F10 avanzas un paso, etc. Mira el menu de "Debug" del VC++. O comprate algun libro.

Aparte de esto, para empezar mejor que C++ igual te es python + pygame, o algo parecido. C++ es un hueso duro de roer. O sino mirate el C#, que tienes la IDE tambien gratis (Visual C# 2008 Express).

AK47

Mecauen en la sotabastos, el foro falla mas que una escopeta de feria :P

SPARTANVS

Cita de: "AK47"Mecauen en la sotabastos, el foro falla mas que una escopeta de feria :P

jajaja, si un poco, aunque yo tambien suelo ganara en la feria......

enga, voy a bajarme el 2008, aver como es, respecto a lo de python o C#....se que el C es duro de roer lo he leido en muchos sitios, pero me gusta y si al fin y al cabo es el que se usa para hacer los verdaderos y buenos juegos, pues mejor empezar bien no?¿

cuando tenga el 2008 express, y tenga algun problema posteo XD

jalbam

Hola, buenas.

No te preocupes por el lenguaje. Lo más importante es que aprendas a hacer juegos. Y comenzar a hacerlos en un lenguaje que no conoces muy bien hace que estés aprendiendo más a programar en ese lenguaje y te impida pensar bien en el juego en sí. En definitiva, inviertes más en aprender el lenguaje que en programar el juego.

Yo que tú haría una de dos: o aprendería mejor C++ y luego comenzaría con los juegos en éste lenguaje, o haría juegos en un lenguaje más sencillo y luego aprendería C++ y los haría posteriormente en éste. Pero siempre has de tener en cuenta que para hacer un juego, primero debes tener al menos una base de programación.

Al fin y al cabo hacer un juego, aunque puede diferir mucho de un lenguaje a otro, la esencia -que en realidad es lo que importa- suele ser muy parecida si no igual.

Pero en realidad he escrito por una curiosidad: ¿has escrito todo esto sin ir probándolo? Si lo haces así, es normal que luego te encuentres con todos esos errores y se te hace más difícil identificar dónde está cada uno y el porqué (errores que no deberían estar o serían menos si fueras paso a paso).

No importa lo experimentado que seas, siempre hay que ir probando porque todo el mundo se equivoca y es mejor ir corrigiendo los errores poco a poco.

Un saludo.
-----
Juan Alba Maldonado

AK47

¡Y los lenguaje C y C++ no son iguales en absoluto!

SPARTANVS

bien, ya tengo instalado el V2008 express. La primera vez cargue el archivo y le di a F5, me daba un error. entonces me di cuenta en que me habia equivocado y habia asignado mal unas varibles que requerian de los datos de algunas supeficies. lo cambie, y ahora cuando le doy a F5, me sale esto:

'AntiPlanes.exe': Loaded 'C:\Documents and Settings\Administrador\Escritorio\Programas SDL\AntiPlanes\Debug\AntiPlanes.exe', Symbols loaded.
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\SDL.dll', Binary was not built with debug information.
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\advapi32.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\rpcrt4.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\secur32.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\gdi32.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\user32.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\msvcrt.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\winmm.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_d08d0375\msvcr90.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\ddraw.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\dciman32.dll'
'AntiPlanes.exe': Unloaded 'C:\WINDOWS\system32\ddraw.dll'
'AntiPlanes.exe': Unloaded 'C:\WINDOWS\system32\dciman32.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\uxtheme.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\kbdus.dll'
'AntiPlanes.exe': Unloaded 'C:\WINDOWS\system32\kbdus.dll'
'AntiPlanes.exe': Loaded 'C:\WINDOWS\system32\kbdsp.dll'
'AntiPlanes.exe': Unloaded 'C:\WINDOWS\system32\kbdsp.dll'
The program '[2932] AntiPlanes.exe: Native' has exited with code 1 (0x1).

Se ve que esta cargando dll y demas...pero la ultima linea nose si es un error o algo parecido, solo se que he compilado y ahora ademas de no mostrar nada da un error de memoria:

La instruccion "xxxxx" hace refenrencia a la memoria en "xxxxxx". La memoria no se puede "read".

vamos el tipico fallito.

No se donde tengo que colocoar los breakpoints esos, pero bueno supongo que echandole tiempo aprendere a depurar  :D

SPARTANVS

me cago en to.................... :evil:  el foro falla mas que una escopeta de feria ¿a que me suena eso? 8)

[EX3]

Cuando se os dupliquen los post editarlos y dejarlos vacios o con un aviso de duplicado, que si no se llena todo el espacio legible del topic con informacion repetida y se hace mas coñazo seguir el hilo a la discursion.

Sobre lo de los breakpoints o puntos de interrupcion, tan facil como colocarlos en la linea de codigo donde quieras hacer la parada. Tienes que tener clara la ruta de ejecucion del codigo, por ejemplo, si el error estuviese en la carga de imagenes seria idoneo hacer una parada justo antes de realizar la primera carga para despues ejecutar linea a linea. Asi encontraras donde se produce el error y te sera mas facil descubrir que lo causa.

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

SPARTANVS

ya he editado..............

gracias, voy cogiendole el trankillo a esto de depurar. ya se poner los breakpoints y ATENCION, se pulsar F5  :lol:  :lol:

el caso es que todo va bien cuando empieza a cargar las distintas superficies, pero cuando llega cuando llega a la superficie "shotsurp" no la carga bien.

No se que puede pasar, el codigo parece estar bien y en sus sitio respecto a esa superficie. La imagen que carag esta como en lotas las demas, en una carpeta, y es bmp, tal y como debe ser, el nombre de la imagen es el mismo que el que carga el codigo. nose...nose, seguire intentando cosas, sino quitare los disparos aver como sigue el codigo  :twisted:

SPARTANVS

hay alguna forma de hacer que no se repita? algun truco admins?

he seguido provando con la puta superficie, he cambiado la image que carga, la crpeta desde que la carga, hasta he cambiado el nombre de la superficie en el programa  :D , pero no hay manera, siempre da error al cargar

¿Alguien sabe a que se puede deber?

En el depurador todas las superficies que se cargan antes toman ciertos valores, pero esta solo toma "NULL", o traducido: "???????????".






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.