Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   efecto disparo de los juegos (https://www.clubdelphi.com/foros/showthread.php?t=30720)

edusus 16-04-2006 14:24:03

efecto disparo de los juegos
 
Hola amigos, ¿cómo se hace ese efecto que simula un disparo en los juegos, como puede ser una bola de fuego o una ráfaga, etc.? Cualquier ejemplo de código de algo así agradecería me lo enviaran. Muchas gracias.

OSKR 16-04-2006 16:00:33

A q efecto te refieres? si te refieres al movimiento y hasta donde yo se el grafico q muestres tienes q desplazarlo tu mismo en el tiempo, si te refieres a degradaciones puedes crear un .gif animado o .avi por aparte y reproducir este mientras lo vas moviendo,a la vez puedes reproducir un .wav para el sonido.

edusus 16-04-2006 16:56:48

disparo
 
Me refiero a por ejemplo en el viejo juego Mario que funciona en DOS cuando dispara a las tortugas, etc.

OSKR 16-04-2006 17:12:30

hhhhmmmm:confused: disculpa pero no recuerdo mucho Mario poq odio ese juego :D :D :D ¿es donde dispara algo de fuego :o? Si es asi, puedes hacer lo q te menciono arriba, desplazas un objeto q contiene una imagen en el tiempo, el DeltaX/DeltaT lo escoges por ensayo y error ya q a veces suele ser mas lento o rapido de lo q la vista lo esperaba

edusus 16-04-2006 17:22:56

disparos :-)
 
Estoy de acuerdo en lo que se refiere a ese juego. Lo he mencionado porque es un juego que todos alguna vez vieron :) .
Pero cualquier ejemplo me valdría, si me puedes mandar un ejemplo simple te lo agradezco. Un abrazo

OSKR 16-04-2006 20:27:23

edusus:
Cita:

Un abrazo
abrazo? spero q no seas un man....:D
no paja...es broma.
usa un TImage, un TTimer.
en el constructor pon:
Código:

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{ Img->Picture->LoadFromFile("BLACKSIREN0.BMP");
  Img->Width=50;
  Img->Height=50;
  Img->Stretch=true;
  Img->Top=100;
  Img->Left=10;
  Timer1->Interval=25;
  Timer1->Enabled=true;
}

en el timer pon:
Código:

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{ Timer1->Enabled=false;
  double x=Img->Left+30;
  double y=20*sin(x)+100;
  Img->Left=x;
  Img->Top=y;
  if(x <= 1500)
    Timer1->Enabled=true;
}

todos los numeritos q ves ahi son arbitrarios, mi DeltaX es de 30 y mi DeltaY q los escoja el seno, el DeltaT es de 25 milisegundos.
La resoluciòn q uso es 2048x1536 y se ve bien

edusus 17-04-2006 08:16:01

disparo
 
Te agradezco tu respuesta (sin abrazo :D ).
¿Podrías ayudarme un poquito más con el código? No encuentro la forma de declarar el constructor. Anda mándame el código más completo.
Gracias, " un disparo :D :D :D "

OSKR 17-04-2006 15:27:50

edusus:
Cita:

No encuentro la forma de declarar el constructor. Anda mándame el código más completo.
El codigo mas completo? ese es todo el codigo
En cuanto al constructor hasta ahi llego yo, porq uso Builder pero ya de Pascal no conozco de objetos, se solicita la ayuda de cualqier otro miembro del foro para q lo traduzca :o.

egostar 17-04-2006 17:44:35

Cita:

Empezado por OSKR
edusus:
El codigo mas completo? ese es todo el codigo
En cuanto al constructor hasta ahi llego yo, porq uso Builder pero ya de Pascal no conozco de objetos, se solicita la ayuda de cualqier otro miembro del foro para q lo traduzca :o.

Es una excelente oportunidad de aprender a programar, edusus, no la desaproveches pidiendo que te lo resuelvan.

Saludos.

edusus 17-04-2006 22:53:46

al ego
 
Yo no soy un profesional, no estoy haciendo un programa para venderlo.
No vivo de la informática y la forma como aprendí lo poco que aprendí ha sido en base a ejemplos.
Así que Ego (te sienta muy bien ese nombre) no tengas miedo no te voy a quitar trabajo.
Yo nunca ofendí a nadie en este foro, me parece fuera de lugar e improcedente tu actitud hacia mi.
Mala suerte, si no puede existir alguien que le guste por diversión la programación, si todo lo veis como negocio es muy triste.
Buscaré otra forma de aprender.

OSKR 17-04-2006 23:03:03

edusus:
Cita:

Yo no soy un profesional, no estoy haciendo un programa para venderlo.
Nada tiene q ver.
Cita:

No vivo de la informática y la forma como aprendí lo poco que aprendí ha sido en base a ejemplos.
Nadie reprocha eso, de hecho conozco a mas de un autodidacta.
Cita:

Así que Ego (te sienta muy bien ese nombre) no tengas miedo no te voy a quitar trabajo.
Yo nunca ofendí a nadie en este foro, me parece fuera de lugar e improcedente tu actitud hacia mi.
Mala suerte, si no puede existir alguien que le guste por diversión la programación, si todo lo veis como negocio es muy triste.
Buscaré otra forma de aprender.
No veo porq hay q reprocharle algo a egostar, con nadie se ha metido ni ofendido pero tu si a èl llamàndolo Ego, en el foro hay muchos ejemplos de muchas cosas, loq veo es q tal vez necesitas un manual sobre delphi si es lo q estas usando, solo buscar el còdigo no es la soluciòn mas adecuada......hay q leer de vez en cuando la documentacion

