Sfml c++ lenght error oraz problrm z textem

0
using namespace sf;
using namespace std;

int punkty = 0;


int main()
{
    string Pkt = to_string(punkty);

    CircleShape shape(20); // Tworzy kształt kółka o nazwie "shape" o wielkości 20
    shape.setFillColor(Color(100, 250, 50)); // Wypełnia objekt o nazwie "shape" kolorem zielonym
    shape.setPosition(400.f, 300.f); // Ustawia objekt na pozycji X = 400, Y = 300
    shape.setOrigin(shape.getRadius(), shape.getRadius()); // Ustawia "Punkt zaczepienia?" na środku objektu, aby podana pozycja odpowiadała rzeczywistości
    shape.setPointCount(1000);

    Text punkty;
    Font font;
    font.loadFromFile("Arial.ttf");
    punkty.setFont(font);
    punkty.setCharacterSize(24);
    punkty.setFillColor(Color(255, 255, 255));
    punkty.setString(Pkt);

Witam, mam 2 problemy. Pierwszy to jest wysypywanie błędu Nieobsłużony wyjątek w lokalizacji 0x00007FF8FA3EA799 w Smfldziałaj.exe: wyjątek języka Microsoft C++: std::length_error w lokalizacji pamięci 0x0000003D766FEBE0. Jak to naprawić? Oraz drugi problem polega na tym, że zamiast tekstu wyświetla mi się mała kropka. Dałoby się coś z tym zrobić?

0

@MrMadMatt: ```

#include <SFML/Graphics.hpp>
#include <iostream>
#include <string>

using namespace sf;


int score = 0;


int main()
{
    string Pkt = to_string(punkty);
    

    CircleShape shape(20); // Tworzy kształt kółka o nazwie "shape" o wielkości 20
    shape.setFillColor(Color(100, 250, 50)); // Wypełnia objekt o nazwie "shape" kolorem zielonym
    shape.setPosition(400.f, 300.f); // Ustawia objekt na pozycji X = 400, Y = 300
    shape.setOrigin(shape.getRadius(), shape.getRadius()); // Ustawia "Punkt zaczepienia?" na środku objektu, aby podana pozycja odpowiadała rzeczywistości
    shape.setPointCount(1000);

    Font font;
    font.loadFromFile("arial.ttf");
    if (!font.loadFromFile("arial.ttf"));
    {
        std::cout << "Nie udało się załadować czcionki" << std::endl;
    }
    Text scor;
    scor.setFont(font);
    scor.setCharacterSize(24);
    scor.setFillColor(Color(255, 255, 255));
    scor.setString(Pkt);
        
        // Tworzy okno o nazwie "window" o szerokości (x) = 800, wysokości (y) = 600. Nadaje nazwe okna "SFML First Game", dodaje nazwe oraz przycisk zamykający okno
   RenderWindow window(VideoMode(800, 600), "SFML First Game", sf::Style::Titlebar | sf::Style::Close);
    
   // Główna pętla programu
   while (window.isOpen())
   {
      
       
       if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) && shape.getPosition().y >= 20) {
           shape.move(0.f, -0.1f);
       }
       
       if (sf::Keyboard::isKeyPressed(sf::Keyboard::S) && shape.getPosition().y <= 580) {
           shape.move(0.f, 0.1f);
       }
       
       if (sf::Keyboard::isKeyPressed(sf::Keyboard::A) && shape.getPosition().x >= 20) {
           shape.move(-0.1f, 0.f);
       }
       
       if (sf::Keyboard::isKeyPressed(sf::Keyboard::D) && shape.getPosition().x <= 770) {
           shape.move(0.1f, 0.f);
       }

       // Tworzy Event o nazwie event
       Event event;
       
       
       while (window.pollEvent(event))
       {
           // Dodaje zamykanie programu po naciśnięciu "X" w prawym górnym rogu ekranu
           if (event.type == Event::Closed) {
               window.close();
           }
       }
               
           
        //Czyści okno z poprzedniej klatki
        window.clear();
      
        // Rysuje objekt o nazwie "shape"
        window.draw(shape);
        // Rysuje objekt o nazwie "scor"
        window.draw(scor);
        // Wyświetla elementy na oknie
        window.display();
    }
    return 0;
}
0

@Bartłomiej Golenko: Jeśli mam scor.setString(Pkt); to nie da sie włączyćbo Od razu wywala błąd o ktorym napisalem, jeśli zamienie to na np. "test" to odpala sie ale zamiast tekstu jest kropka, a czcionka sie nie laduje

0

@Bartłomiej Golenko: po kompilacji zostaje tylko ========== Kompilacja: 0 zakończono powodzeniem, 0 zakończono niepowodzeniem, 1 zaktualizowano, 0 pominięto ========== wiec sie raczej nie kompiluje

0

Ok, no to drobna podpowiedź - w tym fragmencie masz już 2 błędy:

#include <iostream>
#include <string>

using namespace sf;

int score = 0;

int main()
{
    string Pkt = to_string(punkty);
0

Brak std::? Jak tak to akurat zauważyłem i poprawiłem już wcześniej

0

OK, znalazłeś jeden problem - teraz znajdź drugi:

#include <iostream>
#include <string>

using namespace sf;

int score = 0;

int main()
{
    std::string Pkt = std::to_string(punkty);
0

Mam int score A chce zmieniać punkty. W sensie ja chyba tu źle kod dałem bo ja już tyle kombinowalem przy tym że debuger nie pokazuje mi tych błędów. Wiesz co można zrobić z tym wyjątkiem oraz dlaczego mi się czcionki nie ładuja?

0

Oczywiście że wiem, plik z czcionką masz w innym katalogu niż program jej szuka (katalog z binarką/źródłami to niekoniecznie ten katalog w którym program jest uruchomiony)

0

Plik z czcionką dałem chyba dosłownie wszędzie, tam gdzie projekt, potem tam gdzie rozwiązanie oraz do folderu z plikiem exe.Gdzie sprawdzić gdzie program szuka tego?

0

@Bartłomiej Golenko: A wiesz co z tym wyjątkiem?

0

Dobra, pozmienialem troche w wlasciwosci projektu i dziala. mozna zamknąć

0

Witam, posiadam taki kod Ale wyświetla się białe okno, wcześniej działało. Jak to naprawić?
' ' ' c++
#include <SFML/Graphics.hpp>
#include <iostream>
#include <windows.h>
 
using namespace sf;
float jumpSpeed = 0.3f;
float MoveSpeed = 0.1f;
int checkskok = 1;
int main()
{
    const float gravity = 1;
    Vector2f velocity(sf::Vector2f(0, 0));
     
     
 
    Texture PostacStoi;
    PostacStoi.loadFromFile("_PNG/1_KNIGHT/Knight_01__IDLE_000.png", sf::IntRect(534, 175, 1266, 735));
 
    Sprite Postac;
    Postac.setTexture(PostacStoi);
    Postac.setScale(0.2f,0.2f);
    Postac.setPosition(10, 580);
 
 
 
 
 
    RenderWindow window(sf::VideoMode(1000, 700), "SFML works!");
     
     
     
 
    while (window.isOpen())
    {
        velocity.x = 0;
        velocity.y = 0;
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == Event::Closed)
                window.close();
        }
        int SkokWpow = Postac.getPosition().y;
        if (Keyboard::isKeyPressed(Keyboard::W)) {
            if (checkskok == 1) {
                int SkokWpow = Postac.getPosition().y;
                checkskok = 0;
            }
            int wysteraz = Postac.getPosition().x;
            velocity.y = -jumpSpeed;
            Postac.move(velocity.x, velocity.y);
 
            if (wysteraz == SkokWpow + 100) {
                for (int i = 1; i <= 20; i++) {
                    velocity.y = jumpSpeed + gravity;
                    Postac.move(velocity.x, velocity.y);
                    if (wysteraz == SkokWpow) {
                        checkskok = 1;
                    }
                }
            }
        }
        }
 
         
 
        if (Keyboard::isKeyPressed(Keyboard::A)) {
            velocity.x = -MoveSpeed;
            velocity.y = 0;
            Postac.move(velocity.x, velocity.y);
        }
 
 
    if (Keyboard::isKeyPressed(Keyboard::D)) {
        velocity.x = MoveSpeed;
        velocity.y = 0;
        Postac.move(velocity.x, velocity.y);
    }
             
         
     
         
        window.clear(Color(0,0,0));
        window.draw(Postac);
        window.display();
     
 
    return 0;
}
' ' '

POMYLKA XDD, myślałem że to nowy post

1
while (window.isOpen()) {
...
}

To jest główna pętla programu wywoływana co kilka, kilkanaście milisekund i w niej powinno znaleźć się czyszczenie obrazu i sprawdzanie stanu klawiatury. Skorzystaj z IDE i rób częściej auto formatowanie kodu to takie błędy wizualnie możesz wychwycić.

0
jvoytech napisał(a):
while (window.isOpen()) {
...
}

To jest główna pętla programu wywoływana co kilka, kilkanaście milisekund i w niej powinno znaleźć się czyszczenie obrazu i sprawdzanie stanu klawiatury. Skorzystaj z IDE i rób częściej auto formatowanie kodu to takie błędy wizualnie możesz wychwycić.

pętla jest wywoływana co 20 milisekund o ile się orientuje. Korzystam z Ide. A co do tej pętli to da się jakoś ją spowolnić? Nie chodzi mi o konkretnie tą.

1 użytkowników online, w tym zalogowanych: 0, gości: 1