Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   [AYUDA] con coponentes Timage "sobrepuestos" (https://www.clubdelphi.com/foros/showthread.php?t=67984)

chinopom 18-05-2010 05:04:17

[AYUDA] con coponentes Timage "sobrepuestos"
 
Buenas noches comunidad, me encuentro creando un juego pero me encuentro en este problema... tengo 2 componentes Timage que son

imgchar1.picture (de 50x50)
imgchar2.picture (de 50x50)

imgchar1 lo controla el usuario
imgchar2 lo controla el ordenador con un componente TTIMER siguiendo a imgchar1

Lo que quiero hacer es que cuando char2 alcance a char1 termine el juego

este es el codigo que emple teniendo en cuenta que cada personaje mide 50x50... la idea de mi algoritmo es que cuando char2 este en el rango XY de char1, por "logica" estaria en sus escalas XY y el juego tendria que terminar pero n me queda

Delphi no me da error ni nada pero el algoritmo no funciona :confused:

aqui el codigo:
Código:

//Codigo dentro de un componente Timer a un intervalo de 1//

Var
  c1X, c1Xn, c1Y, c2Y, c1Yn, c2Yn, c2X, c2Xn : integer;

begin
c1X := imgchar1.Left;
c1Xn := c1X + 50;
c1Y := imgchar1.Top;
c1Yn := imgchar1.Top + 50;

c2X := imgchar2.Left;
c2Xn := c2X + 50;
c2Y := imgchar2.Top;
c2Yn := imgchar2.Top + 50;

if (c2X in [c1X..c1Xn]) and (c2Y in[c1Y..c1Yn]) then
begin
  showmessage('Dentro del rango');
end;

Las variables estan constituidas de la siguiente manera:
c1X = 'c1' de char1 / 'X' de coordenadas X
c1Xn = 'c1' de char1 / 'X' de coordenadas X / 'n' de numero elevado a la n potencia (incognita)
(Los mismo se aplica para c1Y - tanto para char1 como para char2)

Si alguien da con el error de este algoritmo porfavor hechenme la mano
Gracias por su tiempo :)

Lord Delfos 18-05-2010 21:30:32

Creo que el problema está en que los conjuntos no pueden tener más de 255 elementos. Y los números con los que vos formás en conjunto son integers que superan el valor 255. Si ponés las imágenes cerca de los bordes superior e izquierdo, (es decir que el valor c1X, c1Xn, etc. son menores a 255) vas a ver que funciona.

La solución es no usar conjuntos.

Código Delphi [-]
if (c2X >= c1X) and (c2X < c1Xn) and (c2Y >= c1Y) and (c2Y < c1Yn) then
  showmessage('Dentro del rango');

EDIT: Por cierto, esto funciona únicamente cuando la imagen 2 viene por la izquierda/abajo de la imagen 1...

chinopom 20-05-2010 03:48:30

Muchas gracias por tu contestancion Lord pero no me funciono :(
Intente haciendo el FORM a escalas 250x250 y si funciona mi algoritmo pero la ventana queda muy pequeña

intente poniendo las variables a tipo 'extended' pero en la sentencia IF al compilar marca error

Lord, el algoritmo que me diste no funciona por que lo que pasa es que cuando char1 y char2 tanto XY estan sobrepuestas el juego termina, pero no cuando esta entre los rangos de x... n

Alguna otra solucion?

Gracias por tu tiempo

Lord Delfos 20-05-2010 04:55:51

Hmm... Entonces no entendí nada de lo que estabas diciendo :)

Lo que yo entiendo:

[1] Tenés dos imágenes (TImage) que se mueven por la ventana (o una imagen quieta y la otra que se mueve).

[2] Querés saber cuándo las dos imágenes se están "tocando" o superponiendo una con la otra.

Eso es lo que yo entendí... Ahora, evidentemente no era así la cosa. :)

¿Podrías tratar de explicarlo un poco más?

Saludetes.

chinopom 22-05-2010 10:01:08

Cita:

Empezado por Lord Delfos (Mensaje 364716)
Hmm... Entonces no entendí nada de lo que estabas diciendo :)

Lo que yo entiendo:

[1] Tenés dos imágenes (TImage) que se mueven por la ventana (o una imagen quieta y la otra que se mueve).

[2] Querés saber cuándo las dos imágenes se están "tocando" o superponiendo una con la otra.

Eso es lo que yo entendí... Ahora, evidentemente no era así la cosa. :)

¿Podrías tratar de explicarlo un poco más?

Saludetes.

mmm... si entendiste bien amigo, solo que ya intente empleando el codigo que me hiciste favor de proporcionarme solo que no da un buen resultado, por que como lo menciono antes con tu codigo cuando esta entre los rangos que debe de estar simplemente no pasa nada, sin embargo en el unico momento que pasa algo es cuando los 2 componentes timage 1 y 2 Top y Left son iguales... pero solo cuando son iguales y no cuando estan entre el rango que tienen que estar que seria lo correcto

gracias por tu tiempo


La franja horaria es GMT +2. Ahora son las 03:22:21.

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