Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - Pepius

#31
Si, eso lo habia supuesto. Lo que no me cuadra es que me deje acceder a dichas zonas protegidas en tiempo de ejecución y que el error me lo de al salir. Lo que tampoco me cuadra es que esto ocurra solo cuando reservo la memoria en una función que retorna un valor, pero que no ocurra cuando la reservo en una función void.  La verdad es que no hay mucho mas codigo que enseñar, si eso mas tarde copypasteo la función entera y el main.

Gracias por las respuestas, un saludo.
#32
Vale, creo que lo encontrado. Que alguien me lo explique, por favor.

Si la función int load_enemy_data, la cambio por void load_enemy_data y, por tanto, le quito el return, no me da el error.

A que se debe esto, alguien me lo podria explicar?

Gracias, un saludo.
#33
Gracias por vuestras respuestas :D

Mars, gracias por lo de crear el constructor, no sabia que en C++, las estructuras eran una clase. Hábito adquirido :)

Bueno, creo que he arrinconado ya el problema. A ver si consigo explicarme:

En el main.cpp tengo la siguiente funcion:

int load_enemy_data(char *path){

char image_path[30];
int col,rx,ry,total;
        std::ifstream infile(path);
        ...
        infile >> image_path;
infile >> col >> rx >> ry >> total;
        ...
        EnemyDataList[n_ED].sset = new SpriteSet(image_path, col, rx, ry, total);
infile.close();
       ...
}

(He omitido partes irrelevantes)

Como podeis ver, la función carga desde un archivo de texto los diferentes campos de la estructura. Y lo hace sin problemas. El problema viene cuando intento acceder, desde el int main, a la instancia de la clase SpriteSet que acabo de crear.

Por ejemplo, si yo intento lo siguiente:

    std::cout << EnemyDataList[0].sset->columns << std::endl;


O sea, printear una variable (desde el int main) de la instancia (la variable es pública) que he creado en la anterior función, es cuando me da el error.

Si en cambio, el "new" lo hago desde el int main, no me da problema.

No se si me explico... un saludo y gracias.
#34
Hola,

Estoy programando un videojuego y quiero que los enemigos carguen sus datos (puntos de vida, trayectoria, etc...) de un archivo de texto. Con tal fin, he creado una estructura que alberga todos los datos llamada EnemyData. La idea era hacer una lista con todas las estructuras EnemyData, y que el constructor de la clase del enemigo (Enemy) recibiera como argumento un puntero a una estructura del tipo EnemyData. Para mi sorpresa, parece ser que esto no se puede hacer o (mucho más probable) lo estoy haciendo mal, porque el código compila y se ejecuta sin problemas, pero haciendo debug me da un error SIGSEGV, que según he googleado parece ser violación de segmento.

He ido aislando el problema hasta llegar a la conclusión de que el problema está ahi. Copio aquí la estructura (que no tiene ningun misterio) y el perfil del constructor.

typedef struct{
    int ID;
    SpriteSet *sset;
    int health;
    int score;
    float startx;
    float starty;
    float velocity;
    int total_waypoints;
    WayPointData waypoints[N];
    int total_shots;
    ShotData shots[N];
    int powerup_id;
    int bullet_id;
}EnemyData;


Enemy(EnemyData *edata):GameEntity(edata->sset,edata->startx,edata->starty),data(edata)

¿Puede que el problema esté al pasar el constructor de la clase Base? ¿Estoy haciendo una burrada?

Si necesitais más parte del código me lo decís.

Muchas gracias :)
#35
General Grafistas / Se necesita Pixel-Artist
14 de Septiembre de 2006, 01:59:46 AM
Ooops, no habia leido esto, tengo ordenador por primera vez en 2 semanas.
Descarto esa idea Mars, no creo que quede demasiado bien. En fin, gracias a todos. :D
#36
General Grafistas / Se necesita Pixel-Artist
09 de Agosto de 2006, 11:19:04 AM
Worvast, ya te he enviado el mail.

[Vil], jeje, si, lo prefiero asi. Hay que ser realista :)

