0
그래서 Game 클래스의 기본 창에 타일을 그리고 mapRender 함수에 대한 참조로 주 창을 전달하는 mapReader라는 다른 클래스에서 mapRender 함수를 만들고 있지만 그리지는 않습니다. mainwindow에 타일 ??? 내가 메인 게임 클래스에서 그것을 테스트하고 제대로 작동하지 않습니다, 그냥 제대로 작동하지 않는 창 참조를 전달하려고합니다.전달 SF :: RenderWindow 참조
완전한 예 :
MAIN.CPP
#include <Game.h>
int main()
{
Game game;
game.run();
}
Game.h
#ifndef GAME_H
#define GAME_H
#include <iostream>
#include <Draw.h>
class Game
{
public:
Game();
void run();
void render();
private:
sf::RenderWindow window;
};
#endif // GAME_H
Game.cpp
#include "Game.h"
Game::Game()
{
sf::VideoMode vmode(640,480);
window.create(vmode,"Reference passing");
Draw d;
d.mapLoader();
}
void Game::run()
{
while(window.isOpen())
{
sf::Event event;
while(window.pollEvent(event))
{
switch(event.type)
{
case sf::Event::Closed:
window.close();
break;
default:
break;
}
}
render();
}
}
void Game::render()
{
Draw d;
window.clear();
d.mapRender(window);
window.display();
}
Draw.h
#ifndef DRAW_H
#define DRAW_H
#include <iostream>
#include <fstream>
#include <cctype>
#include <string>
#include <SFML/Graphics.hpp>
class Draw
{
public:
void mapLoader();
void mapRender(sf::RenderWindow& rWindow);
private:
private:
sf::Vector2i levelMap[21][16];
sf::Vector2i loadCounter;
sf::Texture tileTexture;
sf::Sprite tiles;
};
#endif // DRAW_H
Draw.cpp
#include "Draw.h"
void Draw::mapLoader()
{
loadCounter=sf::Vector2i(0,0);
if(!tileTexture.loadFromFile("mapSprite.png"))
std::cout<<"\n\nMAP LOAD FAILED!\n"<<std::endl;
tiles.setTexture(tileTexture);
std::ifstream openFile;
openFile.open("mapfile.txt");
loadCounter=sf::Vector2i(0,0);
if(openFile.is_open())
{
while(!openFile.eof())
{
std::string str;
openFile>>str;
char x=str[0],y=str[2];
if(!isdigit(x)&&!isdigit(y))
levelMap[loadCounter.x][loadCounter.y]=sf::Vector2i(-1,-1);
else
levelMap[loadCounter.x][loadCounter.y]=sf::Vector2i(x-'0',y-'0');
if(openFile.peek()=='\n')
{
loadCounter.x=0;
loadCounter.y++;
}
else
loadCounter.x++;
}
loadCounter.y++;
}
}
void Draw::mapRender(sf::RenderWindow& rWindow)
{
for(int i=0;i<20;i++)
{
for(int j=0;j<15;j++)
{
if(levelMap[i][j].x!=-1 && levelMap[i][j].y!=-1)
{
tiles.setPosition(i*32,j*32);
tiles.setTextureRect(sf::IntRect(levelMap[i][j].x*32,levelMap[i][j].y*32,32,32));
rWindow.draw(tiles);
}
}
}
}
mapfile.txt
x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x
x,x 0,0 x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x 1,0
x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x 0,0 x,x x,x x,x x,x x,x 1,0
x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x 0,0 x,x x,x x,x x,x 1,0 1,0
x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x 0,0 x,x x,x x,x 1,0 1,0
x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x 1,0 1,0
x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x 1,0 1,0 1,0
x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x 1,0 1,0 1,0
x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x 1,0 1,0
x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x 1,0 1,0
x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x
x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x
x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x
0,0 x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x 0,0
0,0 0,0 x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x x,x 0,0 0,0
렌더 창을 참조로 전달하면 문제가 없습니다. 오류는 다른 위치에 있어야합니다. [MCVE] (http://stackoverflow.com/help/mcve)를 게시 할 수 있습니까? – nvoigt
mapReader 클래스에 Game 클래스 헤더를 포함해야합니까? 게임 클래스에서 테스트 해봤는데 정상적으로 작동합니다. 다른 클래스에 대한 참조로 전달할 때 창에 그리지 않습니다. 필요한 경우 MCVE를 제공 할 수 있습니다. –
제가 말했듯이, 일반적으로 이것을 참고로 전달합니다. 귀하의 코드에 뭔가 문제가 있어야합니다. 완전한 예를 게시하면 실제로 무엇인지 파악할 수 있습니다. – nvoigt