PDA

Ver la Versión Completa : Mover Imagen


jorgito.crazy
29-06-2006, 20:43:46
Hola a todos, ¿por que?, cuando muevo una imagen, esta hace como si se cargace otra vez en cada posición que adopta, es decir se pone blanca como si se refrescara, he visto en este foro que se habla de OpenGL, ¿será que tengo que usar esta libreria para mi proposito?, ¿supongo que OpenGL se usa para todo lo que tenga que ver con gráfico no?, me gustaria una ayudita con esto de OpenGL, pues me interesa, lo único que sé hasta ahora es que tengo que agregarlo a la USES de la Form. Ha, la imagen la muevo asi, por si ayuda en algo:

Timer1(On Timer)[Interval:=1]: Image1.left:=image1.left+1;:(

Gracias de antemano;)

Deiv
02-07-2006, 15:11:52
Yo muevo así (con u TTimer de 100 o 150en velocidad y en propiedades: Enabled=false):

var
i: integer=0;
G:TBitMap;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
G:= TBitMap.Create;
G.LoadFromFile('MiBMP');
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Canvas.Brush.Color := clBtnFace;
Canvas.FillRect(Rect(10+i-2, 10, 10+I, 10+G.Height)); //borra el anterior rect
Bitblt(Canvas.Handle, 10 + i, 10, G.Width, G.Height, G.Canvas.Handle, 0, 0, SRCCOPY);
i:=i+2;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
G.Free;
end;

ó con una TImage:

var
i: integer=0;
implementation
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Image1.Left:=Image1.Left+4;
i:=i+4;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.DoubleBuffered:=true;
end;
Espero te sirva
Saludos

kuan-yiu
03-07-2006, 12:51:05
Hola a todos, ¿por que?, cuando muevo una imagen, esta hace como si se cargace otra vez en cada posición que adopta, es decir se pone blanca como si se refrescara, he visto en este foro que se habla de OpenGL, ¿será que tengo que usar esta libreria para mi proposito?, ¿supongo que OpenGL se usa para todo lo que tenga que ver con gráfico no?, me gustaria una ayudita con esto de OpenGL, pues me interesa, lo único que sé hasta ahora es que tengo que agregarlo a la USES de la Form. Ha, la imagen la muevo asi, por si ayuda en algo:

Timer1(On Timer)[Interval:=1]: Image1.left:=image1.left+1;:(

Gracias de antemano;)
Por partes:

* Cada vez que mueves algo (entre otras cosas) se repinta en la nueva posición, pero que veas ese pestañeo es señal de que o no tiene memoria suficiente para mover una imagen tan grande o que está haciendo un uso incorrecto de los buffers.

* Si nunca has usado OpenGL, te recomiendo que busques la librería GLScene, que es muchísimo más sencilla e igualmente potente. Es una auténtica librería de componentes (orientada a objetos) con muchas demos que te ayudarán a empezar.

jorgito.crazy
03-07-2006, 16:08:43
Bien!, muchas gracias Diev.

En cuanto a ti Kuan, en el ejemplo de Diev (el segundo), me pone form1.doublebuffered (algo asi), tu me dices que puede que use mal los buffers, ¿puedes darme una ayuda con esto de los Buffers?, es primera vez que veo esto, y bueno, donde puedo encontrar Glscene, vere si lo encuentro, y muchas gracias, además ya sé que me dijiste que glscene es menos complicado, pero puedes por favor ponerme un ejemplo de código simple para ver como funciona OpenGL, es que me muero de curiosidad, Gracias de nuevo Kuan, un Saludo.:)

kuan-yiu
03-07-2006, 19:12:00
Si usas el buscador del foro encontrarás este hilo (http://www.clubdelphi.com/foros/showthread.php?t=32849&highlight=glscene) o este otro (http://www.clubdelphi.com/foros/showthread.php?t=32103&highlight=glscene) en el que te indican un par de sitios en los que puedes obtener la librería.

Sobre lo del ejemplo... instálala y ejecuta cualquiera de las demos, luego mira el código y verás lo simple que es: un par de componentes, y crear formas es tan sencillo como montar un "TENTE".

kuan-yiu
03-07-2006, 19:21:52
[...] ¿puedes darme una ayuda con esto de los Buffers?, [...]
Lo olvidaba.
En general siempre que utilices algún tipo de animación, la que sea, es necesario activar el doble buffering que básicamente consiste en tener dos espacios en memoria reservados para ir "dibujando" la imagen, así mientras se escribe uno se lee el otro... Resumiendo mucho, mucho.

jorgito.crazy
03-07-2006, 20:50:16
Disculpa, pero no en encuentro Glscene en el sitio que señalan los hilos, he bajado algo de glscene: "GLScene_SnapShot_100506.7z", como ya vez tiene una extensión extraña, supongo que no es la librería sino un utilitario de esta, exactemente de donde lo puedo bajar, en cuanto a lo del Buffer, por favor explicamelo un poco más, por ejemplo, ¿Como trabajaría DoubleBuffer en un richedit, existe triplebufer?. Por lo que parece sabes mucho acerca de este tema, ya que no tengo el Glscene todavía, por favor te lo pido, dame un ejemplo, un empujón, una luz de como usar OpenGl que es el que tengo a mano y muchas gracias por la ayuda.:cool:

kuan-yiu
04-07-2006, 10:09:31
Disculpa, pero no en encuentro Glscene en el sitio que señalan los hilos, he bajado algo de glscene: "GLScene_SnapShot_100506.7z", como ya vez tiene una extensión extraña, [...]
Es la librería, lo que ocurre es que está comprimida con 7-zip. Busca la extensión en Google (".7z") y encontrarás la descarga. Luego sólo tienes que descomprimirlo e instalar los paquetes que correspondan a la versión de Delphi con la que trabajas. Si ya lo has hecho alguna vez no tardarás mucho.
Yo la estoy mirando ahora mismo y veo que trae algunas demos que me ayudaron mucho.

jorgito.crazy
04-07-2006, 15:11:11
Hola Kuan, ya baje el 7-zip y descompacte GLScene, pero ¿que hago ahora para usarlo?, hay muchas carpetas, la de delphi7(el que yo tengo), tiene muchos .dpk,¿ que se supone que deba hacer con ellos?, además no puedo compilar ningún demo, ¿por favor que debo hacer?, Muchas gracias por tu pasiencia.


Saludos:D

kuan-yiu
04-07-2006, 16:55:06
Hola Kuan, ya baje el 7-zip y descompacte GLScene, pero ¿que hago ahora para usarlo?, hay muchas carpetas, la de delphi7(el que yo tengo), tiene muchos .dpk,¿ que se supone que deba hacer con ellos?, además no puedo compilar ningún demo, ¿por favor que debo hacer?, Muchas gracias por tu pasiencia.


Saludos:D
jejeje... tranquilo, tengo mucha paciencia.
¿Has instalado alguna vez una librería problemática? Porque eso es GLScene, pero aún así merece la pena el trabajo de instalarlo.

Yo lo hago así:
1) Creo una carpeta llamada GLScene dentro de la carpeta lib en la que está instalado Delphi.
2) Descomprimo en ésta la última versión que quiero instalar.
3) Busco el documento "Readme" por si hay alguna indicación relevante, que casi siempre la hay.
4) Abro Delphi y cierro todos los proyectos, para tenerlo "limpio" antes de empezar a instalar.
5) Abro el paquete "GLScene7.dpk" (en mi caso porque lo que tengo es Delphi 7) lo compilo y lo instalo.
6) Si no compila por que no encuentra algún fichero que realmente existe, añado la ruta en la que se encuentra ese fichero al "Library Path" (Environment Options).
7) Me aseguro que aparecen las pestañas (unas 4, aunque depende de la instalación) al final de las pestañas de componentes y las reubico en una posición más accesible.

8) Me voy a la carpeta Demos y ejecuto una para asegurarme de que se instaló bien.

jorgito.crazy
04-07-2006, 17:12:31
Vaya, espero que no se agote:) , hice más o menos lo que me dijiste, pero, dice cuando trato de cargar el AirBlast que me falta Airblast.res, ¿que debo hacer?(no lo encuentro por ningun lado, creo que no está), y ya lo último es: como visualizo lo que hago con los componentes, solo los pongo en la Form, trasteo un poco sus propiedades y cuando "Run", la Form me aparece en blanco como si nada hibiese pasado.

Gracias de nuevo por tu ayuda,pasiencia y un gran Saludo;) :o :) :D

kuan-yiu
04-07-2006, 17:14:26
He encontrado este tutorial (http://webon.euetib.upc.es/samir/materiales/daie_tutorial1.pdf) sobre cómo instalar GLScene. Mira a ver si te has olvidado de algo, yo sí, jejeje, es que ha cambiado algo la instalación desde la última versión que usé.

balibrea
04-07-2006, 19:47:27
:) hola como estan todos los que quieran escribirme mi e-mail

balibrea@golfo.grm.sld.cu:p

balibrea
04-07-2006, 19:54:48
:) Hola amigos del club de delphi deseo encontrar nuevos amigos a traves del mismo y asi poder intercambiar ideas acerca de la informatica ya que todo lo relacionado con el tema es de gran interes para mi y de ayuda,ok recuerden que mi e-mail es el siguiente:

balibrea@golfo.grm.sld.cu

jorge balibrea espinosa

jorgito.crazy
05-07-2006, 13:34:21
OK, muchas gracias por todo Kuan

Saludos:D :D :D :D :D

@bel
05-07-2006, 15:34:29
En realidad no quiero responderte al tema, solo quiero agradecerte por haberme ayudado a encontrar la página.

Despues te escribo con màs tiempo que tengo clases ahora

Saludos
@bel;)