에 전달 제한된 Python 경험을 통해 C++로 왔습니다. 파이썬에서는 GUI를 처리하기 위해 Tkinter를 자주 사용하고, '캔버스'또는 '창'을 다른 클래스에 전달한 다음 캔버스/창에 그릴 수 있습니다.SFML RenderWindow를 클래스
SFML과 C++에서 동일한 작업을 수행하려고하지만, 지금까지 메서드가 호출 될 때마다 sf::RenderWindow
을 메서드에 전달해야하는 솔루션을 발견했습니다.
예를 들어 Player.mrite ('up')가 호출 될 때마다 플레이어의 스프라이트를 잡고 스프라이트를 이동하려는 'player'클래스가 있습니다. 발견했습니다 나는 다음과 같은 코드를 사용하여이 있다고 (이 약간 잘못되었을 수 있습니다, 난 그냥 기차 동안이를 입력 한, 그러나 희망 당신은 그림을 얻는다) :
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "Player.h"
int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "My Game");
Player player(); //Nothing passed
player.move(window, "up"); //Pass window every time
player.move(window, "down");
player.move(window, "left");
return 0;
}
하여 Main.cpp를
Player.cpp
Player::move(sf::RenderWindow& window, char direction){
/*Code to move the sprite shall be on this line*/
window.draw(sprite);
}
나는 방법에 렌더링 창 window
을 통과하는 것은 큰 어려움 아니라는 것을 이해하지만 할 수있는 방법이 있어야합니다 같은 느낌 그것을보기 다음과 같습니다 :
하여 Main.cpp
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "Player.h"
int main(){
sf::RenderWindow window(sf::VideoMode(800, 600), "My Game");
Player player(window); //Pass window once.
player.move("up"); // Relax knowing that everything is already handled.
player.move("down");
player.move("left");
return 0;
}
Player.cpp
Player::Player(sf::RenderWindow& win_gui){
window = win_gui;
}
Player::move(char direction){
/*various case statements to move the sprite on this line*/
window.draw(sprite);
}
나는 거대한 것을 놓치거나 완전히 오해하고있다. 내 추측은 둘 다. 다른 언어로 가능하다면 왜 C++이 아니겠습니까?
해야하는 이유 '움직여''드로 (Draw) '라고 부르기까지? 게임 논리에서 렌더링을 격리합니다. – LogicStuff
''down''은 큰 따옴표 여야합니다. 이 코드가 컴파일됩니까? –
Guillame, 저는 작은 따옴표를 수정했습니다. 나는 현재 매우 긴 열차 여행을하고 있으며 추억을 통해이를 타이핑 했으므로 아마 더 많은 실수가있을 수 있습니다. LogicStuff, 왜'move'를'move'하지 말아야합니까? 나는 누군가가 예상 할 수있는 많은 프로세스를 메서드가 처리하도록 만드는 법을 배웠습니다. 이 클래스를 SFML 게임에서 사용할 수 있도록 누군가에게 제공하고 "player.move ("up ");" 플레이어가 위로 올라가지 않으면 꽤 혼란 스러울 것입니다. 방법으로 그런 종류의 일을 할 수 없다면 우리가 세상에서 가질 수있는 유일한 것은 게이 터와 세터입니다. 얼마나 지루한 지요! – Matchoo