私は限られたPythonの経験からC++に来たのだろうか? PythonではGUIを扱うためにTkinterを使うことが多く、キャンバスやウィンドウをそれを格納する他のクラスに渡してキャンバスに描画することができます。SFML RenderWindowをクラスに渡す
私はSFMLとC++で同じことをしようとしていますが、今のところ、メソッドが呼び出されるたびにsf::RenderWindow
をメソッドに渡す必要があるソリューションしか見つかりませんでした。
たとえば、Player.move( 'up')が呼び出されるたびに、プレーヤーのスプライトを保持し、スプライトを移動したいと思う 'player'クラスがあります。
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(); //Nothing passed
player.move(window, "up"); //Pass window every time
player.move(window, "down");
player.move(window, "left");
return 0;
}
:私は、次のコードを使用する必要があります(それは少し間違っている可能性があり、私は電車の中ながら、これを入力したが、うまくいけば、あなたが画像を取得する)と言ったVEの
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++ではないでしょうか?
を'move'でも' draw'を呼び出しますか?ゲームロジックからレンダリングを分離する。 – LogicStuff
'' down''は二重引用符でなければなりません。このコードはコンパイルされていますか? –
Guillame、私は一重引用符を修正しました。私は現在非常に長い列車の旅に乗っていて、これを記憶からタイプしているので、おそらくもっと間違いがあります。 LogicStuff、なぜ '移動'は '描画'を呼び出すべきではありませんか? 私は、メソッドが誰もが期待するプロセスの多くを処理するように教えられてきました。このクラスをSFMLゲームで動作させるために私が誰かに与えて、 "player.move(" up ");とタイプすると、プレーヤーが上に動かないと、彼らはかなり混乱するでしょう。私が方法でそのようなことをすることができないならば、私たちが世界で持っている唯一のものは、ゲッターとセッターです。どれくらい退屈です! – Matchoo