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 - glglut

#1
hola,

estoy programando en c++ un proyecto MFC del tipo multidocumento en el que tengo la ventana XXView donde capturo la imagen de una cámara, entonces tengo un dialog MCD con varios botones en la que si doy a un botón me sobrepone un dibujo sobre la imagen.

el problema que tengo es que no sé como capturar el evento de click sobre el botón en el dialog para que dibuje el dibujo que quiero sobreponer. en la clase XXView tengo:

void XXView::OnToolsMCD() { .. }

y en la zona BEGIN_MESSAGE_MAP(,)

ON_COMMAND(ID_TOOLS_MCD, &XXView::OnToolsMCD())

así que no sé pq no funciona...

muchas gracias por adelantado :D
#2
CRM32Pro / función Collision no siempre me funciona
03 de Enero de 2008, 09:14:00 PM
gracias por responder :D

he activado lo del debug para que se vean las cajas que envuelven a los sprites y es curioso ver que cuando me muevo hacia la izquierda o hacia abajo, la caja que envuelve el objeto con el que quiero detectar la colisión desaparece por eso no detecta la colisión cuando el personaje pasa por encima, cuando voy hacia la derecha o hacia arriba la caja vuelve a aparecer... la función la uso en el RenderGraphics y tengo esto puesto en el rate:

ITimeSystem->SetRate(0,60);


he puesto SetRate a 0,20 y tp me dibuja la caja cuando ando hacia la izquierda y cuando he puesto la función de detección de la colisión en la detección de teclas pulsadas no se me veían las cajas nunca.

alguna idea??

gracias por adelantado
#3
CRM32Pro / función Collision no siempre me funciona
02 de Enero de 2008, 01:36:33 AM
hola!

estoy intentando detectar la colisión entre un objeto que se mueve y otro estático, estoy usando esta función:



miSprite->Collision(sprObstaculo);



estando sprObstaculo en el medio de la pantalla, el problema es que cuando desplazo miSprite desde la izquierda de la pantalla hacia la derecha donde está el sprObstaculo o desde abajo de la pantalla hacia arriba se detecta la colisión, pero cuando lo hago desde la derecha o desde arriba no se detecta la colisión.

he mirado de usar los demás parámetros que permite esta función pq deduzco que son para modificar el valor x e y de los sprites para que la función cree la caja mínima contenedora de ambos sprites y así detectar la colisión no??

muchas gracias por la ayuda
#4
CRM32Pro / alpha en archivo png?
25 de Diciembre de 2007, 01:46:53 PM
ok, pues nada haré lo que me has dicho pq sí que son pocos valores

muchas gracias!! :D
#5
CRM32Pro / alpha en archivo png?
25 de Diciembre de 2007, 01:10:25 AM
hola!

lo siento por no explicarme bien, me refería a por ejemplo si tengo una variable del tipo sprite que se llama spr le pueda hacer spr->setAlpha(100);

el sprite sería del tipo png, es que cuando en el editorDPF cargo un png me pone que se desactiva el alpha y claro luego en el juego lo he probado y efectivamente le pongo spr->setAlpha(100); y como si nada, pero si esto lo hago con un sprite que tiene un archivo bmp sí que aplica el alpha correctamente.

muchas gracias
#6
CRM32Pro / alpha en archivo png?
24 de Diciembre de 2007, 01:43:08 PM
hola,

tengo una duda, no es posible hacer que un sprite que la imagen que contiene en formato png se le pueda aplicar alpha??

gracias por la ayuda :D
#7
CRM32Pro / problemas cogiendo el offset de un sprite
13 de Diciembre de 2007, 08:22:26 PM
he añadido la línea del log y me sale igual que a ti, pero luego con el debugger lo miro y da el valor de 1000 anterior, bueno si internamente se entera el programa por mi bien, ya seguiré probando

MUCHAS GRACIAS POR LAS MOLESTIAS :D:D:D:D:D
#8
CRM32Pro / problemas cogiendo el offset de un sprite
13 de Diciembre de 2007, 12:15:58 AM
uso el visual C, aunque la idea es hacer que funcione tanto el linux como en windows :P
#9
CRM32Pro / problemas cogiendo el offset de un sprite
11 de Diciembre de 2007, 11:15:50 PM
hola! he hecho como me has dicho, es un ejemplo sencillo que usa elementos del archivo dpf de los ejemplos :D

el primer archivo:



#include "Cosa.h"


Cosa* c;
SDL_Surface *bg;


void RenderGraphics(int bLogicUpdate)
{
SDL_BlitSurface(bg, NULL, CRM32Pro.screen, NULL);
c->getSprite()->Draw();
}

int main(int argc,char *argv[])
{
SDL_Event   event;
Uint8 done = 0;

ILogSystem.Init("GUI.log",LOG_FILE,LOG_NORMAL,TITULO);

if(CRM32Pro.Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) < 0)
ILogSystem.Msg(LOG_NORMAL," · [LOG] - Couldn´t initialize CRM32Pro: %s\n",SDL_GetError());

CRM32Pro.Config.VideoWidth = 640;
CRM32Pro.Config.VideoHeight = 480;
CRM32Pro.Config.Title = TITULO;
CRM32Pro.Config.Icon = IImage->Load(GFX_RESOURCE,"icono");

bg = IImage->Load(GFX_RESOURCE,"background2");
if(!CRM32Pro.SetVideoMode())
CRM32Pro.Quit();

ITimeSystem->Init();
ITimeSystem->SetRate(0,60);
CRM32Pro.SetRenderCallback(RenderGraphics);

c = new Cosa("rabbit","edificio",400,100,30,60);

while(!done)
{
while (CRM32Pro.Update(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
if(event.key.keysym.sym == SDLK_ESCAPE) done = 1;
break;

case SDL_QUIT:
done = 1;
break;

default:
break;
}
}
}
return 1;
}


la cabecera de la clase Cosa()


#ifndef COSA
#define COSA

#include "CRM32Pro.h"

#define GFX_RESOURCE "data/gfx.dpf"

#define ANCHO_PANTALLA 640
#define LARGO_PANTALLA 480
#define TITULO "V01"

class Cosa
{
protected:
CRM32Pro_CSprite* _sprite;
char* _nombreSprite;
char* _nombre;
int _x;
int _y;
int _ancho;
int _largo;

public:
Cosa(char* nombreSprite, char* nombre, int x, int y, int ancho, int largo);
CRM32Pro_CSprite* getSprite() { return _sprite; }
};

#endif


y el código de la clase Cosa()


#include "Cosa.h"


Cosa::Cosa(char* nombreSprite, char* nombre, int x, int y, int ancho, int largo)
{
_sprite = new CRM32Pro_CSprite();
_sprite->Load(GFX_RESOURCE, nombreSprite);
   _sprite->AutoRestore(0);
_sprite->SetPosition(x,y,1);

_nombre = (char*)malloc(sizeof(char)*(strlen(nombre)+1));
strcpy(_nombre, nombre);
_x = x;
_y = y;

_ancho = _largo = 1000;
_sprite->GetOffset(&_ancho,&_largo);
}


