FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
tablero con TImages error raro
Hola amigos, a ver si alguien pudiese darme alguna indicacion de porque esto falla
tengo una rutina que dibuja en pantalla un tablero de hexagonos pero en modo 2D, esto es dibujando alternado en 2 bucles for las casillas hexagonales pero en realidad es como si dibujase en una rejilla 2D en horizontal y vertical la cuestion, es que estoy tratando de que cuando cliqueo en una de las casillas, resaltarla y eso (en plan como que esta seleccionada) y el codigo en el OnMouseDown lo tengo asi Código:
// Busca celda bool found = false; int col, row; for (int y = 0; y < 17; y++) { for (int x = 0; x < 12; x++) { TPoint pos = PosPt(x, y); if (PtInRect(celda[x][y].rect, Point(X, Y))) { found = true; col = x; row = y; CELDA_SELECTED.x = x; CELDA_SELECTED.y = y; Caption = found ? String().sprintf(L"%d, %d", col, row) : String("<no>"); break; } } } la funcion PosPt es esta Código:
//--------------------------------------------------------------------------- inline TPoint PosPt(int x, int y) { /* --> */ const int sx = 60, sy = 34; //separación return Point((y&1)*sx + x*sx*2, y*sy); } //--------------------------------------------------------------------------- Última edición por navbuoy fecha: 24-05-2024 a las 19:00:02. |
#2
|
||||
|
||||
Es difícil saber qué está fallando sin más código.
Hay referencias ahí que no están presentes (celda[x][y]). Deberías generar un log con la posición de los hexágonos creados y el punto donde estás pulsando con el ratón, para detectar el error.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
Gracias por responder Neftali
te cuento, el bucle de dibujado de rectangulos/hexagonos es asi Código:
#define ICON_WIDTH 76 #define ICON_HEIGHT 76 for (int y = 0; y < 17; ++y) { for (int x = 0; x < 12; ++x) { TPoint pos = PosPt(x, y); celda[x][y].rect = TRect(pos.x, pos.y, pos.x + ICON_WIDTH, pos.y + ICON_HEIGHT); if(color == 1) TABLERO->Canvas->Draw(pos.x, pos.y, hexbitmap1->Picture->Graphic); else if(color == 2) TABLERO->Canvas->Draw(pos.x, pos.y, Image20->Picture->Graphic); if(y%2 == 0) TABLERO->Canvas->Draw(pos.x, pos.y, small_hex_orange->Picture->Graphic); } } y "celda" esta definido asi, aunque tiene otras variables que aun no uso la que nos compete es "TRect rect" que como es obvio, almacena las coordenadas del hexagono/rectangulo para luego hacer la comprobacion de PtInRect() Código:
struct uni { struct { TRect rect; bool flag; int icon; int owner; int energy_level; int faction; struct conv convoy[8]; } celda[12][17]; } UNIVERSE[MAX_UNIVERSE]; |
#4
|
|||
|
|||
neftali, no se muy bien lo que he tocado pero ya lo he arreglado
me parece que lo que cambie es las coordenadas de los bucles de 17 puse 15 y ahora si que detecta todas las celdas podria ser eso? |
#5
|
|||
|
|||
una cosa mas Neftali, si sabemos que los hexagonos van numerados en los bucles de izquierda a derecha y de arriba a abajo como haria para calcular la posicion del registro en la BD si tengo las coordenadas x,y de la celda de pantalla (hexagono)? son para X = 11 filas y para Y = 12 columnas el tablero
seria algo asi como X + (X * Y) ??? Te muestro como queda ahora Última edición por navbuoy fecha: 28-05-2024 a las 16:35:07. |
#6
|
||||
|
||||
Cita:
Si tienes 11 filas (X) y 12 columnas (Y), una posición Z, debería devolverte un indice con esta fórmula:
Por ejemplo: * Si pulsas la casilla 6 de la primera fila (6,1) => Z=((1-1)*12)+6 => Z=6 * Si pulsas la casilla 2 de la segunda fila (2,2) => Z=((2-1)*12)+2 => Z=14 NOTA: Si el primer índice es el 0, a la Z deberás restarle 1. Por cierto, ¿la pantalla la has diseñado tú? es espectacular!
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Error muy raro con ntdll.dll | moz_an | Varios | 8 | 05-01-2011 14:30:04 |
error raro | 11_8_88 | C++ Builder | 1 | 03-12-2008 20:37:01 |
Un error raro..... | Rafe | Varios | 3 | 28-07-2005 23:07:02 |
un error un poco raro | merlin | Conexión con bases de datos | 2 | 19-07-2004 12:45:06 |
|