es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error al cargar la fuente en SFML C++ en otros ordenadores.

Estoy haciendo un proyecto de SFML utilizando Visual Studio, y tengo un error al compartirlo con otras personas (funciona bien en mi computadora).
Básicamente, ellos obtienen el siguiente error:

Error al cargar la fuente ” ../fonts/BalooPaaji2.ttf ” (error al crear la cara de la fuente)

Entonces intenté desinstalar la fuente en las fuentes de mi sistema operativo y solo mantenerla en el proyecto mismo, y todo sigue funcionando bien para mí.

Pensé que podría ser un problema de directorio, pero si fuera así, ¿por qué el archivo .exe funciona bien para mí y no para otras personas?

Aquí está el código de mi función de escritura:

void write(sf::RenderWindow& window, std::string t1, sf::IntRect rect) {
//cargar fuente
sf::Font font;
font.loadFromFile("../fonts/BalooPaaji2.ttf");

//crear el elemento de texto
sf::Text text(t1, font);
text.setStyle(sf::Text::Bold);
text.setFillColor(sf::Color(0,0,0,150));

//tamaño y posición del elemento de texto según el espacio disponible, esto es específico de mi proyecto (y probablemente se podría optimizar), así que pueden omitir esta parte
text.setCharacterSize(rect.height/2);
sf::FloatRect textRect = text.getLocalBounds();
text.setOrigin(textRect.left + textRect.width / 2.0f, textRect.top + textRect.height / 2.0f);

text.setPosition(sf::Vector2f(rect.left + rect.width/2, rect.top + rect.height / 2));
if (t1 == "Play") {
    text.setPosition(sf::Vector2f(rect.left + rect.width / 2, rect.top + rect.height / 1.8));
}

window.draw(text);

}

Mi estructura se ve así:

Proyecto Estructura

No tengo ninguna pista de dónde podría provenir este problema, cualquier ayuda será apreciada y siéntanse libres de pedir más información si la necesitan.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema parece estar relacionado con el archivo de fuente que no se encuentra en otros equipos. El archivo de fuente actualmente está ubicado en la carpeta del proyecto dentro de una subcarpeta llamada “fonts”. Sin embargo, el código hace referencia al archivo de fuente utilizando una ruta de archivo relativa (“../fonts/BalooPaaji2.ttf”), lo cual asume que el archivo de fuente se encuentra en una carpeta un nivel por encima del archivo de código fuente.

    La mejor solución sería incluir el archivo de fuente en el proyecto y hacer referencia a él utilizando una ruta de archivo relativa que sea relativa al archivo ejecutable, no al archivo de código fuente. Esto significa hacer referencia al archivo de fuente utilizando una ruta de archivo que sea relativa a la carpeta donde se encuentra el archivo ejecutable.

    Una forma de lograr esto sería agregar el archivo de fuente al proyecto en Visual Studio y establecer la propiedad “Copiar en el directorio de salida” en “Copiar siempre” o “Copiar si es más reciente”. Esto asegurará que el archivo de fuente se incluya en la carpeta de salida cuando se construya el proyecto.

    Luego, en el código, ajuste la ruta de archivo para hacer referencia al archivo de fuente utilizando una ruta de archivo relativa que sea relativa al archivo ejecutable.

    Por ejemplo, si el archivo de fuente está ubicado en una subcarpeta llamada “fonts” en la carpeta del proyecto, y el archivo ejecutable está ubicado en una carpeta llamada “bin” junto a la carpeta del proyecto, la ruta de archivo se puede ajustar a:

    font.loadFromFile("../fonts/BalooPaaji2.ttf");
    

    Esto asume que el directorio de trabajo del archivo ejecutable está configurado en la carpeta donde se encuentra el archivo ejecutable (es decir, “bin” en este ejemplo). Esto se puede configurar en Visual Studio ajustando las propiedades del proyecto, específicamente la sección “Depuración”.

    Alternativamente, el archivo de fuente se puede incluir en la misma carpeta que el archivo ejecutable, y la ruta de archivo se puede ajustar en consecuencia:

    font.loadFromFile("BalooPaaji2.ttf");
    

    Nuevamente, esto asume que el directorio de trabajo del archivo ejecutable está configurado en la carpeta donde se encuentra el archivo ejecutable, y el archivo de fuente se incluye en esa carpeta.

Comments are closed.