मैं वर्तमान में VertexArray के बारे में सीख रहा हूं और मैं वर्तमान में अपनी समस्या को ठीक करने के लिए संघर्ष कर रहा हूं। मुद्दा यह है कि VertexArray स्क्रीन पर आकर्षित नहीं होगा। मैंने स्प्राइट्स के साथ कोड का परीक्षण किया है, और स्प्राइट को सफलतापूर्वक स्क्रीन पर खींचा गया था।

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

int main()
{
    sf::Vector2i screenDimensions(800,600);
    sf::Vector2i blockDimensions(10,10);

    srand(time(0));

    sf::RenderWindow Window;
    Window.create(sf::VideoMode(screenDimensions.x,screenDimensions.y),"My first SFML game!");

    while(Window.isOpen())
    {
        sf::Event Evnt;
        while(Window.pollEvent(Evnt))
        {
            switch(Evnt.type)
            {
                case(sf::Event::Closed):
                    Window.close();
                    break;
            }
        }
        for(int i=0; i< screenDimensions.x/blockDimensions.x; i++)
        {
            for(int j=0; j<screenDimensions.y/blockDimensions.y;j++)
            {
                sf::VertexArray vArray;
                vArray[0].position = sf::Vector2f(i*blockDimensions.x,j*blockDimensions.y);
                vArray[1].position = sf::Vector2f(i*blockDimensions.x + blockDimensions.x, j*blockDimensions.y);
                vArray[2].position = sf::Vector2f(i*blockDimensions.x + blockDimensions.x, j*blockDimensions.y + blockDimensions.y);
                vArray[3].position = sf::Vector2f(i*blockDimensions.x,j*blockDimensions.y + blockDimensions.y);

                for(int k=0;k<4;k++)
                {
                    int red = rand() % 255;
                    int green = rand() % 255;
                    int blue = rand() % 255;

                    vArray[k].color = sf::Color(red,green,blue);
                }
                Window.draw(vArray);
            }
        }

        Window.clear();
        Window.display();
    }

}

यहां सरल कोड है जो एक स्क्रीन पर क्वाड के अंदर यादृच्छिक रंग खींचता है। मैं जिस ट्यूटोरियल का अनुसरण कर रहा था, वह CodingMadeEasy द्वारा यह था। सभी को अग्रिम धन्यवाद!

0
Fester 4 अक्टूबर 2018, 20:07

1 उत्तर

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

सबसे पहले आपने एक खाली वर्टेक्स ऐरे बनाया। एक प्रकार और प्रारंभिक संख्या के साथ एक बनाएं sf::VertexArray vArray (sf::Quads, 4);

और आपने वास्तव में इसे खींचने से पहले विंडो को साफ़ कर दिया, Window.display(); Window.clear(); से पहले चला जाता है।

यहां कामकाजी कोड है:

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

int main()
{
    sf::Vector2i screenDimensions(800,600);
    sf::Vector2i blockDimensions(10,10);

    srand(time(0));

    sf::RenderWindow Window;
    Window.create(sf::VideoMode(screenDimensions.x,screenDimensions.y),"My first SFML game!");

    while(Window.isOpen())
    {
        sf::Event Evnt;
        while(Window.pollEvent(Evnt))
        {
            switch(Evnt.type)
            {
                case(sf::Event::Closed):
                    Window.close();
                    break;
            }
        }
        for(int i=0; i< screenDimensions.x/blockDimensions.x; i++)
        {
            for(int j=0; j<screenDimensions.y/blockDimensions.y;j++)
            {
                sf::VertexArray vArray (sf::Quads, 4);
                vArray[0].position = sf::Vector2f(i*blockDimensions.x,j*blockDimensions.y);
                vArray[1].position = sf::Vector2f(i*blockDimensions.x + blockDimensions.x, j*blockDimensions.y);
                vArray[2].position = sf::Vector2f(i*blockDimensions.x + blockDimensions.x, j*blockDimensions.y + blockDimensions.y);
                vArray[3].position = sf::Vector2f(i*blockDimensions.x,j*blockDimensions.y + blockDimensions.y);

                for(int k=0;k<4;k++)
                {
                    int red = rand() % 255;
                    int green = rand() % 255;
                    int blue = rand() % 255;

                    vArray[k].color = sf::Color(red,green,blue);
                }
                Window.draw(vArray);
            }
        }

        Window.display();
        Window.clear();
    }

}
0
Martin Sand 5 अक्टूबर 2018, 00:12