Dev - C++ - Quitar Animación

   
Vista:
Imágen de perfil de Jose Antonio

Quitar Animación

Publicado por Jose Antonio (19 intervenciones) el 15/05/2015 08:17:41
Hola, estoy comenzando a ver tutoriales y códigos para meterme al tema de c++ y quise comenzar con juegos básicos. Me puse a investigar sobre menús y encontré un en particular que me llamó la atención, este:
http://dl.dropbox.com/u/46120790/menu2.rar
sólo que por más que intento no logro quitar la animación, cuando no desaparecen los fondos, deja de funcionar la selección por teclado.
Qué es lo que se debe modificar para que sólo aparezca el menú de opciones con la función del teclado y el fondo?, estuve más de 2 horas sin resultado, espero alguien pueda ayudarme, gracias de antemano! :3
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp

Quitar Animación

Publicado por vangodp (287 intervenciones) el 15/05/2015 16:36:08
hola...
No es por aguarte la fiesta, pero creo que deberías dejar esta librería en pro de una que sea más completa y además orientada a objetos ya que estas en C++.

Allegro utiliza (o utilizaba) un concepto denominado Blit que nada más é que un copia y pega. En Allegro tienes una especie de "fondo" que es un buffer, es como una hoja de papel al que vas bliteando(pegando) otras imágenes, letras formas geometris etc, y una vez echo el blit se vuelca ese buffer a la pantalla.

En teoría para dejar de mostrar algo basta identificar la parte que hace el "bliteo" y eliminarla. además antes de sacar nada por pantalla hay que "borrar" lo que estuviésemos mostrando, con hacer el blit de un cuadro negro antes de empezar nuevamente a volcar el buffer serviría.

el proceso consiste en:

-clear_to_color ( buffer, 0x000000 ); //pinta de negro el buffer. O sea borra lo que hubiese antes.
-blit ( fondo, buffer, 0, 0, 0, 0, 640, 480 ); //pega la imagen relacionada a fondo en el buffer
-textout_ex ( buffer, font, "http://devcpp-allegro.blogspot.com/" , 10, 465, 0xFFFFFF, 0x000000 ); // lo mismo pero para letritas XD
-rectfill ( buffer, 40, 20, 600, 60, 0x444455 ); // crea un rectangulo de un x tamaño en una x posicion rellenandolo con alguna color
blit ( buffer, screen, 0, 0, 0, 0, 640, 480 ); // Esta es la parte importante. Es la que muestra el resultado en pantalla de lo que has echo, consiste en hacer un blit pero de esta vez del buffer hacia la pantalla.

Como vez todo son blits.
Identifica los blits que pegan las partes que te interesan al buffer y eliminarlas o haz lo que quieras.

Yo particularmente no se mucho de allegro ya que utiliza SFML que es la mejor para C++.
Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose Antonio

Quitar Animación

Publicado por Jose Antonio (19 intervenciones) el 15/05/2015 21:45:26
Hola, gracias por responder. Lo tomaré en cuenta, cambiaré de librería cuando termine el menú que estoy realizando :3 ....en teoría, lo que me mencionaste si lo sabía, pero no me indica qué es lo que ocasiona la animación en el texto y demás, intenté modificarlo por mi cuenta pero fue un fracaso, perdón xD , logré quitar la animación pero ya no se puede seleccionar nada y no queda posicionado bien, así lo dejé:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include <allegro.h>
 