Raistlin, es evidente que exagera, pero lo que yo he aprendido de su articulo es que para hacer juegos 3d, primero hay que hacerlos 2d... y faciles. Es evidente que despues el salto seguirá siendo gigantesco, pero almenos tendré una mínima base.

Senior wapo, por ahora lo de la IA no lo llevo tan mal, aunque es algo simple. En fin, creo que me las apañaré :)

Gracias por vuestros comentarios!
#37
General Grafistas / Se necesita Pixel-Artist
08 de Agosto de 2006, 01:13:35 PM
Buenas :)

Estoy desarrollando un juego muy simple, clónico del Pac-Man, siguiendo la lista de juegos que se recomienda para meterse en la programación de juegos en este articulo: http://www.gamedev.net/reference/design/features/makegames/

El hecho es que, despues de hacer el Tetris y el Break-Out, me he metido con el clónico del Pac-Man.

El juego en si esta ya avanzado, tiene editor de niveles y el personaje principal, colisiones, etc... esta terminado. Ahora mismo estoy programando la IA de los fantasmitas. :)

Bueno, vamos al grano, necesito ayuda de alguien que domine el Pixel-Art, o que no lo domine pero no se le de demasiado mal, para hacer los graficos del juego, que serian hacer 15 tiles para las paredes de los niveles, el personaje principal(el cual el concepto esta creado ya) y los fantasmas.

En fin, pues eso, si alguien se anima, ya sabe ;)

Un saludo!
#38
 Jeje, si Josepzin, voy tras la estela de mars. En fin, voy a ver si empiezo a diseñar mi juego ^^

Saludos.
#39
 Muchas gracias a todas las respuestas, voy haciendome una idea.

A ver, Lord Trancos 2, mi objetivo no es hacer el juego, sino aprender a programar juegos. Por lo tanto no quiero usar editores :)

Seryu, voy a usar pygame, asi que no harà falta hacer nada de inputs. Aunque si habia pensado hacer un sistema de ventanitas para dialogos, menus y todo eso. Asi que tal vez si lo ponga en diferentes archivos.

Ray: Gracias por toda la info.

Parece que coincidis en que separe bastante el codigo, lo tendré en cuenta(asi como el resto de indicaciones)

Zaelsius: Buf, gracias por el link!

Saludos y gracias.
#40
 Buenas,

Hace un tiempo que tengo que en mente hacer un rpg 2d muuuy sencillito asi, a largo plazo. La cuestión es que yo normalmente hago juegos simples, entonces puedo ponerme a programar como me venga en gana, no hace falta hacerme esquemas ni nada.

Pero un juego más o menos largo y con historia supongo que será diferente, y no se los pasos que hay que seguir, en que partes dividir la programación ni nada. No puedo programar segun se me vaya ocurriendo, porque al final seria muy dificil modificar las cosas, y si algo sale mal (lo más seguro) la he cagado.

Alguien sabe de este tema? O tal vez me estoy equivocando por completo?

Saludos.
#41
 Uhm, no se porque pero la variable angulo siempre es: 1.57079632679

En fin, saludos.
#42
 Ups perdona Sacrifai, no te habia leido.

Pues la verdad es que es una buena idea, pero las matematicas de 3r de ESO no acompañan U_U

En fin, si esto no va probaré :D
#43
 La verdad, este codigo me ha hecho ver las cosas má claras. Aun asi, no funciona, la colision en los laterales no funciona bien. En fin, pongo mi codigo (python):

