Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Mensajes - McKrackeN

#1
Si tuviera tiempo, haría un port. Lo juro! De hecho, me gusta mucho más OpenGL que DirectX. Pero bueno, algún día haré el port o liberaré el código para que alguien más lo haga.
#2
El problema de compilarlo con otro compilador es que utilizo las librerías de DX. Tal vez esté pecando de ignorante, pero no logré hacerlas funcionar con otros compiladores aún intentando convertir las librerías al formato que utiliza el MingW y otros.

Como te decía, la única solución que encontré "googleando" fue la de deshabilitar el manifest pero provocaba el segundo error el cual se solucionaba solo al activarlo.
#3
Si es que el motor está compilado con el Visual C++ Express al que le instalé el Service Pack 1. Es un problema con el manifest. Busqué en internet para evitarlo, y dice que desactive la generación del manifest, pero si lo hago, da un error de que falta una librería dll. Busco por este nuevo error y dice que es un bug en el Visual Studio, que active el manifest. O sea... es un error recursivo y eterno. ¿Solución? Si deseas utilizar el Zak Engine, debes instalar el Service Pack 1 del Visual Studio (maldito microsoft :P).
#4
Muchas gracias por los comentarios!

Y dista mucho de estar terminada, pero ya al menos es una versión estable y lo suficientemente completa como para ser utilizada profesionalmente (al menos a mi parecer).

Un abrazo!
#5
Hola!!

Les comento que ya publiqué la versión 1.0 final de mi motor para el desarrollo de videojuegos 2D Zak Engine. Se trata de un motor muy estable basado en DirectX 8.1 y 9 con documentación completamente en castellano. Está orientado tanto para los que recién se inician en el desarrollo de juegos por su facilidad de uso, como para profesionales por las capacidades que posee.

Para quienes no lo conozcan, dejo acá una lista de las características principales:

   * Sprites animados
   * Mapas de tiles generados a partir del formato de los editores Anaconda Map Editor y Mappy
   * Sonido y música en diversos formatos (wav, mp3, ogg, etc) a través de la librería gratuita Audiere
   * Sistema de scripting (AngelScript)
   * Bitmap Fonts creados a partir de la aplicación Bitmap Font Creator
   * Sistema de partículas
   * Controles visuales (botones, cajas de edición de textos, ventanas, etc)
   * Módulo que encapsula un sistema de red cliente/servidor para juegos multijugador basado en la librería gratuita Enet

Para quienes deseen probarlo, pueden hacerlo en el sitio oficial http://www.zakengine.com.

Un abrazo!
Juan Pablo "McKrackeN" Bettini
http://www.zakengine.com
#6
Programación gráfica / Problema con fonts en DX
22 de Febrero de 2007, 09:09:02 PM
Tengo un drama con los fonts en directX. En realidad, mi problema radica en calcular el ancho en DirectX 8.1 de cada uno de los caracteres. En 9.0 anda perfecto. El código es el siguiente:

#ifndef USING_DIRECTX81
TEXTMETRIC textmetric;
_pDefDXFont->GetTextMetrics(&textmetric);

// si textmetric dice que es truetype tengo que hacer otra cosa

HDC device = _pDefDXFont->GetDC();
GetCharWidth32(device, 32, 255, _characterWidth);

#else


static HDC hdc;

hdc = CreateCompatibleDC(NULL);
SelectObject(hdc, _pDefDXFont);

GetCharWidth32(hdc, 32, 255, _characterWidth);

DeleteDC(hdc);

#endif


El tema es que me devuelve valores completamente diferentes en el arreglo de enteros _characterWidth en el caso de usar DX 9.0 contra DX 8.1.

El código completo es el siguiente:


bool Widget::SetFont(ZAK_FONT_TYPES ft, int size)
{
static wstring strFt;

switch (ft)
{
case FT_ARIAL:
strFt = L"Arial";
break;
case FT_COURIER:
strFt = L"Courier New";
break;
case FT_TIMES:
strFt = L"Times New Roman";
break;
case FT_VERDANA:
strFt = L"Verdana";
break;
case FT_TAHOMA:
strFt = L"Tahoma";
break;
default:
Log.Trace("%s: %d", Message::getMessage(Message::CantCreateFont).c_str(), strFt.c_str());
return false;
break;
}

_pDefDXFontType = ft;
#ifdef USING_DIRECTX81
LOGFONTW fontDesc = { size, // Alto (px)
0, // Ancho (px)
0,
0,
FW_DONTCARE,
FALSE,
FALSE,
FALSE,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH,
L""};

wcscpy(fontDesc.lfFaceName, strFt.c_str());
#else
D3DXFONT_DESC fontDesc = { size, // Alto (px)
  0, // Ancho (px)
          FW_DONTCARE, // Grosor (número de 0 a 1000)
  1, // MipLevels (normalmente 1 o D3DX_DEFAULT)
  FALSE, // Itálica
  DEFAULT_CHARSET, // Set de caracteres
  OUT_DEFAULT_PRECIS, // Precisión
  DEFAULT_QUALITY, // Calidad (influye en velocidad de render)
  DEFAULT_PITCH, // Pitch
  L""}; // Nombre de la fuente

wcscpy(fontDesc.FaceName, strFt.c_str());
#endif

// Si ya existe una fuente creada en _pDefDXFont, la libero
if (_pDefDXFont != NULL)
_pDefDXFont->Release();

HRESULT hr = D3DXCreateFontIndirect(g_renderer.GetDevice(), &fontDesc, &_pDefDXFont);

if (FAILED(hr))
{
// No se pudo crear la fuente
Log.Trace("%s: %s", Message::getMessage(Message::CantCreateFont).c_str(), strFt.c_str());
return false;
}

if (_characterWidth)
delete [] _characterWidth;

_characterWidth = new INT[255];

#ifndef USING_DIRECTX81
TEXTMETRIC textmetric;
_pDefDXFont->GetTextMetrics(&textmetric);

// si textmetric dice que es truetype tengo que hacer otra cosa

HDC device = _pDefDXFont->GetDC();
GetCharWidth32(device, 32, 255, _characterWidth);

#else


static HDC hdc;

hdc = CreateCompatibleDC(NULL);
SelectObject(hdc, _pDefDXFont);

GetCharWidth32(hdc, 32, 255, _characterWidth);

DeleteDC(hdc);

#endif

if (FAILED(hr))
{
// No se pudo crear la fuente
Log.Trace("%s: %s", Message::getMessage(Message::CantCreateFont).c_str(), strFt.c_str());
return false;
}

_size = size;

return true;
}


Si alguien tuvo el drama, si me puede comentar qué es lo que debo hacer para DX 8.1, estaría genial.

Gracias!!!!
#7
Programación gráfica / Duda de novato: Limites de un Sprite
19 de Febrero de 2007, 06:20:23 PM
No se si esa placa tiene ese problema, pero de todas formas por el síntoma que describís es muy probable que sea por el tamaño de la textura.

Intenta modificando el tamaño para que quede como textura cuadrada con potencia de 2 a la n píxeles por lado.

De nada!  Justo vi tu post cuando lo terminaste de escribir... pura casualidad! ;)
#8
Programación gráfica / Duda de novato: Limites de un Sprite
19 de Febrero de 2007, 06:09:31 PM
Muchas placas de video no soportan texturas que no sean cuadradas y de potencia de 2 a la n píxeles por lado, es decir que las texturas pueden ser de 64x64, 128x128, 256x256 y así sucesivamente. El máximo del tamaño dependerá de la placa vídeo que tengas. En el caso de una GeForce2 creo que su máximo es 2048x2048, una RivaTNT2 creo que es de 1024x1024 como máximo.

Espero que te sirva la respuesta. ;)
#9
Hola!

Desarrollé el motor Zak Engine y desearía saber si alguien sabe cómo esperar a que la aplicación haya terminado de inicializar el modo pantalla completa. Por ejemplo, yo ejecuto la aplicación, comienza a inicializar cambiando la resolución y demás, y debería mostrar una pantalla negra y de a poco aparecerá con un efecto de fade el logo del motor y luego desaparece con el mismo efecto. Mi problema es que para cuando inicializó, ya me muestra el logo como si en realidad ya estuviese actualizando y funcionando mientras el sistema está intentando cambiar la resolución. No sucede así en modo ventana puesto que inicia mucho más rápido.

¿Hay alguna manera de esperar a que finalice el cambio o simplemente tengo que hacerlo a mano esperando un tiempo?

[EDIT]
El motor corre bajo DirectX 8.1 y 9.
[/EDIT]
#10
Programación gráfica / breakout, colision con los ladrillos
04 de Febrero de 2007, 02:55:30 AM
de nada! ;) saludos compatriota! :P
#11
Programación gráfica / breakout, colision con los ladrillos
03 de Febrero de 2007, 10:12:28 PM
Por empezar podrías dividir la pantalla en zonas. Si la bolita esta dentro de una de ellas, chequeas la colisión solo contra los ladrillos de dicha zona.

Otra optimización que podés hacer es chequear grupos de ladrillos encerrados en un círculo. La colisión por círculos es mucho más rápida (obviamente si simplificás la raiz cuadrada para hacerla desaparecer porque es muy lento).

Por ejemplo:  raizcuadrada(distancia1^2 + distancia2^2) <= radio1+radio2 te quedaría distancia1^2 + distancia2^2 <= (radio1+radio2)^2.

Luego, si colisionan ambos círculos, recién allí chequeas por cajas.
#12
Programación gráfica / ZakEngine 1.0 RC1 con documentación!
02 de Febrero de 2007, 10:58:16 PM
Gracias! :)

Si, es un tributo al Uridium! :) Amo a ese juego! ;)
#13
Programación gráfica / ZakEngine 1.0 RC1 con documentación!
02 de Febrero de 2007, 10:33:00 PM
Acabo de subir screenshots y ejemplos al site. ;)
#14
Programación gráfica / ZakEngine 1.0 RC1 con documentación!
02 de Febrero de 2007, 02:52:40 PM
Sí, en breve voy a estar subiendo ejemplos, screenshots y algún que otro tutorial. El tema es que estoy terminando de escribir un libro sobre desarrollo de juegos y tengo por fecha límite el 16 de febrero así que estoy bastante apretado de tiempo. Pero ya falta poco! les aviso cuando haya novedades. :)
#15
Programación gráfica / ZakEngine 1.0 RC1 con documentación!
02 de Febrero de 2007, 12:59:01 PM
Oops. Perdón. Ahora la saco. :)





Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.