Autor
|
Tema: Que opinan sobre esta idea para el code de un juego. (Leído 5,011 veces)
|
anonimo12121
|
Mira me explico. Estaba hoy trabajando en el sistema de colisiones de mi juego. Que funciona de la siguiente manera, carga una imagen en blanco y negro el negro es colisión, entonces lo que hace cada vez que comprueba si hay colisión es comprobar si el color de la imagen es negro, si es negro colisiona, y he pensado si lo hiciera de esta otra forma en tiempo play iría más rápido, me explico: 1- Carga la imagen en blanco y negro, comprueba su resolución en pixels. 2- Creo un bucle que añade a un bool[][] true si hay colisión y false si no lo hay. entonces la idea básica es que a la hora de cargar el mapa y todo eso es algo más lento quizás pero a la hora de jugar es más rápido, por que no hay que llamar a una función par comprobar el color de cierto pixel de la imagen. for(int y=0;y<SizeMapY*32;y++){ for(int x=0;x<SizeMapX*32;x++){ if(IMap->getPixel(x,y) == sf::Color::Black)PixelMap[y][x]=true; else PixelMap[y][x]=false; } }
El único inconveniente que le veo es a la hora de hacer mapa exagerados de quizás bool map[1000000][1000000]
Los números son cada pixel, en este caso son 1000000 de ancho por alto. Una exageración pero bueno xD Ustedes que opinan sobre esto? Esto es una archivo de texto generado a partir de bucle. http://img338.imageshack.us/img338/3791/mapmg.png
|
|
« Última modificación: 25 Agosto 2012, 11:23 am por Xafi »
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas! Anidar distintos bucles uno dentro de otro suele ser mas lento que ejecutar uno solo (por lo menos a mi me lo parece). Si tienes que recorrer una mtriz de n dimensiones, con rango Nn,...,N1 en cada una de ellas te basta con un solo bucle: tipo matriz[N n][N n-1][N 1]; for(i = 0 ; i < Nn * ... * N1 ; i++) Teniendo esto, el subindice mas a la derecha sera: i % N 1Y yendo en orden hacia la izquierda, el subindice k sera: (i / (N k-1 * ... * N 1)) % N kEn este caso tendrias: for(i = 0 ; i < DIM_X * DIM_Y ; i++) if(v[i / DIM_Y][i % DIM_Y] == loquesea)
No se si te servira o no, ya te digo que no se si esto es mas rapido que anidar bucles. Lo pensare. Si alguno sabeis (con argumentos, claro esta) si es mas rapido esto que anidar bucles nos lo podriais contar... ¡Saludos!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
anonimo12121
|
Hombre si me dices que es más rápido lo hago así XD
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
Voy a hacer una prueba y te comento los resultados. ¡Hasta ahora! XD, la prueba falla. Esto (la parte de los bucles anidados) me da falta de segmentacion: #include <time.h> #define DIM1 1000LU #define DIM2 1000LU #define DIM3 1000LU int main(int argc, char *argv[]) { int v[DIM1][DIM2][DIM3]; unsigned long i,j,k,t; for(i = 0 ; i < DIM1 ; i++) for(j = 0 ; j < DIM2 ; j++) for(k = 0 ; k < DIM3 ; k++) v[i][j][k] = i;
Evidentemente no he puesto todo el codigo... ¿Os pasa lo mismo? Compilado en ubuntu: gcc -o ejecutable fuente XD
|
|
« Última modificación: 25 Agosto 2012, 17:19 pm por do-while »
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
anonimo12121
|
Por que pones 1000LU y no 1000? no se que es eso de LU xD Yo apuesto a que te sales de la memoria xDD
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
LU despues de una constante significa que es unsigned long.
Es posible que el desplazamiento generado sobre el puntero v se salga de rango... aunque cada una de las dimensiones esta dentro del rango de un unsigned long...
De todas formas, reduciendo el valor de las constantes, no da la falta, pero ambos bucles terminan en menos de un segundo, por lo que no puedo hacer las comparaciones...
¡Saludos!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
Evidentemente los bucles no se salen del rango de v, pero quiza el sistema no te deja reservar tanta memoria. Quiza funcione si reduces el tamaño del array y pones otro bucle que incluya a los otros tres, haga un tratamiento de la informacion almacenada en el array y lo vuelva a rellenar. Es decir, que el array no llegue a contener toda la informacion, sino que lo llenas, lo tratas y lo vuelves a llenar. Piensa que al hacer: int v[DIM1][DIM2][DIM3];
Estas reservando 1000x1000x1000xsizeof(int) bytes. Saludos.
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
anonimo12121
|
Hay cosas como esos de 1000LU que en mi vida he visto en un tutorial ni manual ni nada, no se como aprendiste eso XD. creo que 0xDani tiene razón a mi antes me ha pasado algo similar haciendo lo de bool x[1000000][100000] xD
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
Es cierto, el problema esta en la declaracion. Suponiendo que gcc trabaja con ints de 4 bytes, con las constantes indicadas v ocuparia 3,725290298GB. Un poco demasiado, ¿no? ¡Saludos!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
Hay cosas como esos de 1000LU que en mi vida he visto en un tutorial ni manual ni nada, no se como aprendiste eso XD. En serio? Yo si recuerdo haberlo visto en el curso C++ con Clase, creo.
|
|
|
En línea
|
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!
I code for $$$ Hago trabajos en C/C++ Contactar por PM
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¿Qué opinan sobre esta frase?
Foro Libre
|
TheEGG 89
|
7
|
3,876
|
19 Febrero 2013, 02:33 am
por OmarHack
|
|
|
¿Que opinan de esta pagina sobre c++?
Programación C/C++
|
vangodp
|
2
|
2,364
|
31 Enero 2014, 05:24 am
por x64core
|
|
|
idea para juego en android.
Foro Libre
|
basickdagger
|
1
|
1,521
|
19 Mayo 2015, 20:44 pm
por Trane!
|
|
|
alguna idea sobre esta modificación con reflexil?
Ingeniería Inversa
|
gonzalitosk8
|
6
|
3,968
|
9 Marzo 2016, 03:59 am
por gonzalitosk8
|
|
|
Europa baraja la idea de usar el DNI para publicar opiniones sobre productos...
Noticias
|
wolfbcn
|
0
|
1,585
|
10 Junio 2016, 01:59 am
por wolfbcn
|
|