for blx in pygame.sprite.groupcollide(ballsprite,blocksprites,0,1):
           if blx.rect.collidepoint(bola.rect.topleft) and blx.rect.collidepoint(bola.rect.topright):
               bola.rebound1()
               
           elif blx.rect.collidepoint(bola.rect.bottomleft) and blx.rect.collidepoint(bola.rect.bottomright):
               bola.rebound1()
               
           elif blx.rect.collidepoint(bola.rect.topleft) and blx.rect.collidepoint(bola.rect.bottomleft):
               bola.rebound2()
               
           elif blx.rect.collidepoint(bola.rect.bottomright) and blx.rect.collidepoint(bola.rect.topright):
               bola.rebound2()
               

           
           elif blx.rect.collidepoint(bola.rect.bottomright):
               
               if (bola.rect.bottom - blx.rect.top) >= (bola.rect.right - blx.rect.left):
                   bola.rebound1()
                   
               else:
                   bola.rebound2()
                   
           elif blx.rect.collidepoint(bola.rect.bottomleft):
             
               if (bola.rect.bottom - blx.rect.top) >= (blx.rect.right - bola.rect.left):
                   bola.rebound1()
                   
               else:
                   bola.rebound2()
                   
           elif blx.rect.collidepoint(bola.rect.topleft):
               if (blx.rect.bottom - bola.rect.top) >= (blx.rect.right - bola.rect.left):
                   bola.rebound1()
                   
               else:
                   bola.rebound2()
                   
               
           elif blx.rect.collidepoint(bola.rect.topright):
               if (blx.rect.bottom - bola.rect.top) >= (bola.rect.right - blx.rect.left):
                   bola.rebound1()
                   
               else:
                   bola.rebound2()


Donde blx es el bloque y la funcion collidepoint devuelve True si el punto indicado se encuentra dentro del sprite.

Sobre lo de la rejilla, tienes razon, de hecho el editor de niveles si funciona en rejilla.

Saludos y a ver si me puedes ayudar, muchas gracias!
#44
 Es una pregunta que no esta al nivel del foro, ni mucho menos. De hecho, me siento un poco ridiculo posteandolo, pero espero que me ayudeis.

Utilizo pygame, pero os voy a explicar el problema de forma que entendais aunque no sepais python ni pygame.

Estoy haciendo un simple arcanoid. Estoy en el tema de los rebotes etc. Cuando la bola golpea el bloque necesito identificar si ha golpeado uno de los laterales o si a golpeado la parte de arriba o abajo, para que la bola rebote en funcion. Y es ahi donde tengo el problema. Yo hago esto:

-Inicio bucle que pasa por todos los bloques para ver si colisionan con la bola.
      - Si colisionan empiezo otro bucle que recorre toda la coordenada Y del bloque, desde arriba hasta abajo.
               -Dentro del bucle chequeo si colisionan(la pelota y el bloque) en el punto [X1,Y1], cuando X1 es el punto         más a la derecha de la bola, y Y1 es el la variable que recorre el bucle de la coordenada Y. Despues lo vuelvo a hacer pero cambiando X1 no es el punto más a la derecha, si no a la izquierda.
                         - Si colisionan la bola hace el rebote correspondiente, elimina el bloque y hace un break en el      bucle.

      -Ahora vuelvo a hacer un bucle pero recorre la coordenada X del bloque, de izquierda a derecha.
               - Vuelvo a ver si colisionan en el punto [X2,Y2], pero ahora X2 es la variable del bucle y Y2 es la parte más alta primero y despues la más baja.
                           - Si colisionan hago el rebote correspondiente, etc...


La verdad, no se si esta bien o es el metodo más estupido que existe. El problema reside en que, aunque testeando yo veo que la pelota le da en la parte alta/baja, rebota como si colisionara con los lados. Se que el problema esta en que, como en el codigo el chequeo de si colisiona en los lados esta primero, coge este. Ya que lo he cambiado de orden i se altera el efecto.


En fin, que me he explicado como una mierda, pero espero que me ayudeis. Si quereis pongo el trozo de codigo.

Saludos, y perdon por la novatada.
#45
General Programadores / Presentación Y Dudas Sobre Lenguaje
12 de Diciembre de 2004, 04:53:18 PM
 Uhm, ya hace muuuuucho tiempo de esto  :P

Hace mucho tiempo que no me paso por aqui, pero escribo esto solo para decir que me meto otra ez en stratos (ahora con 14 años :P), ya que me estoy metiendo con c++, al darme cuenta de que es la mejor salida. Preparaos porque talvez aborde con alguna pregunta tonta. (ole)  





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.