Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #6  
Antiguo 07-11-2024
CarlosR CarlosR is offline
Miembro
 
Registrado: sep 2015
Posts: 147
Poder: 11
CarlosR Va por buen camino
Algo distinto para variar

Cita:
Empezado por navbuoy Ver Mensaje
Bueno, aun habria mucha tela que cortar a este respecto de temas Isometricos pero os muestro lo que hice asi por probar a ver como dibujar un terreno con un sprite isometrico

el sprite es este:



y el codigo es este:
(tened en cuenta que TABLERO es un TImage pero para que dibuje ha de contener primero algun Bitmap (si el TImage no tiene nada fallara al dibujar))

y luego hice 2 funciones una que dibuja el terreno de forma romboide (que personalmente no me gusta mucho) y otro mas ajustado a toda la pantalla de forma rectangular

Código:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "acPNG"
#pragma resource "*.dfm"
TForm1 *Form1;

void DibujarMapaIsometricoConSprite(TImage *mapImage, TImage *spriteImage, int filas, int columnas);
void DibujarMapaIsometricoRectangular(TImage *mapImage, TImage *spriteImage, int filas, int columnas);

int spriteWidth = 128;
int spriteHeight = 128;
int filas = 10;    // Número de filas del mapa
int columnas = 10; // Número de columnas del mapa

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);
}

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{

 DibujarMapaIsometricoRectangular(Form1->TABLERO, Form1->SpriteImage, 10, 10);
}
//---------------------------------------------------------------------------
void DibujarMapaIsometricoConSprite(TImage *mapImage, TImage *spriteImage, int filas, int columnas) {
    // Limpiar el lienzo antes de dibujar
    mapImage->Picture->Bitmap->Canvas->FillRect(mapImage->ClientRect);
    for (int y = 0; y < filas; y++) {
        for (int x = 0; x < columnas; x++) {
            // Convertir coordenadas de la cuadrícula a coordenadas isométricas
            int x_iso = (x - y) * (spriteWidth / 2) + (mapImage->Width / 2);
            int y_iso = (x + y) * (spriteHeight / 2);
            // Dibujar el sprite en las coordenadas calculadas
            mapImage->Canvas->Draw(x_iso, y_iso, spriteImage->Picture->Bitmap);
        }
    }
}

void DibujarMapaIsometricoRectangular(TImage *mapImage, TImage *spriteImage, int filas, int columnas) {
    // Limpiar el lienzo antes de dibujar
    mapImage->Picture->Bitmap->Canvas->FillRect(mapImage->ClientRect);
    // Dimensiones del sprite
    int spriteWidth = spriteImage->Width;
    int spriteHeight = spriteImage->Height;
    for (int y = 0; y < filas; ++y)
        {

        for (int x = 0; x < columnas; ++x)
       {
            TPoint pos = PosPt(x, y);

            // Dibujar el sprite en las coordenadas calculadas
            mapImage->Canvas->Draw(pos.x, pos.y, spriteImage->Picture->Bitmap);
        }
    }
}
y el resultado es este:




Muy interesante.

Si le añadieses una coordenada de altura podría parecer un render de autocad en sus comienzos.

Bromas aparte, un buen aporte.
Saludos.
Responder Con Cita
 



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
Programa simple con MAPA DE ARGENTINA pape19 Varios 7 24-01-2012 17:23:04
Windows pierde terreno Casimiro Noteví La Taberna 10 04-12-2008 07:08:46
Como Pasar Variables de Forma a Forma con delphi.net ASP ASAPLTDA Internet 2 02-07-2007 16:26:41
second life, terreno sin ley gmontes La Taberna 2 16-05-2007 10:49:13
Linux va ganando terreno como SO para internet DarkByte Noticias 1 20-11-2003 18:08:15


La franja horaria es GMT +2. Ahora son las 13:26:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi