मैं sfml में बटन बनाने के तरीके के बारे में एक ट्यूटोरियल का अनुसरण कर रहा था और फिर जब मैंने इसे चलाया, तो विंडो तुरंत बंद हो गई। मेरे पास 2 फाइलें हैं, एक को main.cpp कहा जाता है और दूसरे को Button.h कहा जाता है। मुझे इस समस्या को ठीक करने के लिए इंटरनेट पर कोई फिक्स नहीं मिल रहा है तो मैं इसे कैसे ठीक करूं? यहाँ मुख्य.सीपीपी है:

#include <SFML/Graphics.hpp>
#include <iostream>
#include <windows.h>
#include "button.h"
using namespace std;
using namespace sf;
int main(){
    bool isStartOpen = false;
    RenderWindow window(VideoMode(500, 500), "Operating System", Style::Close | Style::Resize);
    RectangleShape player(Vector2f(500.0f, 30.0f));
    RectangleShape startMenu(Vector2f(300.0f, 400.0f));
    Texture startTexture;
    if(!startTexture.loadFromFile("startButton.png")){
        MessageBox(NULL, "Error loading image file: startButton.png in the system", "Image File Error", MB_OK | MB_ICONERROR);
    }
    startMenu.setFillColor(Color(0, 0, 0, 200));
    startMenu.setPosition(0.0f, 500.0f);
    player.setFillColor(Color::Black);
    player.setPosition(0.0f, 473.0f);
    Font font;
    if(!font.loadFromFile("buttonFont.ttf")){
       MessageBox(NULL, "Error loading font file: buttonFont.ttf in the system", "Font File Error", MB_OK | MB_ICONERROR);
    }
    Button openNotepad("Open Notepad", {200, 50}, 20, Color::Green, Color::Black);
    openNotepad.setPosition({100, 300});
    openNotepad.setFont(font);
    while (window.isOpen())
    {
        Event event;
        while (window.pollEvent(event))
        {
            switch(event.type){
                case Event::Closed:
                    window.close();
                    cout << "Window has been removed" << endl;
                    break;
                case Event::MouseMoved:
                    if(openNotepad.isMouseOver(window)){
                      openNotepad.setBackColor(Color::White);
                    }else{
                        openNotepad.setBackColor(Color::Green);
                    }
                    break;
                case Event::MouseButtonPressed:
                    if(openNotepad.isMouseOver(window)){
                        cout << "You clicked the button" << endl;
                    }
                    break;
            }
        if(Keyboard::isKeyPressed(Keyboard::Key::S) && !isStartOpen){
            startMenu.setPosition(0.0f, 75.0f);
            isStartOpen = true;
        }else{
            startMenu.setPosition(0.0f, 500.0f);
            isStartOpen = false;
        }
        window.draw(startMenu);
        window.draw(player);
        window.display();
        window.clear(Color(1, 159, 255));
    }
    return 0;
}
}

Button.h . के लिए कोड

#pragma once
#include <iostream>
#include <SFML/graphics.hpp>
using namespace sf;
using namespace std;
class Button{
    public:
        Button(){

        }
        Button(string t, Vector2f size, int charSize, Color bgColor, Color textColor){
            text.setString(t);
            text.setColor(textColor);
            text.setCharacterSize(charSize);
            button.setSize(size);
            button.setFillColor(bgColor);
        }
        void setFont(Font &font){
            text.setFont(font);
        }
        void setBackColor(Color color){
            button.setFillColor(color);
        }
        void setTextColor(Color color){
            text.setColor(color);
        }
        void setPosition(Vector2f pos){
            button.setPosition(pos);
            float xPos = (pos.x + button.getLocalBounds().width / 3) - (text.getLocalBounds().width / 2);
            float yPos = (pos.y + button.getLocalBounds().height / 4) - (text.getLocalBounds().height / 2);
            text.setPosition({xPos, yPos});
        }
        void drawTo(RenderWindow &window){
            window.draw(button);
            window.draw(text);
        }
        bool isMouseOver(RenderWindow &window){
            float mouseX = Mouse::getPosition(window).x;
            float mouseY = Mouse::getPosition(window).y;
            float btnPosX = button.getPosition().x;
            float btnPosY = button.getPosition().y;
            float btnxPosWidth = button.getPosition().x + button.getLocalBounds().width;
            float btnyPosWidth = button.getPosition().y + button.getLocalBounds().height;
            if(mouseX < btnxPosWidth && mouseX > btnPosX && mouseY < btnyPosWidth && mouseY > btnPosY){
                return true;
            }

कार्यक्रम में कोई त्रुटि नहीं है तो मैं समस्या को कैसे ठीक करूं?

0
Optimus 9 फरवरी 2021, 04:35
शायद आपके पास एक दुर्घटना है? क्या आपने वास्तव में क्या होता है यह देखने के लिए डीबगर में अपने प्रोग्राम के माध्यम से कदम उठाने का प्रयास किया है?
 – 
Some programmer dude
9 फरवरी 2021, 04:43
1
दिन का पाठ: अपने इंडेंटेशन पर ध्यान दें, और इसे लगातार बनाए रखें। और हमेशा अपने ब्रेसिज़ को देखें। एक अच्छा संपादक आपको कोड को फिर से इंडेंट करने में मदद कर सकता है, जिससे आपकी जैसी समस्याओं को देखना आसान हो जाता है।
 – 
Some programmer dude
9 फरवरी 2021, 05:55

1 उत्तर

सबसे बढ़िया उत्तर

आप return 0; को while(window.isOpen()) में डालते हैं, इसलिए आपका प्रोग्राम तुरंत विंडो बंद कर देता है, return 0; को while loop के बाहर रख दें।

1
Blue Shadow 9 फरवरी 2021, 04:49
मेरी मदद करने के लिए धन्यवाद और अब मैं कोडिंग जारी रख सकता हूं :)
 – 
Optimus
9 फरवरी 2021, 17:05