SFMLゲームを作成する

すべてのイグロデロフとその同情者への挨拶。 この記事では、SFMLなどのフレームワークについて説明し、その上で簡単なゲームを作成してみます(この場合、伝説のPongのクローンになります)。



v



ダウンロードしてインストール



フレームワークは公式サイトからダウンロードできます。 現時点では、1.6と2.0の2つのバージョンをダウンロードできます。 Visual C ++ 2010にはバージョン2.0を使用しました。ご使用のOSおよびコンパイラにオプションSFMLを選択できます。



この記事の目的は、異なるIDEでライブラリを接続する機能について説明することではないため、インストールガイドはで読むことができます サイト OSやコンパイラに縛られることなく、ストーリーをリードしていきます。



基盤を作る



ライブラリのうち、必要なのはsfml-graphics、sfml-window、sfml-systemのみです (クロスプラットフォームのmain関数のためにsfml-mainを接続できます)。 将来のゲームのスケルトンを作成し始めます。



#include <SFML/Graphics.hpp> int main() { //     sf::RenderWindow window(sf::VideoMode(800, 600), "Pong"); //    while(window.isOpen()) { //     sf::Event event; while(window.pollEvent(event)) { //           Escape if(event.type == sf::Event::Closed || (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)) window.close(); } //  window.clear(); //         //  window.display(); } return 0; }
      
      







ここで何をしましたか? 最初の行では、 Graphics.hppヘッダーファイルが接続され、 メイン()関数と、タイトルが「Pong」の800X600サイズのウィンドウが作成されました。



SFMLは便利なイベント管理ツールを提供します。 これらを使用して、アプリケーションサイクルを作成し、ウィンドウイベントを処理します。 ループの助けを借りて、Escapeキーを押してウィンドウを閉じることを実装します。 一般に、 sf :: Eventは、キーボードだけでなく、たとえばマウスでも動作する機能を提供します。 さらに、一部のシステムイベントを処理できますが、新しいプラットフォームごとにコードを書き換えないでください。 したがって、ゲームでジョイスティックを使用する場合、コードの半分を書き直す必要はありません。処理サイクルに数行を追加するだけで十分です。



次に、ウィンドウをクリアし、バッファーの内容を描画します。 すべて、ゲームフレームの準備ができました。作業をコンパイルしてテストできます。 黒いウィンドウが目の前に表示されます。



ラケット



Pongには、ラケットとボールの2種類のオブジェクトしかありません。 次の記事でボールを扱い、ラケットクラスを作成します。 しかし、最初に、 main()に数行を追加する必要があります。



 //    (   ) sf::Clock clock; float time; //    (  ) window.setVerticalSyncEnabled(true); /*     window.clear().           */ time = clock.getElapsedTime().asMilliseconds(); clock.restart();
      
      







それでは、 Paddleクラスの作成を始めましょう。 ここでは基本的な方法のみを説明しました。他のすべてはソースで見ることができます(記事の最後にあるダウンロードリンク)。



 class Paddle { sf::RenderWindow* window; //   ,    sf::RectangleShape rectangle; // ,   int y; //  y  (x    ) int player; //   (1  2) int score; //     public: //  Paddle(sf::RenderWindow* window, int player) { this->score = 0; this->y = 300; this->player = player; this->window = window; //       Vector2f this->rectangle.setSize(sf::Vector2f(10, 100)); //            this->rectangle.setOrigin(5, 50); //       if(this->player == 1) { this->rectangle.setPosition(25, this->y); } else { this->rectangle.setPosition(775, this->y); } } //     void draw() { this->window->draw(this->rectangle); } /*          ,  --  W  S */ void update(float time) { if(this->player == 1) { if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) { //         this->y -= time * 0.3; this->setY(this->y); // setY -    Y } else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) { this->y += time * 0.3; this->setY(this->y); } } else { if(sf::Keyboard::isKeyPressed(sf::Keyboard::W)) { this->setY(this->y - time * 0.3); } else if(sf::Keyboard::isKeyPressed(sf::Keyboard::S)) { this->setY(this->y + time * 0.3); } } }
      
      







サイズが10X100の長方形のラケットとして機能します。 Vector2fクラスを使用してサイズを設定します-これはごく普通のベクトルです。将来的にはボールの方向を設定するのに役立ちます。



イベントシステムに加えて、SFMLには入力デバイスを処理する別の方法があります。 キーボードからラケットを制御するために使用します。 プレーヤーのコントロールをマウスに転送することもできます-このため、 sf :: Mouse (またはsf :: Joystick )が使用されます。



ソースコードでは、 setYメソッドに注意することをお勧めします。このメソッドは、ラケットの座標をチェックし、フィールドから出ないようにします。



これで、ウィンドウをクリアした後、 Paddleオブジェクトのペアを作成し、 drawおよびupdateメソッドを呼び出すことができます。 ソースコードをコンパイルすると、ウィンドウの反対側に2つのラケットが表示されます。1つ目は上下の矢印キーを使用して制御され、2つ目はWとSによって制御されます。



おわりに



とりあえず、ここで終わります。次の記事では、ボールクラスとポイントシステムの作成方法を説明します。

ソース



All Articles