Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-07-2010
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Ayuda al utilizar TImage como pintura para crear mapas al estilo de juegos antiguos

Estoy intentando crear algo parecido a los mapas que hace el programa RPG Maker.
Para los que no sepan a qué me refiero, en los videojuegos antiguos los mapas se componían por trocitos de imagen uno al lado de otro y así se componían los escenarios, eso es lo que quiero hacer.
Las imágenes que quiero utilizar de pintura son de 32x32.
Tengo unas imágenes grandes con medidas múltipos de 32, que al hacer click sobre ellas tomo como pintura el trozo correspondiente si la dividiéramos en cuadrados de 32x32.
Tengo un mapa compuesto por TImages de 32x32 con un evento OnDragOver que pinta con la pintura que hayamos elegido.

El problema está en que ahora mismo para pintar tengo un TImage auxiliar de 32x32 a la que, al hacer click en la imagen grande, asigno como Canvas el trozo de imagen correspondiente, y al hacer click sobre el mapa lo que hago es copiar el Canvas de la imagen pincel en el Canvas de las imágenes del mapa. Lo que me gustaría hacer es que el Canvas de la imagen del mapa hiciera referencia al trozo de la imagen grande, para que cada Cuadrado del mapa no ocupara memoria, sino que fuera un puntero o algo por el estilo, y así también, si se cambiara la imagen grande, no tener que cambiar cada imagen del mapa una a una, ya que se cambiaría automáticamente.

Un saludo y gracias por vuestro tiempo.

PD: Como posible solución se me ha ocurrido crear un TImage por cada Cuadrado 32x32 en que se dividiría la imagen grande y hacer referencia a estos, pero no sé si sería una solución cutre.
Responder Con Cita
  #2  
Antiguo 17-07-2010
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola,
lo mejor que puedes hacer entonces no es copiar directamente de la imagen al canvas digamos destino, sino crear un mapa donde este, por ejemplo, un numero identificador del bitmap que necesitas. Entonces recorrer este mapa (que puede ser un doble array, por ejemplo 1000x100) de integer y ir leyendo sus valores. Al encontrar por ejemplo un uno, pintas en el canvas destino el bitmap nº1, etc...Para usar la lista de bitmaps no te haria falta creartela tu, existe el componente bitmaplist el cual ya simplifica bastante esta tarea. Espero que te sirva, un saludo.
Responder Con Cita
  #3  
Antiguo 18-07-2010
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Gracias por la respuesta.
Lo de utilizar enteros es lo que tenía pensado, sólo que además hace falta un TImage en el que representar el trozo de mapa, estaba probando esta parte porque era la que más dudas me generaba.
Finalmente creo que seguiré mostrando la imagen grande y crearé un BitmapList representando las imágenes 32x32 en las que se subdivide, y en el evento OnMouseDown de la imagen grande, en función de donde se haya hecho click haga referencia a una de las imágenes del BitmapList (cogerá el valor entero de la lista del BitmapList en lugar de cargar el canvas en una imagen auxiliar).

Ahora me surge otro problema, hasta ahora estaba probando a crear mapas de 20x15 e iba genial, he probado a crear uno de 500x500 y al iniciarlo me da un problema de "Violación de acceso de memoria en la dirección TAL" ¿Esto es porque pido demasiada memoria? ¿Porque pide tanta memoria seguida que se pisa él solo? Tengo 4GB de RAM, no creo que ese sea el problema, y aunque la ocupara toda supongo que el propio Windows utilizaría memoria virtual.
Lo que he pensado para solucionar esto es crear sólo los objetos que se puedan mostrar en pantalla e ir creando y eliminando conforme se mueven los ScrollBars del ScrollBox que los contiene, aunque no sé si se me quedará grande saber hacer eso, además de que habría que tener en cuenta cuándo se cambia el tamaño de la ventana y puede que más cosas.
¿Consejos?

Un saludo.
Responder Con Cita
  #4  
Antiguo 19-07-2010
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
He intentado ponerme con lo de pedir memoria dinámicamente para los trozos de mapa que se muestren, pero no encuentro nungún evento en el ScrollBox para cuando mueva las barras de desplazamiento, o en definitiva, muestre otra parte del contenido scrollbox, esperaba un evento OnScroll, pero no lo tiene, el objeto TScrollBar sí lo tiene, pero no sé usarlo, aun así, creo que no es lo que debería usar, ¿O sí?
Creo que este mensaje empieza a no encajar en este subforo.
Por cierto, ¿Con BitmapList te referías al ImageList? Es que no encuentro la manera de usar un BitmapList, ni desde autocompletar ni en la ayuda.

Un saludo.

Última edición por Kandorf fecha: 19-07-2010 a las 02:12:34.
Responder Con Cita
  #5  
Antiguo 19-07-2010
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Ya he hecho lo de los BitmapList, he intentado hacerlo hacerlo con un ImageList, pero no sabía cómo añadir y borrar imágenes, así que al final he optado por hacer un array de TPicture, que puede que hasta sea más eficiente, el programa va perfecto.
El problema que tengo ahora es el de no poder pedir memoria para un mapa de 500x500 y tener que ir cargando el mapa según la zona que se muestre del ScrollBox, si existiera un evento OnScroll para el ScrollBox mi vida sería mucho más fácil.

Esto se está convirtiendo en mis relatos, sólo escribo yo...

Si veo que no responde nadie, postearé la duda en el subforo de POO, que creo que es más adecuado.

Saludos.
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
COMO CREAR UN dbGRID ESTILO CLIPPER stringgrid ASAPLTDA OOP 1 16-04-2006 16:05:48
crear DLL para utilizar con ASP altp Varios 0 29-11-2005 11:14:31
COmo graficar mapas, para crystal reports Vamvam Varios 1 29-11-2005 10:18:08
Crear Mapas sergio_015 Gráficos 2 17-04-2004 17:45:14
Utilizar antiguos componentes con Delphi8 Architect SMTZ Varios 1 11-04-2004 11:57:42


La franja horaria es GMT +2. Ahora son las 16:55:18.


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