Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SFML正在做一些与向量数组紧密相连的事情_C++_Sfml - Fatal编程技术网

C++ SFML正在做一些与向量数组紧密相连的事情

C++ SFML正在做一些与向量数组紧密相连的事情,c++,sfml,C++,Sfml,嘿,当我使用这段代码时,它似乎把我的SBOUND放在了同一个位置,而不是我想要的2个位置上的任何地方。我不知道这个问题是什么,而且我对SFML还是个新手,不能完全理解发生了什么。主代码如下所示。 ` #包括“MainH.h” int main() { int x=200; int y=200; sf::RenderWindow窗口(sf::VideoMode(512,256),“Tilemap”); //创建一个新顶点 sf:顶点; //定位 vertex.position=sf::Vector

嘿,当我使用这段代码时,它似乎把我的SBOUND放在了同一个位置,而不是我想要的2个位置上的任何地方。我不知道这个问题是什么,而且我对SFML还是个新手,不能完全理解发生了什么。主代码如下所示。 `

#包括“MainH.h”
int main()
{
int x=200;
int y=200;
sf::RenderWindow窗口(sf::VideoMode(512,256),“Tilemap”);
//创建一个新顶点
sf:顶点;
//定位
vertex.position=sf::Vector2f(10,50);
//定色
vertex.color=sf::color::红色;
//设置其纹理坐标
texCoords=sf::Vector2f(100100);
////////////////////////
雪碧A;
sf::AT的纹理;
AT.loadFromFile(“Red.png”);
A.setTexture(AT);
A.设定位置(16.f,16.f);
sf::文本A_Tex;
字体A_字体;
A_Font.loadFromFile(“arial.ttf”);
A_Tex.setFont(A_字体);
A_Tex.setColor(sf::Color::Yellow);
A_Tex.设置刻度(0.35f,0.35f);
/////////////////////////////
雪碧B;
sf::BT;
BT.loadFromFile(“Green.png”);
B.setTexture(英国电信);
B.设定位置(30.f,30.f);
sf::文本B_Tex;
sf::字体B_字体;
B_Font.loadFromFile(“arial.ttf”);
B_Tex.setFont(A_字体);
B_Tex.setColor(sf::Color::Yellow);
B_Tex.设置刻度(0.35f,0.35f);
常量整数级别[]=
{
5, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0,
2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
2, 1, 0, 0, 2, 0, 3, 3, 3, 0, 1, 1, 1, 0, 0, 0,
2, 1, 1, 0, 3, 3, 3, 0, 0, 0, 1, 1, 1, 2, 0, 0,
2, 0, 1, 0, 3, 0, 2, 2, 0, 0, 1, 1, 1, 1, 2, 0,
2, 0, 1, 0, 3, 0, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1,
2, 0, 1, 0, 3, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1,
};
sf::纹理颜色;
COL.loadFromFile(“COL.png”);
TileMap地图;
if(!map.load(“Set.png”,sf::Vector2u(16,16),level,16,8,COL))
返回-1;
bool-Debug=false;
//////////////////////////////
临界C;
sf::纹理BordS;
sf::纹理波特;
loadFromFile(“Border.png”);
loadFromFile(“TopBD.png”);
C.设置(BordS,16,BordT);
////////////////////////////////
window.setKeyRepeatEnabled(假);
while(window.isOpen())
{
C.Object=A.getPosition();
向量2f APos=A.getPosition();
sf::Vector2f BPos=B.getPosition();
sf::事件;
while(window.pollEvent(事件))
{
如果(event.type==sf::event::Closed)
window.close();
if(event.type==sf::event::Resized)
{
setView(sf::View(sf::FloatRect(0,0,event.size.width,event.size.height));
}
}
如果(sf::Keyboard::isKeyPressed(sf::Keyboard::Left)和&!Collision::PixelPerfectTest(C.A_B_L,B,256))
{
//按下左键:移动角色
A.移动(-0.01f,0);
}
如果(sf::Keyboard::isKeyPressed(sf::Keyboard::Right)和&!Collision::PixelPerfectTest(C.A_B_R,B,256))
{
//按下左键:移动角色
for(无符号整数i=0;i
类别代码如下所示:

#include "MainH.h"
class TileMap : public sf::Drawable, public sf::Transformable
{
public:

sf::Texture A;
std::vector<sf::Sprite> SBOUND;
std::vector<sf::Text> TEX;

sf::Font FT;
bool load(const std::string& tileset, sf::Vector2u tileSize, const int* tiles, unsigned int width, unsigned int height , sf::Texture& texture)
{

    FT.loadFromFile("arial.ttf");

    A = texture;
    SBOUND.resize(90);
    for (int a = 0; a < 88; a = a + 1) {
        SBOUND[a].setTexture(A);
    }
    TEX.resize(90);
    for (int a = 0; a < 88; a = a + 1) {
        TEX[a].setFont(FT);
        TEX[a].setString("HERE");
        TEX[a].setColor(sf::Color::Red);
        TEX[a].setScale(0.5f,0.5f);
    }


    // load the tileset texture
    if (!m_tileset.loadFromFile(tileset))
        return false;

    // resize the vertex array to fit the level size
    m_vertices.setPrimitiveType(sf::Quads);
    m_vertices.resize(width * height * 4);

    // populate the vertex array, with one quad per tile
    for (unsigned int i = 0; i < width; ++i)
        for (unsigned int j = 0; j < height; ++j)
        {
            // get the current tile number
            int tileNumber = tiles[i + j * width];
            // find its position in the tileset texture
            int tu = tileNumber % (m_tileset.getSize().x / tileSize.x);
            int tv = tileNumber / (m_tileset.getSize().x / tileSize.x);
            // get a pointer to the current tile's quad
            sf::Vertex* quad = &m_vertices[(i + j * width) * 4];

            // define its 4 corners
            quad[0].position = sf::Vector2f(i * tileSize.x, j * tileSize.y);
            quad[1].position = sf::Vector2f((i + 1) * tileSize.x, j * tileSize.y);
            quad[2].position = sf::Vector2f((i + 1) * tileSize.x, (j + 1) * tileSize.y);
            quad[3].position = sf::Vector2f(i * tileSize.x, (j + 1) * tileSize.y);


            if (tileNumber == 2) {
                std::cout << tileNumber << std::endl;
                SBOUND[j].setPosition(sf::Vector2f((i + 1) * tileSize.x, (j + 1) * tileSize.y));


                TEX[j].setPosition(sf::Vector2f(i * tileSize.x, j * tileSize.y));

                sf::Vector2f V;
                V = SBOUND[j].getPosition();
                std::cout << V.x << " , " << V.y << std::endl;

                std::cout << tileSize.x * i << " Tile_X " << std::endl;
                std::cout << tileSize.y * (j+1) << " Tile_Y " << std::endl;

            }

            // define its 4 texture coordinates
            quad[0].texCoords = sf::Vector2f(tu * tileSize.x, tv * tileSize.y);
            quad[1].texCoords = sf::Vector2f((tu + 1) * tileSize.x, tv * tileSize.y);
            quad[2].texCoords = sf::Vector2f((tu + 1) * tileSize.x, (tv + 1) * tileSize.y);
            quad[3].texCoords = sf::Vector2f(tu * tileSize.x, (tv + 1) * tileSize.y);
        }


    return true;
}

private:

virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
    // apply the transform
    states.transform *= getTransform();

    // apply the tileset texture
    states.texture = &m_tileset;

    // draw the vertex array
    target.draw(m_vertices, states);
}

sf::VertexArray m_vertices;
sf::Texture m_tileset;
};
#包括“MainH.h”
类TileMap:public sf::Drawable,public sf::Transformable
{
公众:
sf::纹理A;
std::向量SBOUND;
std::向量TEX;
sf::Font-FT;
布尔加载(常量std::string&tileset,sf::Vector2u tileSize,常量int*tiles,无符号int宽度,无符号int高度,sf::Texture&Texture)
{
FT.loadFromFile(“arial.ttf”);
A=纹理;
SBOUND.resize(90);
对于(int a=0;a<88;a=a+1){
SBOUND[a].setTexture(a);
}
TEX.resize(90);
对于(int a=0;a<88;a=a+1){
TEX[a].setFont(FT);
TEX[a].setString(“此处”);
TEX[a].setColor(sf::Color::Red);
TEX[a].设置刻度(0.5f,0.5f);
}
//加载tileset纹理
如果(!m_tileset.loadFromFile(tileset))
返回false;
//调整顶点阵列的大小以适合级别大小
setPrimitiveType(sf::Quads);
m_顶点。调整大小(宽度*高度*4);
//填充顶点阵列,每个平铺一个四边形
for(无符号整数i=0;i#include "MainH.h"
class TileMap : public sf::Drawable, public sf::Transformable
{
public:

sf::Texture A;
std::vector<sf::Sprite> SBOUND;
std::vector<sf::Text> TEX;

sf::Font FT;
bool load(const std::string& tileset, sf::Vector2u tileSize, const int* tiles, unsigned int width, unsigned int height , sf::Texture& texture)
{

    FT.loadFromFile("arial.ttf");

    A = texture;
    SBOUND.resize(90);
    for (int a = 0; a < 88; a = a + 1) {
        SBOUND[a].setTexture(A);
    }
    TEX.resize(90);
    for (int a = 0; a < 88; a = a + 1) {
        TEX[a].setFont(FT);
        TEX[a].setString("HERE");
        TEX[a].setColor(sf::Color::Red);
        TEX[a].setScale(0.5f,0.5f);
    }


    // load the tileset texture
    if (!m_tileset.loadFromFile(tileset))
        return false;

    // resize the vertex array to fit the level size
    m_vertices.setPrimitiveType(sf::Quads);
    m_vertices.resize(width * height * 4);

    // populate the vertex array, with one quad per tile
    for (unsigned int i = 0; i < width; ++i)
        for (unsigned int j = 0; j < height; ++j)
        {
            // get the current tile number
            int tileNumber = tiles[i + j * width];
            // find its position in the tileset texture
            int tu = tileNumber % (m_tileset.getSize().x / tileSize.x);
            int tv = tileNumber / (m_tileset.getSize().x / tileSize.x);
            // get a pointer to the current tile's quad
            sf::Vertex* quad = &m_vertices[(i + j * width) * 4];

            // define its 4 corners
            quad[0].position = sf::Vector2f(i * tileSize.x, j * tileSize.y);
            quad[1].position = sf::Vector2f((i + 1) * tileSize.x, j * tileSize.y);
            quad[2].position = sf::Vector2f((i + 1) * tileSize.x, (j + 1) * tileSize.y);
            quad[3].position = sf::Vector2f(i * tileSize.x, (j + 1) * tileSize.y);


            if (tileNumber == 2) {
                std::cout << tileNumber << std::endl;
                SBOUND[j].setPosition(sf::Vector2f((i + 1) * tileSize.x, (j + 1) * tileSize.y));


                TEX[j].setPosition(sf::Vector2f(i * tileSize.x, j * tileSize.y));

                sf::Vector2f V;
                V = SBOUND[j].getPosition();
                std::cout << V.x << " , " << V.y << std::endl;

                std::cout << tileSize.x * i << " Tile_X " << std::endl;
                std::cout << tileSize.y * (j+1) << " Tile_Y " << std::endl;

            }

            // define its 4 texture coordinates
            quad[0].texCoords = sf::Vector2f(tu * tileSize.x, tv * tileSize.y);
            quad[1].texCoords = sf::Vector2f((tu + 1) * tileSize.x, tv * tileSize.y);
            quad[2].texCoords = sf::Vector2f((tu + 1) * tileSize.x, (tv + 1) * tileSize.y);
            quad[3].texCoords = sf::Vector2f(tu * tileSize.x, (tv + 1) * tileSize.y);
        }


    return true;
}

private:

virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const
{
    // apply the transform
    states.transform *= getTransform();

    // apply the tileset texture
    states.texture = &m_tileset;

    // draw the vertex array
    target.draw(m_vertices, states);
}

sf::VertexArray m_vertices;
sf::Texture m_tileset;
};