Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - ivancea96

#1001
Pues nuevamente, encontrar dónde falla.

Intuyo que falla en:
nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
Verifícalo.

Si es eso, fíjate que el pcx exista y que la ruta sea correcta.

http://liballeg.org/stabledocs/en/alleg010.html#load_bitmap
#1002
Que extraño. Muestra en consola los valores de nave->w y nave->h antes del create_bitmap, a ver si son valores correctos.

EDITO: Wop, cuidado aqui:

nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
set_palette(paleta);
if (nave==NULL) terminar();
buffer=create_bitmap(nave->w,nave->h);
clear (buffer);
if (buffer==NULL) terminar();


if(nave == NULL) terminar();
El código va a proseguir, y va a empezar a tirar errores (tal vez). Después del terminar, haz un return:
nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
set_palette(paleta);
if (nave==NULL){
    terminar();
    return;
}
buffer=create_bitmap(nave->w,nave->h);
clear (buffer);
if (buffer==NULL){
    terminar();
    return;
}


O mejor aun: terminar() lo llamas al final del main, asi que no lo llames ahí, o será llamado 2 veces. Simplemente, pon el return.

nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
set_palette(paleta);
if (nave==NULL){
    return;
}
buffer=create_bitmap(nave->w,nave->h);
clear (buffer);
if (buffer==NULL){
    return;
}
#1003
Normalmente, usa la primera.
La segunda, se utiliza para inicializar clases. Realmente un tipo nativo no tiene constructor. Una clase sí, y es la única forma de inicializarla.
Sobre la tercera, no la utilices salvo que realmente la necesites. Más que nada, porque no es necesario. La normal y la más visual, es la primera.
Sobre cuándo usar la tercera: http://en.cppreference.com/w/cpp/language/aggregate_initialization
#1004
Igual que uint8_t, int16_t, int32_t...
Te aseguran el tamaño de la variable, en bits.

El caso de esos tipos essimplementa para ser usados con toras codificaciones. Cada caracter de UTF-16, por ejemplo, utiliza hasta 2 bytes,16 bits. Para ello, podrías usar char16_t.

Si no necesitas los tipos, o los uses. Rara vez los utilizarás explícitamente. Pero están ahí para cuando se necesiten.


No se muestran como caracter, sino como número. Eso es porque realmente lo que son es eso, números. La única excepción es el entero de 8 bits (char8_t, char, int8_t), que se muestra como caracter.
#1005
No estoy seguro, pero si en vez de clear pones "clear_bitmap(...)", sigue igual?
#1006
Vale. Ahora, sigue con ese método hasta encontrar la línea exacta que da el error. Ve colocando un par de printf, hasta que veas que uno no se muestra.

Ahora sabes que el error está dentro de realizar_juego. pon printf ahí.

Por cierto, por seguridad, pon printf("a"); fflush(stdout);.
fflush hace que se muestre por pantalla al momento (ya que printf, stdout, utiliza un buffer). Es posible que falle y no se llegue a mostrar por pantalla. Con el fflush, haces que se muestre al momento, cosa importante por aquí xd
#1007
Cita de: ivancea96 en 11 Septiembre 2016, 21:47 PM
Tienes que localizar qué línea da el error. Para ello hay muchos métodos, y uno es tan simple como ver hasta donde funciona bien. Por ejemplo, con el main, pondrías:
Código (cpp) [Seleccionar]
int main(){
    cout << 'a' << endl;
    iniciar();
    cout << 'b' << endl;
    realizar_juego();
    cout << 'c' << endl;
    terminar();
    cout << 'd' << endl;
}


Al ejecutarlo, deberías ver por la consola, letras. Si sale una 'a', el error está en la función "iniciar()". Si sale "ab", el error está en "realizar_juego()", y etc.
Cita de: ivancea96 en 12 Septiembre 2016, 21:56 PM
¿Puedes poner aquí el código con los couts?
Cita de: sanxez1 en 18 Septiembre 2016, 12:47 PM
#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>


int iniciar();
void realizar_juego();
void terminar();

int iniciar(){
allegro_init();
install_keyboard();
set_color_depth(16);
if (set_gfx_mode(GFX_AUTODETECT,640,480,0,0)<0){
printf("error al iniciar el modo grafico\n");
allegro_exit();
exit(-1);
}
}

void terminar(){
allegro_exit();
}
int main(){
iniciar();
realizar_juego();
terminar();
}
END_OF_MAIN();
void realizar_juego(){

BITMAP *nave;
PALETTE paleta;
int x,y, x_anterior, y_anterior;
BITMAP * buffer;


nave=load_bitmap("C:/Users/DANIEL/Desktop/Programación/C++/Allegro/Naves/recursos/nave.pcx", paleta);
set_palette(paleta);
if (nave==NULL) terminar();
buffer=create_bitmap(nave->w,nave->h);
clear (buffer);
if (buffer==NULL) terminar();
x=SCREEN_W/2;
y=SCREEN_H/2;

while (!key[KEY_ESC]){

if (key[KEY_UP,KEY_W])
y--;
if (key[KEY_DOWN,KEY_S])
y++;
if (key[KEY_LEFT,KEY_A])
x--;
if (key[KEY_RIGHT,KEY_D])
x++;

if (x<0) x=x_anterior;
if (x>SCREEN_W-nave->w) x=x_anterior;
if (y<0) y=y_anterior;
if (y>SCREEN_H-nave->h) y=y_anterior;
if ((x_anterior!=x) || (y_anterior!=y)){
blit (buffer,screen, 0, 0, x_anterior, y_anterior,buffer->w,buffer->h);
blit (screen,buffer,x,y,0,0,buffer->w,buffer->h);
draw_sprite(screen,nave, x, y);
}
x_anterior=x;
y_anterior=y;


}
}



No tiene los couts ._.
Si lo haces, pon la librería iostream. También puedes hacerlo con printf (poniendo justo después de cada printf un fflush(stdout);
#1008
Cuidado con eso. El problema era:
Código (cpp) [Seleccionar]
Array& operator +(const Array &a1,const Array &a2)
{
    Array b;

    for ( int i = 0; i < b.tamanio; i++ )
    {
    b.ptr[i] = a1.ptr[i] + a2.ptr[i];
    }

    return b;
}


El retorno es Array&. Es decir, una referencia a un objeto. Estás retornando un objeto del ámbito de la función, es decir, va a desaparecer terminada la función. Estás retornando una referencia a un objeto que será destruido.
La solución, es poner que retorne un Array, sin el operador &.
#1009
Cuando sea así, dí qué error tienes. El error que te da el compilador.

El operador + está como privado. Prueba poniendolo como public.
#1010
Utiliza los datos que te da la propia función. La función retorna la cantidad de caracteres que necesita.

#include <stdlib.h>
#include <stdio.h>
#include <stdarg.h>


void temp(char* format, ...){
va_list list;

va_start(list, format);
int n = vsnprintf(0, 0, format, list);
va_end(list);

char* t = malloc(n+1);

va_start(list, format);
vsnprintf(t, n+1, format, list);
va_end(list);

printf("%s", t);
fflush(stdout);
}

int main(){
temp("%i%i%i", 123,456,789);
}