ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

Siv3Dさわってみた

スポンサードリンク

今度、PyData.OkinawaでLT大会があるのでネタ探ししている。

C++で簡単にゲーム作れないかな?って検索したらこんなのがあった。

github.com

面白そうなので触ってみた(ちなみにC++は全然触ったことがない)

ダウンロード

scrapbox.io

自分のPCはmacなので、mac版をインストールしようとした。

インストールして動作確認したけど、うごかなかった。Sierra以降じゃないとダメらしい(El capitan...)

OSをアップデートしてHigh Sierraにしたらうごいたのでおk

チュートリアルを試す

github.com

画面を表示

# include <Siv3D.hpp>

void Main()
{
  while (System::Update())
  {
    
  }
}

うひょー。これだけで画面が起動した。

画面の座標

# include <Siv3D.hpp>

void Main()
{
    const Font font(30);

    while (System::Update())
    {
        Circle(Mouse::Pos(), 100).draw();

        font(Mouse::Pos()).draw(50, 200, Palette::Orange);
    }
}

? エラーになった。Mouseというモジュール?がない?

よくわからんが、Cursorに変更したら動いた。

# include <Siv3D.hpp>

void Main()
{
  const Font font(30);
  
  while (System::Update())
  {
    Circle(Cursor::Pos(), 100).draw();
    
    font(Cursor::Pos()).draw(50, 200, Palette::Orange);
  }
}

左上が(0,0)ということがわかった。

カラフル

# include <Siv3D.hpp>

void Main()
{
    Graphics::SetBackground(Palette::White);

    while (System::Update())
    {
        for (int32 i = 0; i < 36; ++i)
        {
            const double radian = Radians(i * 10 + System::FrameCount());

            const Vec2 pos = Circular(200, radian) + Window::Center();

            RectF(25).setCenter(pos).rotated(radian).draw(HSV(i * 10));
        }
    }
}

たのしい(なんでこうなるか全くわからんけど)

f:id:aipacommander:20180413031338p:plain

フォントとか画像の読み込み

// 間違ったプログラム
# include <Siv3D.hpp>

void Main()
{
    while (System::Update())
    {
        // NG! 毎フレーム テクスチャを作成する
        const Texture texture(L"Example/Windmill.png");

        // NG! 毎フレーム フォントを作成する
        const Font font(100);

        texture.draw();

        font(L"Hello").draw();
    }
}

メインループに作成するのはやめたほうがいいとのこと。だがそもそもうごかぬ。

No matching constructor for initialization of 'const s3d::Image'なんだろうかこのエラー。

初心者が書き直してみた。

# include <Siv3D.hpp>

void Main()
{
  const s3d::Image image(U"../assets/beer_cup_bin.png");
  const s3d::Texture texture(image);
  
  const Font font(100);
  
  while (System::Update())
  {
    texture.draw();
    font(U"Hello").draw();
  }
}

U""ってなに?)

f:id:aipacommander:20180413042019p:plain

雑感

疲れたので寝る.