int main()
{
	allegro_init();
	install_keyboard();
 
	set_color_depth(32);
	set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
 
	bool salida = false;
	int paso = 1;
	int ticks;
    int tiempo_ticks;
    int frame = 0;
    int pos = 0;
    int op = 1;
    int sw = 0;
 
    ticks = CLOCKS_PER_SEC / 20;
 
 
	BITMAP *buffer = create_bitmap(640, 480);
	BITMAP *fondo;
	BITMAP *fondo2;
 
	clear_to_color(buffer, 0x000000);
 
	fondo = load_bitmap("menuc01.bmp",NULL);
	fondo2 = load_bitmap("menuc02.bmp",NULL);
 
	while ( !salida )
	{
       if ( clock() > tiempo_ticks + ticks )
       {
           // obtenemos el nuevo tiempo
           tiempo_ticks=clock();
           frame++;
          if( !key[KEY_UP] && !key[KEY_DOWN] && sw == 1 )
          {
              sw = 0;
          }
 
          if ( key[KEY_UP] && sw == 0)
          {
               op--;
               if (op == 0) op = 4;
               sw = 1;
           }
           if ( key[KEY_DOWN] && sw == 0)
          {
               op++;
               if (op == 5) op = 1;
               sw = 1;
           }
 
          if ( op == 4 && key[KEY_ENTER] )
          {
               salida = true;
           }
          // borramos todo
          clear_to_color(buffer, 0x000000);
 
          if ( paso == 1 )
          {
              blit(fondo, buffer, 0, 0, 0, 0, 640, 480);
          }
 
          if ( paso == 1 )
          {
              blit(fondo, buffer, 0, 0, 0, 0, 640, 480);
          }
 
 
          if ( paso ==1 )
          {
             // recuadro de los mensajes
             rectfill(buffer, 40, 20, 600, 60, 0x444455);
             rect(buffer, 40, 20, 600, 60, 0xdddddd);
          }
          if ( paso == 1 )
          {
            pos = frame;
             if ( frame = 20 )
             textout_centre_ex(buffer, font, "NUEVA PARTIDA" , 200, 90, 0xFFFFFF, 0x333333);
             if ( frame = 20 )
             textout_centre_ex(buffer, font, "CARGAR PARTIDA" , 200, 140, 0xFFFFFF, 0x333333);
             if ( frame = 20 )
             textout_centre_ex(buffer, font, "OPCIONES" , 200, 190, 0xFFFFFF, 0x333333);
             if ( frame = 20 )
             textout_centre_ex(buffer, font, "SALIR" , 200, 240, 0xFFFFFF, 0x333333);
 
           }
          if ( paso == 1 )
          {
               pos = frame;
           }
 
          if ( paso > 1 )
          {
             if ( op == 1 )
             {
               textout_centre_ex(buffer, font, "NUEVA PARTIDA" , 200+pos, 90+pos, 0xdF4334, 0x333333);
              }
             if ( op == 2 )
             {
             textout_centre_ex(buffer, font, "CARGAR PARTIDA" , 200+pos, 140+pos, 0xdF4334, 0x333333);
              }
             if ( op == 3 )
             {
             textout_centre_ex(buffer, font, "OPCIONES" , 200+pos, 190+pos, 0xdF4334, 0x333333);
              }
             if ( op == 4 )
             {
             textout_centre_ex(buffer, font, "SALIR" , 200+pos, 240+pos, 0xdF4334, 0x333333);
              }
           }
 
          switch ( paso )
          {
               case 1:
                    // Opciones para nuestro menu
                    textout_centre_ex(buffer, font, "Menu de opciones" , 320, 35, 0xFFFFFF, 0x444455);
 
                    break;
 
               default:;
          }
 
          if (frame > 20 && paso < 5 )
          {
               paso++;
               frame=0;
          }
 
 
 
       }
 
	   blit(buffer, screen, 0, 0, 0, 0, 640, 480);
 
 
       if ( key[KEY_ESC] )
       {
           salida = true;
       }
    }
 
 
	destroy_bitmap(buffer);
	destroy_bitmap(fondo);
	destroy_bitmap(fondo2);
 
	return 0;
}
END_OF_MAIN();

Logré quitar la animación pero ya no puedo seleccionar nada y la posición no es la adecuada, seguramente quité algo que no era, pero como voy comenzando eso de la animación fue un poco complicada. Por qué comienzo con algo tan complicado?, es por un proyecto que me han dejado y quiero dejarlo bonito, ese menú podría ser buena opción. Serías tan amable de indicarme qué fue lo que quité mal?, y porqué ya no puedo seleccionar nada por teclado?, gracias de antemano!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

Quitar Animación

Publicado por vangodp (287 intervenciones) el 15/05/2015 22:48:07
A ver... no tengo instalado allegro. No la utilizo.
Por eso no se a que animación te refieres. A lo mejor si especificaras algo más que es lo que hace el menu te pueda ayudar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose Antonio

Quitar Animación

Publicado por Jose Antonio (19 intervenciones) el 15/05/2015 23:38:20
Ok, mira, el documento que envié en el primer mensaje hace esto:

