Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-05-2010
chinopom chinopom is offline
Registrado
 
Registrado: may 2010
Posts: 8
Poder: 0
chinopom Va por buen camino
Smile [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

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
Responder Con Cita
  #2  
Antiguo 18-05-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
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...

Última edición por Lord Delfos fecha: 18-05-2010 a las 21:36:53.
Responder Con Cita
  #3  
Antiguo 20-05-2010
chinopom chinopom is offline
Registrado
 
Registrado: may 2010
Posts: 8
Poder: 0
chinopom Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 20-05-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 22-05-2010
chinopom chinopom is offline
Registrado
 
Registrado: may 2010
Posts: 8
Poder: 0
chinopom Va por buen camino
Cita:
Empezado por Lord Delfos Ver Mensaje
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
El programa se queda "colgado" mientras copia y luego "despierta" NeWsP OOP 5 10-03-2010 22:05:40
"OBJECT OR CLASS TYPE REQUIRED" en "APPLICATION EXENAME" Xavierator Varios 3 27-10-2008 09:09:50
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
¿cuál es mejor: "close" o "application.terminate"? unreal4u Varios 5 05-03-2007 11:01:19
"ChequeaEsto" elegido el futuro "Killer CLubDelphi" mamcx Noticias 51 31-10-2006 20:56:32


La franja horaria es GMT +2. Ahora son las 12:31:51.


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
Copyright 1996-2007 Club Delphi