Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problema para hacer un array a un TImage! (https://www.clubdelphi.com/foros/showthread.php?t=72227)

Manuzinho 04-02-2011 17:54:55

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!!!

Crandel 04-02-2011 23:00:55

Puedes utilizar las propiedad Canvas.Pixels[i,j] del TBitmap

Delphius 04-02-2011 23:02:56

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,

Manuzinho 05-02-2011 00:50:25

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!!

Delphius 05-02-2011 20:17:45

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,

Manuzinho 05-02-2011 23:51:19

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!!


La franja horaria es GMT +2. Ahora son las 23:33:24.

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