Pero como menciono, no quiero que aparezca la animación, simplemente quiero que al comenzar estén las 4 opciones en el centro y un fondo atrás. El código que pasé después es lo que intenté hacer pero fue un desastre, este es el resultado:
http://i.imgur.com/aNXp8FB.png
No hay animación pero no logré colocar el texto en el centro y ya no sirve la función para moverse con el teclado...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

Quitar Animación

Publicado por vangodp (287 intervenciones) el 16/05/2015 05:09:46
más facil impocible XD
http://codepad.org/mVzyO8jE

Debo advertirte que estas usando una versión de Allegro obsoleta es la 4. Deberías plantearte hacer el cambio antes de que pegues el vicio por una librería ya en desuso al menos usa la 5.

Lo mismo puedes conseguir en SFML con pocos cambios, o la 5.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antonio

Quitar Animación

Publicado por Antonio (19 intervenciones) el 16/05/2015 09:53:23
Sí, mi idea principal era instalar el Allegro 5 pero no pude por algunos motivos xD de cualquier forma seguiré tu consejo y dejaré de usarlo al terminar este proyecto, investigaré una que esté orientada a objetos.

Bueno, mira, ahora que ya se como colocar una imagen o un fondo en pantalla, debo incluirlo después de haber elegido una de las opciones, por ejemplo, mi menú tendrá:

Nueva Partida
Niveles
Instrucciones
Créditos
Salir

Al dar click en instrucciones mandaré una fondo de imagen que realizaré en ps (donde por cierto, ahí si soy bueno xD ) y todo quedará bonito( espero). Bien, a lo que voy, cuál es la manera más adecuada, ya con ese código estructurado en esa forma de hacerlo?, nueva partida y niveles se incluirá después cuando se tenga el código del juego en sí, pero para instrucciones, créditos y salir debe hacerse...qué consejo me das para realizarlo?, o más bien, cómo lo hago porque no pude, intenté :s gracias por el apoyo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

Quitar Animación

Publicado por vangodp (287 intervenciones) el 16/05/2015 17:53:01
use algún gestor de escenas. Este tutorial esta basado en python pero puede ser implementado en Allegro con sus debidos cambios: http://razonartificial.com/2010/08/gestionando-escenas-con-pygame/

Una cosa debes tener clara. Creación de juegos no es una cosa común en la programación. A lo que me refiero que nos es como cuando entras en un foro necesitando un programa que lea un string e que busque un substring y cualquiera en un foro te puede ayudar ya que todos estudiamos lo mismo. No vas encontrar soluciones a tu estándar a tu talla, a eso me refiero, encontrarás ejemplos, muchas veces en otro lenguajes, tendrás que adaptarlo a tus necesidades. Si alguien te da una idea abrazala hasta que encuentres algo mejor. ¿Lo pillas?

Entonces creo que deberías investigar que es un gestor de escenas y ponerlo en practicas para ver de que va. Te lo digo por que creo que es la mejor solución, quizás haya muchas otras pero no las conozco.

En esta pagina también tiene un tutorial dedicado a crear un game engine suyo que explica muchos otros tipos de gestores interesantes, es algo avanzado pero creo que con el tiempo es de paso obligatorio. http://lordpakus.blogspot.com.es/p/lordpakus-game-engine.html

En este hilo en ingles habla de algo como lo que te comento pero en alegro 5: https://www.allegro.cc/forums/thread/608661

use el buscador y busque cosas como "scene manager allegro 4" y echale tiempo en buscar algo que te sirva, una idea, un ejemplo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

Quitar Animación

Publicado por vangodp (287 intervenciones) el 16/05/2015 18:35:39
Aquí más sobre gestor de escenas, pena que es en SFML y no te sirve de mucho, pero si para entender el concepto que es lo importante en este caso. http://www.genbetadev.com/programacion-de-videojuegos/gde-gestor-de-escenas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose Antonio

Quitar Animación

