Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   GLSCENE ¿Cómo habrán hecho para meter al personaje? (https://www.clubdelphi.com/foros/showthread.php?t=43878)

kakarotv5 23-05-2007 00:48:53

GLSCENE ¿Cómo habrán hecho para meter al personaje?
 
He estado echando un vistazo a esto pero no se cómo habrán metido el personaje.

No creo que sea muy dificil, pues es un personaje de Quake ya hecho, sólo es meterle en la aplicación.

¿Alguna idea?

Gracias y un saludo.

EDITO: He dado un pequeño paso, ya se como se mete el personaje, basta con ir a Add object / Mesh objects / Actor esto añadirá el objeto GLActor1 a nuestra escena, le renombraremos a Guerrero, pues bien luego en el código del evento OnCreate hay que inicializar el objeto con:

Código Delphi [-]
 Guerrero.LoadFromFile('waste.md2');
 Guerrero.Material.Texture.Image.LoadFromFile('waste.jpg');
 Guerrero.Material.Texture.Disabled := False; // Si no hacemos esto no cargará la textura del guerrero

En el archivo que os he puesto podeis descargaros los archivos waste.md2 y waste.jpg.

Me queda saber como se hace para controlar al personaje, si lo sabeis decidmelo, yo de momento investigaré un poco a ver si lo saco.

EDITO2: Ya lo tengo, ya se como controlar al personaje al más puro estilo tercera persona y que ande, corra, etc.

Ya lo pondré cuando tenga tiempo, si lo quereis decídmelo y lo pongo antes.

Saludos.

Neftali [Germán.Estévez] 23-05-2007 09:49:51

Hombre el código fuente del ejemplillo no estaria mal ;) (si te es posible).

Gracias de todos modos por la explicación y los ficheros.

kakarotv5 24-05-2007 01:37:48

Cita:

Empezado por Neftali
Hombre el código fuente del ejemplillo no estaria mal ;) (si te es posible).

Gracias de todos modos por la explicación y los ficheros.

De nada, gracias a ti por leerme.

Bueno es muy sencillo, una vez que hayais hecho lo anterior, teneis que asociar Guerrero a un componente de tipo TGLNavigator luego sacar un objeto de tipo TComboBox, lo poneis no visible y en el evento OnCreate del formulario ponemos el siguiente código:

Código Delphi [-]
 
Guerrero.Animations.SetToStrings(ComboBox1.Items);
ComboBox1.ItemIndex := 0; // Hacemos que el personaje tenga su animación por defecto
ComboBox1Change(ComboBox1);

y en el evento OnChange del ComboBox1 ponemos el código:

Código Delphi [-]
 
 Guerrero.SwitchToAnimation(ComboBox1.Text);
 Guerrero.AnimationMode := aamLoop;

luego en el evento OnProgress del GLCadencer1 habría que meter lo que queremos que pase al pulsar las teclas, por ejemplo:

Código Delphi [-]
 if IsKeyDown(VK_UP) then
  begin
   GLNavigator1.MoveForwardl(velocidad*deltaTime); 
   if ComboBox1.ItemIndex <> 1 then
    begin
     ComboBox1.ItemIndex := 1;
     ComboBox1Change(ComboBox1);
    end
  end;

donde velocidad es una variable que almacena un número, por ejemplo el 50.

y ya rizando el rizo para que nuestro personaje tenga los pies en el suelo (que no haga como que está nadando) pondríamos las propiedades MaxAngle y MinAngle del GLNavigator1 a 0 (vienen así por defecto) y luego en el código OnPush de un botón por ejemplo cambiad la propiedad AngleLock del GLNavigator1 a true, moveros un poco antes de hacer esto ya que sino no funciona (aun no se por qué hay que hacer esta cutrez).

Bueno a grandes rasgos es esto, tendreis que tener en cuenta la cámara, direcciones y todas esas cosas que doy por supuesto que sabeis, pero vamos que cada juego es un mundo y puede que no se adapte a lo vuestro u os guste tenerlo de otra forma, yo he usado un ComboBox pero se pueden utilizar otras cosas para almacenar las animaciones (lo que os de la imaginación), lo mejor es ir tocando todo y aprender por cuenta propia.

Si teneis dudas preguntad.

¿El siguiente paso?. Intentaré crear un personaje md2 propio con algún programa como BLender, me imagino que no será moco de pavo.

Saludos.

kakarotv5 25-05-2007 16:02:15

De momento aqui hay un montón de modelos en formato md2 y md3 que también funcionan para GLScene.

Saludos.

maeyanes 25-05-2007 17:10:25

Cita:

Empezado por kakarotv5
De nada, gracias a ti por leerme.

Bueno es muy sencillo, una vez que hayais hecho lo anterior, teneis que asociar Guerrero a un componente de tipo TGLNavigator luego sacar un objeto de tipo TComboBox, lo poneis no visible y en el evento OnCreate del formulario ponemos el siguiente código:

[snip]

Saludos.

Por que no usas un TStringList?

Puedes hacer algo como:

Código Delphi [-]

type
  TForm1 = class(TForm)
    // Declaraciones de compoentes, eventos, etc...
  private
    GuerreroAnimations: TStringList;
    // Demás declaraciones
  end;

// Evento OnCreate
GuerreroAnimations := TStringList.Create; // GuerreroAnimation lo declaras como privado
Guerrero.Animations.SetToStrings(GuerreroAnimations);
SetAnimation(0) // Hacemos que el personaje tenga su animación por defecto

SetAnimation sería algo como:
Código Delphi [-]
procedure TForm1.SetAnimation(Index: Integer);
begin
  Guerrero.SwitchToAnimation(GuerreroAnimations[Index]);
  Guerrero.AnimationMode := aamLoop
end;

En el evento OnDestroy de la forma haces:

Código Delphi [-]
GuerreroAnimations.Free

De esta forma no tienes que usar un TComboBox...



Saludos...

kakarotv5 26-05-2007 00:45:34

Cita:

Empezado por maeyanes
Por que no usas un TStringList?

Si, bueno ya dije que se podían usar las estructuras de datos oportunas, lo vi por un foro y me pareció bien para empezar a trastear con las animaciones del personaje ya que puedes seleccionar la que quieras pinchando con el ratón en el ComboBox1 en tiempo de ejecución, pero por poder se pueden meter donde te de la imaginación.

De todas formas muchas gracias por la aportación, parece que esto le interesa a alguien más que a mi :).

Saludos.

Caral 26-05-2007 01:22:35

Hola
Como se arma este escabeche, los dibujos vienen por todas partes, es como armar un rompecabezas, lo hace solo el GLSCENE ?
Que interesante esta esto, me quedo a ver que pasa, si podeis hacer algo y pasar algun codigo os lo agradeceria, aunque sea sencillo.
Saludos


La franja horaria es GMT +2. Ahora son las 17:56:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi