실제로 "상위 수준 그리기"가 어떻게 작동해야하는지는 아닙니다.
부모님 들께서는 아이들을 어떻게 그려야합니까? 넌 책임이 섞여있어.
대신 서브 클래스 sf::Drawable
(및 필요한 경우 sf::Transformable
).
이 모든 것은 당신이 모든 그림을 수행하는 draw()
회원을 구현하도록 강요합니다.
은 여기 ChessBoard
클래스에 대한 간단한 예제 :
class ChessBoard : public sf::Drawable {
void draw (RenderTarget &target, RenderStates states) const {
for (auto &tile : mTiles) // Iterate over all board pieces
target.draw(tile, states); // Draw them
}
}
당신이 볼 수 있듯이,이 설정에 간단하다. 비슷한 방법으로 Square
클래스를 오버로드 할 수 있습니다. (단순히 sf::RectangleShape
를 재사용하지 왜? 너무 일반적 그 이름 아닌가요?)
class ChessBoard : public sf::Drawable {
void draw (RenderTarget &target, RenderStates states) const {
target.draw(mVertices, states);
}
}
그래서, 다시 메인 게임 루프. ChessBoard
을 그리는 방법은 무엇입니까? 다시 말하지만, 사소한 :이 방법의 장점은 처음으로 명확하지 않을 수도 있지만, 그것은 당신이 선 아래로 책임을 통과 할 수있는 걸보고 꽤 쉽게
while (window.isOpen()) {
// All the other things happening
window.draw(mChessBoard);
}
. 예를 들어, ChessBoard
은 올바르게 Square
을 그리는 방법을 알 필요가 없습니다. 사소한 예로 - 단색의 폴리곤 만 사용하는 것만 큼 눈에 띄지는 않지만 쉐이더, 텍스처 등을 추가하면 코드가 훨씬 깨끗해질 것입니다. 갑자기 더 이상 sf::VertexArray
을 반환하지 않아도됩니다. 다른 리소스에 대한 포인터 또는 참조가 필요합니다. 따라서 ChessBoard
은 Square
에서 올바르게 그릴 것을 요청할 구성 요소 (셰이더가 있습니까? 텍스처가 필요합니까?)를 알아야합니다.
모든 정보를 제공해 주셔서 감사합니다. 나중에 프로젝트를 끝내기위한 위기에 처하게 될 것입니다.하지만 대단히 감사하겠습니다. –