Publicado por Jose Antonio (19 intervenciones) el 17/05/2015 21:51:19
Woo, es complicado entender eso ahora mismo... gracias, pero creo que interpretaste mal a lo que me refería. Lo que quise decir era que cuando de click en cualquier opción como "nueva partida", "instrucciones", "créditos", me mande a dicha acción.
Debe ser en esta parte:
1
2
3
4
5
6
7
8
9
10
if ( op == 1 ) { textout_centre_ex ( buffer, font, "NUEVA PARTIDA" , 320, 210, ROJO, GRIS );
            } else {         textout_centre_ex ( buffer, font, "NUEVA PARTIDA" , 320, 210, BLANCO, GRIS ); }
            if ( op == 2 ) { textout_centre_ex ( buffer, font, "CARGAR PARTIDA" , 320, 260, ROJO, GRIS );
            } else {         textout_centre_ex ( buffer, font, "CARGAR PARTIDA" , 320, 260, BLANCO, GRIS ); }
            if ( op == 3 ) { textout_centre_ex ( buffer, font, "OPCIONES" , 320, 310, ROJO, GRIS );
            } else {         textout_centre_ex ( buffer, font, "OPCIONES" , 320, 310, BLANCO, GRIS ); }
            if ( op == 4 ) { textout_centre_ex ( buffer, font, "SALIR" , 320, 360, ROJO, GRIS );
            } else {         textout_centre_ex ( buffer, font, "SALIR" , 320, 360, BLANCO, GRIS ); }
 
        }

Cuando yo de click cómo me mandará a esa acción?, ahí es cuando yo colocaré la imagen por medio de Allegro, eso ya lo se hacer y lo haré en cuanto pueda realizar lo que te menciono...no se si me explico..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

Quitar Animación

Publicado por vangodp (287 intervenciones) el 18/05/2015 05:11:37
Ya no te puedo ayudar más... paso de adaptarme a una librería obsoleta. Deberías hacer lo mismo. todo lo que haces es para nada.

Debes buscar sobre eventos de ratón o mouse events en ingles.

En teoría seria crear un rectángulo virtual de Xtamaño por un Ytamaño en cima de la posición de los iconos estos y checar con la función que retorne las coordenadas del ratón estén dentro de este rectángulo. si esta dentro solo basta averiguar si se pulsa en botón del ratón para activar alguna variable que te lleve a otro menú.

Poco más te puedo ayudar ya que eres tu el que quiere aprender las funciones de esta librería desfasada como dije.

Si fuera SFML estaría encantado en ayudar todo lo que tu quieras, y yo pueda, pero es que allegro es otro sistema con otras funciones y poco más te puedo decir ya que no las conozco.

Hay funciones que retornan la posición x e y del ratón busca cual es y listo.

En SFML es

sf::Vector2i localPosition = sf::Mouse::getPosition(window); // window is a sf::Window

ahora localPosition tendría las coordenadas x e y de la ventana. Muy fácil.

Estuve leyendo 2 minutos sobre allegro y el manejo de ratones y resulta que necesitas eventos de tiempo, instalar ratón y yo que se que más mil demonios para hacer el ratón andar. a la leche con Allegro XDDD, bendito SFML jajaj.

Lo siento por ti, eres sadomazo te gusta sufrir XDD

Suerte amigo, cuando tomes coraje con sfml aqui te espero.

PD deberias reconciderar ya que con solo ver eso...
mire el tamaño y la cantidad de tonterias que tiene allegro:
http://alleg.sourceforge.net/stabledocs/en/allegro.html
comparado con sfml:
http://www.sfml-dev.org/tutorials/2.3/

En serio Allegro ya es cosa del pasado creame XD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jose Antonio

Quitar Animación

Publicado por Jose Antonio (19 intervenciones) el 18/05/2015 10:30:13
Entiendo perfectamente lo que me dices y te aseguro que dejaré de usar Allegro pero este proyectito que estoy haciendo como ya te mencioné, lo debo entregar el martes y ya no tendré tiempo de empezar desde 0. Estoy obligado a terminarlo con Allegro, tal ves fue un error usar esa librería pero no me queda de otra más que continuar :c

Es una lástima que no conozcas mucho sobre Allegro, en estos momentos eres la única persona que podría haberme salvado xD

De cualquier manera, seguiré intentándolo aunque dudo que me resulte, o a ver si alguna otra persona que pase por aquí pueda comentar algo al respecto...

Muchas Gracias por responder y ayudarme, seguiré el consejo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar