Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-02-2011
Avatar de Manuzinho
Manuzinho Manuzinho is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 5
Poder: 0
Manuzinho Va por buen camino
Problema para hacer un array a un TImage!

Buenas!

Os comento el problema que tengo... el semestre pasado en la universidad hicimos un tetris, del cuál ya os pregunté una duda que tenía con el TTimer que me solucionásteis al instante. El hecho es que para hacer ese tetris, el profesor de la asignatura de informática nos dio los componentes ya hechos y sólo tubimos que instalar el paquete en el lazarus (el tablero, las piezas...), etc.

Yo quería hacer un Space invaders 'cutre'. He sido capaz de crear un 'tablero negro' con un TImage y con el procedimiento Canvas, y también dibujar un cuadradito en él, rojo, por ejemplo, que se pueda mover por el tablero (que no salga de él), etc.

Mi problema es que es que necesito que cuando, digamos,dos cuadraditos choquen lo detecte el sistema. Para simplificar la vida, y como el profesor lo hizo en el tetris, lo más fácil es dividir el tablero en una matriz de, por ejemplo, 10 por 20. Así podría escribir directamente que si, por ejemplo, un cuadradito rojo está moviéndose hacia la derecha y la casilla siguiente que debería ocupar,
Código Delphi [-]
 Image1[5,2]:=clRed;
, entonces NO puede pasar, choca y se elimina.

Me he pasado muchos días buscando pero NO consigo encontrar COMO dividir un TImage o un TBitmap en celdas para que tengan esa propiedad de tabla. Creo que es con la función array, pero no tengo ni idea...

Si me pudiérais ayudar, os lo agradecería de corazón! Gracias!!!
Responder Con Cita
  #2  
Antiguo 04-02-2011
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Puedes utilizar las propiedad Canvas.Pixels[i,j] del TBitmap
__________________
[Crandel]
Responder Con Cita
  #3  
Antiguo 04-02-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Aunque se ganaría en más velocidad si se empleara .ScanLine()

Como desventaja, hay que poner un poco más de código y algunas operaciones extras.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 05-02-2011
Avatar de Manuzinho
Manuzinho Manuzinho is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 5
Poder: 0
Manuzinho Va por buen camino
Pero con la Canvas.Pixels[i,j] qué hace exactamente? Me lo divide o simplemente me lee la información de un cierto pixel de componentes i,j ??

Y con el ScanLine() qué es lo que hace exactamente??

No sabéis entonces como hacer lo del array?? Según lo que he visto era algo tipo:

Código Delphi [-]
type 
     TImage1 = Image1 array[1..10, 1..20] of TColor

Muchísimas gracias, de cualquier forma!!
Responder Con Cita
  #5  
Antiguo 05-02-2011
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola Manuzinho,

La propiedad Pixels[] permite acceder a un pixel determinado mediante las dos coordenadas: ancho, alto. Es decir que: .Pixels[100,478] hace referencia al pixel ubicado en (100,478) de la imagen.

Imagina a la imagen como una tabla.

Por otro lado .ScanLine permite obtener el puntero de memoria a una línea o fila de la imagen. De este modo se puede "leer" la imagen línea a línea y es mucho más rápido y eficiente que estar operando con .Pixels. Como contra, al usar ScanLine(j) se requiere de un poco más de código... se trabaja a nivel punteros y una vez leído la línea para ubicarnos en la posición (i,j) debemos desplazarnos i lugares.

Si te tomaras el tiempo de buscar en los foros sobre Pixels y ScanLine encontrarás muchos hilos con ejemplos y modos de uso.

Ha... por cierto, en la ayuda que viene con Delphi hay más info.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 05-02-2011
Avatar de Manuzinho
Manuzinho Manuzinho is offline
Registrado
NULL
 
Registrado: nov 2010
Posts: 5
Poder: 0
Manuzinho Va por buen camino
Muchísimas gracias!! El pixels me ha ayudado mucho en lo que quería, el ScanLine() lo intenté, y busqué algo, pero me parece un poco complicado para mi nivel, así que una vez termine con esto y tenga un poco de tiempo me lo miraré...

Aún así no consigo hacer lo que quería hacer exactamente, que era lo de convertir la imagen en una tabla de [x,y] siendo 'x' y 'y' las columnas y tablas que a mí me de la gana... Así como asignarle a esta tabla las propiedades de color, de manera que pueda decir directamente 'tabla[x,y]:=clRed;', por ejemplo...

Gracias!!
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
Problema para hacer un TRACE a una BPL Efren2006 OOP 2 31-12-2008 15:28:29
Mostrar cada imagen de un Array of TImage. rauros Gráficos 1 04-09-2008 17:38:55
Se puede hacer un array de procedures David OOP 25 24-06-2008 10:40:57
como Hacer que un TImage siga a un Timage? j_flores3000 OOP 8 27-03-2008 18:47:50
Problema con Timage despues de hacer LoadFromFile JarLem Varios 6 13-12-2007 11:06:46


La franja horaria es GMT +2. Ahora son las 11:56:19.


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