a mi me compila tal cual y me pinta el sprite correctamente, lo único que sigue sin coger el offset :(

MUCHAS GRACIAS POR LA AYUDA:D:D:D:D
#10
CRM32Pro / problemas cogiendo el offset de un sprite
11 de Diciembre de 2007, 12:51:18 PM
wenas!

Citar
por cierto, porque no usas la estructura
SDL_Rect
tiene x,y, width, height

puedes dibujar el sprite?

obviamente creas el sprite después de iniciar CRM32Pro

lo de la estructura SDL_Rect no la conocía ya miraré a ver y el sprite sí que lo dibuja bien


Citaruhmm... pregunta: el sprite que cargas de GFX_RESOURCE (nombreSprite) se supone que tiene ya algun offset dado?

sí que tiene el offset correcto. en el editorDPF lo puedo ver.

CitarDe todos modos hay algo que no veo claro, si se supone que tu en Cosa() le pasas la posicion y offset deseados...para que haces un getoffset() despues?

el código lo fui haciendo casi sin saber todo lo que ofrecía la clase Sprite entonces por eso le iba pasando el ancho, el largo la x y la y...

entonces lo que quiero es que _ancho y _largo se inicialicen por los valores que tenga el sprite no por los parámetros del constructor, lo tengo que cambiar :P. en el editorDPF me sale correctamente el offset por eso que no entiendo pq ahí no los coge...
#11
CRM32Pro / problemas cogiendo el offset de un sprite
11 de Diciembre de 2007, 12:11:45 AM
wenas! pongo el código a ver:

esto primero es la definición de la clase:



class Cosa
{
protected:
CRM32Pro_CSprite* _sprite;
char* _nombreSprite;
char* _nombre;
int _x;
int _y;
int _ancho;
int _largo;

public:
Cosa(char* nombreSprite, char* nombre, int x, int y, int ancho, int largo);

CRM32Pro_CSprite* getSprite();

};


entonces el fallo viene en el constructor:




Cosa::Cosa(char* nombreSprite, char* nombre, int x, int y, int ancho, int largo)
{
_sprite = new CRM32Pro_CSprite();
_sprite->Load(GFX_RESOURCE, nombreSprite);
      _sprite->AutoRestore(0);
_sprite->SetPosition(x,y,1);

_nombre = (char*)malloc(sizeof(char)*(strlen(nombre)+1));
strcpy(_nombre, nombre);
_x = x;
_y = y;

       _ancho = largo = 1000;
_sprite->GetOffset(&_ancho,&_largo);

}


y la llamada es:




Cosa* c1 = new Cosa("Casa","edificio",100,100,30,60)


si hace falta más código lo subo, no hay problema, he puesto lo que mas creía que era importante.

muchas gracias por todo :D
#12
CRM32Pro / problemas cogiendo el offset de un sprite
09 de Diciembre de 2007, 12:53:39 AM
hola!

gracias por responder a los dos. he hecho las pruebas e inicializando a 1000 las dos variables me las sigue sin modificar, después del getoffset se quedan con valor 1000...
#13
CRM32Pro / problemas cogiendo el offset de un sprite
08 de Diciembre de 2007, 12:44:36 AM
hola!

tengo una duda bastante tonta, me da hasta vergüenza.. :oops:

quiero coger el offset de un sprite con la función GetOffset(int*, int*), entonces hago esto:


int offX=0, offY=0;

miSprite->GetOffset(&offX, &offY);



haciendo esto no me guarda nada en las variables y eso que con el editorDPF el offset del sprite está bien puesto y no hay ningún otro tipo de problema...
alguna idea?

muchas gracias por adelantado :D
#14
CRM32Pro / problemas con los botones
24 de Noviembre de 2007, 02:27:22 AM
GRACIAS!! sí que funciona :D:D:D

buaa para la demo aun queda aun no hay nada decente :P pero a la que haya algo así jugable, espero que para navidades, la subimos :D

muchas gracias!! :D:D:D
#15
CRM32Pro / problemas con los botones
24 de Noviembre de 2007, 12:38:31 AM
hola a todos

tengo un problemilla a la hora de dibujar botones en pantalla, quiero hacer una especie de menú. entonces inicialmente tengo una pantalla con 2 botones, cuando le doy a un botón quiero que se borren estos 2 botones y entonces pintar 3 botones nuevos, entonces lo que hago para borrar los 2 botones iniciales es IButton->RemoveAll(); entonces luego creo los 3 botones siguientes y le cambio el fondo a la pantalla.

todo funciona bien menos que los 3 botones que se crean secundariamente no se pintan cuando hago clic, están ocultos, tengo que pasar el cursor por encima para que se pinten en la pantalla, si ejecuto el mismo código sin el IButton->RemoveAll(); los 3 botones se pintan correctamente sin necesidad de tener que pasar el cursor por encima de ellos lo malo es que los 2 botones anteriores que no quiero que se vean siguen estando ahí... no sé cuál puede ser el problema :S

MUCHAS GRACIAS! :D





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.