egostar 17-04-2006 23:16:51

Cita:

Empezado por edusus
Yo no soy un profesional, no estoy haciendo un programa para venderlo.
No vivo de la informática y la forma como aprendí lo poco que aprendí ha sido en base a ejemplos.
Así que Ego (te sienta muy bien ese nombre) no tengas miedo no te voy a quitar trabajo.
Yo nunca ofendí a nadie en este foro, me parece fuera de lugar e improcedente tu actitud hacia mi.
Mala suerte, si no puede existir alguien que le guste por diversión la programación, si todo lo veis como negocio es muy triste.
Buscaré otra forma de aprender.

No tomes a mal mi comentario estimado edusus, tomalo como un mal consejo, si solo copias las cosas pues no te aporta nada.

Entiendo que esto sea un pasatiempo para ti pero creo que aún los pasatiempos deben de tener su lado educativo si no de nada sirven.

La respuesta de OSKR tiene todos los elementos para que tu conviertas su ejemplo a código Delphi, pero si no tienes ganas o te da flojera leer un poco sobre las funciones y procedimientos Delphi, pues eso es otra cosa.

Y bueno, pues que le vamos a hacer egostar es mi nick y solo yo se porque y no necesariamente es por el EGO aunque si asi lo conceptualizas eres libre de hacerlo realmente no me molesta en lo mas mínimo.

Espero que en el foro haya gente que trabaje por ti, yo no lo voy a hacer, disculpame.

Saludos

edusus 18-04-2006 00:46:43

¿trabajar por mi???
 
Yo no he pedido a nadie que trabaje por mi. Solo le he pedido como se le pide a un maestro, porque para mi bajo nivel todos son maestros, que me diga lo que ya sabe si lo sabe, y no para simplemente copiarlo sino para aprender en base a eso razonando el código. Esa es la forma como me resulta más fácil a mi aprender.
Imagínate que la ciencia pretendiera que cada científico empezara de cero sin darnos el conocimiento ya obtenido; en ese caso aun estaríamos pensando que la Tierra es el centro del Universo.

egostar 18-04-2006 01:22:26

Cita:

Empezado por edusus
Yo no he pedido a nadie que trabaje por mi. Solo le he pedido como se le pide a un maestro, porque para mi bajo nivel todos son maestros, que me diga lo que ya sabe si lo sabe, y no para simplemente copiarlo sino para aprender en base a eso razonando el código. Esa es la forma como me resulta más fácil a mi aprender.
Imagínate que la ciencia pretendiera que cada científico empezara de cero sin darnos el conocimiento ya obtenido; en ese caso aun estaríamos pensando que la Tierra es el centro del Universo.

Insisto, para hacer lo que pides solo es necesario leer un poco. Aqui esta lo que necesitas y sin afan de ser presuncioso, lo hubieras podido hacer en el mismo tiempo con el que me contestas y sin perder mas tiempo.

Código Delphi [-]
 
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
{
  Img->Picture->LoadFromFile("BLACKSIREN0.BMP");
  Img->Width=50;
  Img->Height=50;
  Img->Stretch=true;
  Img->Top=100;
  Img->Left=10;
  Timer1->Interval=25;
  Timer1->Enabled=true;
}
  Image1.Picture.LoadFromFile('c:\temp\logo.BMP');
  Image1.Width    := 50;
  Image1.Height   := 50;
  Image1.Stretch  := True;
  Image1.Top      := 100;
  Image1.Left     := 10;
  Timer1.Interval := 25;
  Timer1.Enabled  := True;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
Var
  x,y : Real;
begin
{
  Timer1->Enabled=false;
  double x=Img->Left+30;
  double y=20*sin(x)+100;
  Img->Left=x;
  Img->Top=y;
  if(x <= 1500)
  Timer1->Enabled=true;
}
  Timer1.Enabled := False;
  x              := Image1.Left + 30;
  Y              :=20*sin(x);
  Image1.Left    := round(x);
  Image1.Top     := round(y);
  If x <= 1500 then
     Timer1.Enabled := True;
end;

Nota que es lo mismo que te puso OSKR pero en lenguaje Pascal.

edusus 18-04-2006 09:36:04

gracias,...
 
Gracias nuevamente por ayudarme a aprender.
Te voy a preguntar algo si es posible, de paso ya verás como no me limito a copiar código.
No entiendo por qué la primera frase en el código del timer lo inhabilita y sin embargo funciona el código que sigue.
Yo no habría podido convertir al código Pascal porque no conozco para nada otro código, así que te lo vuelvo a agradecer.

egostar 19-04-2006 03:10:12

Cita:

Empezado por edusus
No entiendo por qué la primera frase en el código del timer lo inhabilita y sin embargo funciona el código que sigue.

Claro que puedo comentarte el porque hace eso, en el primer bloque tienes un valor 25 en el intervalo de tiempo con la instruccion Timer1.Interval := 25; bueno, esto quiere decir que el evento Ontimer lo va a hacer cada 25 milisegundos (un segundo son 1000 milisegundos) por lo tanto lo pone en Falso para que pueda hacer el siguiente codigo hasta que llegue al limite que son 1500 milisegundos (1 segundo y medio).

Claro está que a manera de ejemplo te sirve para saber que hace, sin embargo, esto se debería modificar a tus necesidades reales.

Saludos


La franja horaria es GMT +2. Ahora son las 18:05:00.

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