SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › Ошибка при работе с текстом.
В этой теме 8 ответов, 3 участника, последнее обновление BEETER 8 года/лет, 7 мес. назад.
-
АвторСообщения
-
При работе с sfml возникла ошибка, делаю все как сказано в уроках, создаю переменную для стиля, загружаю с файла, и вот именно ошибка заключается в загрузки стиля
font.loadFromFile(“NFS.ttf”);
если закомментировать эту строчку, то все работает, но и есть один нюанс, текст выводится в окне, но и сразу ошибка, если комментировать загрузку то все работает.
Текст программы который использую
C++12345678910111213Font font;font.loadFromFile("NFS.ttf");Text text("",font, 40);text.setColor(Color::Red);text.setStyle(Text::Bold);text.setPosition(40,650);text.setString(L"Bearsss");window.draw(text);Вложения:
You must be logged in to view attached files.Добавь весь код файла main.cpp и код скинь через форму вставки кода в редакторе
C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289#include <SFML/Graphics.hpp>#include <iostream>using namespace sf;const int H = 22;//картаconst int W = 89;//земля для персонажаint ground = 650;float offsetY = 0, offsetX = 0; //смешение картыString map[H] ={"UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU","U BB BB U","U B B B U","U B B U","UF B B B B B B B B B B B U","UUUUUU B U","U UUUUUUUU U","U UUU U U U U UUUUUUU U","U UUUUU UUUUUU U","UB B B B B B BBB B B U","UBBB B B BB B BBB BBB UUUUUUUU U","UB B BBB B B BBB B B UUUU","U U U","UU UUUUUU U","UBBB UUUUUU U","U UUUUUUU U","UUUUU UUUU UUUUU U","U UU UUUUUU U","U UUU U","U PPPPPP PPPPPP UUUU PPPPPP PPPPPP PPPPPP U","UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU","UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU",};class PLAYER{public:float dx, dy; //скорость персонажаFloatRect rect; //кординаты ширины, высоты (Rect (x,y,width,height)bool onGround; //значение на земле или в летуSprite sprite; //анимация игрокаfloat currentFrame; //текуший кадр для анимацииint bear = 0, gold = 0;//-------конструктор с параметрами( принимает таилсет)PLAYER(Texture &image){sprite.setTexture(image); //устанавливаем наш таилсетrect = FloatRect(200,550 , 51, 55); //первоначальные координаты и ширина и высотаdx = dy = 0;currentFrame = 0; //1 кадр анимации}void update(float time){rect.left += dx * time; //координата хCollision(0);//проверка столкновения по Хif (!onGround) dy=dy+0.0005*time; //если не на земле, то придаем ускорениеrect.top += dy*time;//прибавляем ускорение к скорости по уonGround=false; //приземлилисьCollision(1);//проверка столкновения по Yif (rect.top>ground){rect.top = ground;dy = 0;onGround = true;}currentFrame += time * 0.005;if (currentFrame > 9){ // крутить анимацию бега по кругуcurrentFrame -= 9;}if (dx>0) //бег в право{sprite.setTextureRect(IntRect(51 * int(currentFrame), 195, 51, 55));}if (dx<0) //бег в лево{sprite.setTextureRect(IntRect(51 * int(currentFrame) + 51, 195, -51, 55));}sprite.setPosition(rect.left-offsetX, rect.top-offsetY);dx=0;}//столкновение c картойvoid Collision(int groundPos){for (int i = rect.top / 32; i < (rect.top+ rect.height) / 32; i++) //координаты по х{for (int j=rect.left/32;j<(rect.left+rect.width)/32;j++){// *********eсли столкновение со стенкой*******************************if (map[i][j] == 'U') //если столкновение со стенкой{if ((dx>0)&&(groundPos==0)){rect.left = j * 32 - rect.width;//перемешаем возле стенки(справа)}if ((dx<0) && (groundPos == 0)){rect.left = j * 32 +32;//перемешаем возле стенки(слева)}if ((dy>0) && (groundPos == 1))//значит что падаем{rect.top = i * 32 - rect.height;//перемешаем возле стенки(справа)dy = 0;onGround = true;}if ((dy<0) && (groundPos == 1)){rect.top = i * 32 + 32;//перемешаем возле стенки(слева)dy = 0;}}//****************если столкновение со бонусами**************if ((map[i][j] == 'B') || (map[i][j] == 'P') || (map[i][j] == 'F')) //если столкновение со стенкой{if ((map[i][j] == 'B')){bear++;}if ((map[i][j] == 'P')){gold++;}map[i][j] = ' ';}}}}};int main(){sf::RenderWindow window(sf::VideoMode(1250, 700), "__Bears__");Font font;//шрифт// font.loadFromFile("NFS.ttf");Text text("hjghjj",font, 40);text.setColor(Color::Red);text.setStyle(Text::Bold);text.setPosition(40,650);Texture t; //наш таил сетt.loadFromFile("images/999.png");Texture mapP; //наш таил сетmapP.loadFromFile("images/map.png");Sprite Spritemap;//для бонусовSpritemap.setTexture(mapP);float curentF = 0;//номер текущего кадраPLAYER p(t);//обьект игрокаp.dx = 0.1;Clock clock;RectangleShape rectangle;//переменная для отображения картыwhile (window.isOpen()){float time = clock.getElapsedTime().asMicroseconds();//время в микросекундахclock.restart();if (Keyboard::isKeyPressed(Keyboard::LShift)&&(p.onGround==true)){//ускорение при нажатие клавишиtime = time / 200;}else{time = time / 500;}sf::Event event;while (window.pollEvent(event)){ //закрыть окноif (event.type == sf::Event::Closed)window.close();}if (Keyboard::isKeyPressed(Keyboard::Left)){//ходьба и прокрутка онимации в левоp.dx = -0.1;}if (Keyboard::isKeyPressed(Keyboard::Right)){//ходьба и прокрутка онимации в левоp.dx = 0.1;}if (Keyboard::isKeyPressed(Keyboard::Up)){ //движение в верхif (p.onGround){p.dy = -0.4;p.onGround = false;}}p.update(time);//главная функция для передвижения персонажа//что бы небыло видно поза картойif (p.rect.left > 625 && p.rect.left<(32*89-625)) //слева и справа{offsetX = p.rect.left - 625; //только тогда происходит смещение}window.clear(Color::Black);//прорисовка карты map.for (int i = 0; i < H; i++){for (int j = 0; j < W; j++){if (map[i][j] == 'U'){Spritemap.setTextureRect(sf::IntRect(640,0 , 32, 32));Spritemap.setPosition(j * 32 - offsetX, i * 32 - offsetY);window.draw(Spritemap);}if (map[i][j] == 'B'){Spritemap.setTextureRect(sf::IntRect(960, 1630, 30, 32));Spritemap.setPosition(j * 32 - offsetX, i * 32 - offsetY);window.draw(Spritemap);}if (map[i][j] == 'F'){Spritemap.setTextureRect(sf::IntRect(930, 1671, 28, 23));Spritemap.setPosition(j * 32 - offsetX, i * 32 - offsetY);window.draw(Spritemap);}if (map[i][j] == 'P'){Spritemap.setTextureRect(sf::IntRect(928, 1534, 34, 31));Spritemap.setPosition(j * 32 - offsetX, i * 32 - offsetY);window.draw(Spritemap);}if (map[i][j] == ' '){continue;}}}//подсчет мишек и золотаSpritemap.setTextureRect(sf::IntRect(960, 1630, 30, 32));Spritemap.setPosition(10,650);window.draw(Spritemap);text.setString(L"Bearsss");//text.setString(std::to_string(p.bear));window.draw(text);window.draw(p.sprite);//прорисовка персонажаwindow.display();}return 0;}Строка сразу под мейном закомментирована, в ней дело…
не совсем по теме, но тут у тебя ускорение задается не персонажу, а всей игре. Так надо?
C++1234if (Keyboard::isKeyPressed(Keyboard::LShift)&&(p.onGround==true)){//ускорение при нажатие клавишиtime = time / 200;}А тот твои глюк завтра гляну, надо у себя код запускать.
та это я сделал для теста игры, что бы быстро карту проходить, щас мне бы приписать саму игру, а именно ООП и такими мелкими штучками потом буду заниматься, это моя курсовая работа, когда напишу всю игру скину сюда, может кому и пригодится)
Лучше увеличить саму скорость, а не урезать время таймера, чем меньше время таймера, тем сильнее загружен процессор.
У меня всё работает, в том числе если раскомментировать строку из за которой у тебя ошибка. Я только взял свой файл шрифта (попробуй скачать его из моего урока и вставить туда его и прописать
C++1font.loadFromFile("CyrilicOld.ttf");у меня проблемы именно с подключением sfml, а именно релиза, щас прийдеться во всем разбираться, спасибо за отзывчивость!
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.