表示するサンプルコードの言語を指定できます。

ポーズ

Altseedでは、Layerの機能を使用して簡単にポーズを実装することができます。

基本

SS

C++


#include <Altseed.h>

// ポーズのサンプル。

/**
@brief  ポーズを実行するレイヤー
*/
class PauseLayer
    : public asd::Layer2D
{
    void OnAdded() override
    {
        // ポーズ以外のレイヤーの更新を停止する。
        for(auto& layer : GetScene()->GetLayers())
        {
            if (layer.get() != this) layer->SetIsUpdated(false);
        }

        // ポーズを表示するオブジェクトを生成する。
        auto obj = std::make_shared<asd::TextureObject2D>();
        obj->SetTexture(asd::Engine::GetGraphics()->CreateTexture2D(asd::ToAString("Data/Texture/Pause1.png").c_str()));
        AddObject(obj);
    }

    void OnUpdated() override
    {
        // スペースが押されたら、他のレイヤーの更新を再開して、ポーズレイヤーを破棄する。
        if (asd::Engine::GetKeyboard()->GetKeyState(asd::Keys::Space) == asd::ButtonState::Push)
        {
            for (auto& layer : GetScene()->GetLayers())
            {
                layer->SetIsUpdated(true);
            }
            Dispose();
        }
    }
};

/**
    @brief  ゲームの挙動を描画するレイヤー
*/
class MainLayer 
    : public asd::Layer2D
{
    std::shared_ptr<asd::TextureObject2D> obj = nullptr;

public:
    MainLayer()
    {
        // 画像を表示するオブジェクトを生成する。
        obj = std::make_shared<asd::TextureObject2D>();
        obj->SetTexture(asd::Engine::GetGraphics()->CreateTexture2D(u"Data/Texture/Picture1.png"));
        obj->SetPosition(asd::Vector2DF(320, 240));
        obj->SetCenterPosition(asd::Vector2DF(obj->GetTexture()->GetSize().X / 2, obj->GetTexture()->GetSize().Y / 2));
        AddObject(obj);
    }

    void OnUpdated() override
    {
        // スペースが押されたら、ポーズレイヤーを追加する。
        if (asd::Engine::GetKeyboard()->GetKeyState(asd::Keys::Space) == asd::ButtonState::Push)
        {
            auto pauseLayer = std::make_shared<PauseLayer>();
            GetScene()->AddLayer(pauseLayer);
        }

        // 画像を回転させる。
        obj->SetAngle(obj->GetAngle() + 1.0f);
    }
};

int main()
{
    // Altseedを初期化する。
    asd::Engine::Initialize(u"Pause_Basic", 640, 480, asd::EngineOption());

    // シーンを生成する
    auto scene = std::make_shared<asd::Scene>();

    // レイヤーを生成する
    auto layer = std::make_shared<MainLayer>();

    // シーンにレイヤーを追加する
    scene->AddLayer(layer);

    // シーンを切り替える
    asd::Engine::ChangeScene(scene);

    // Altseedのウインドウが閉じられていないか確認する。
    while (asd::Engine::DoEvents())
    {
        // Altseedを更新する。
        asd::Engine::Update();
    }

    // Altseedの終了処理をする。
    asd::Engine::Terminate();

    return 0;
}

C#


/// <summary>
/// ポーズを実行するレイヤー
/// </summary>
class Pause_Basic_PauseLayer : asd.Layer2D
{
    protected override void OnAdded()
    {
        // ポーズ以外のレイヤーの更新を停止する。
        foreach(var layer in Scene.Layers)
        {
            if(layer != this) layer.IsUpdated = false;
        }

        // ポーズを表示するオブジェクトを生成する。
        var obj = new asd.TextureObject2D();
        obj.Texture = asd.Engine.Graphics.CreateTexture2D("Data/Texture/Pause1.png");
        AddObject(obj);
    }

    protected override void OnUpdated()
    {
        // スペースが押されたら、他のレイヤーの更新を再開して、ポーズレイヤーを破棄する。
        if(asd.Engine.Keyboard.GetKeyState(asd.Keys.Space) == asd.ButtonState.Push)
        {
            foreach(var layer in Scene.Layers)
            {
                layer.IsUpdated = true;
            }
            Dispose();
        }
    }
}

/// <summary>
/// ゲームの挙動を描画するレイヤー
/// </summary>
class Pause_Basic_MainLayer : asd.Layer2D
{
    asd.TextureObject2D obj = null;

    public Pause_Basic_MainLayer()
    {
        // 画像を表示するオブジェクトを生成する。
        obj = new asd.TextureObject2D();
        obj.Texture = asd.Engine.Graphics.CreateTexture2D("Data/Texture/Picture1.png");
        obj.Position = new asd.Vector2DF(320, 240);
        obj.CenterPosition = new asd.Vector2DF(obj.Texture.Size.X / 2, obj.Texture.Size.Y / 2);
        AddObject(obj);
    }

    protected override void OnUpdated()
    {
        // スペースが押されたら、ポーズレイヤーを追加する。
        if(asd.Engine.Keyboard.GetKeyState(asd.Keys.Space) == asd.ButtonState.Push)
        {
            var pauseLayer = new Pause_Basic_PauseLayer();
            Scene.AddLayer(pauseLayer);
        }

        // 画像を回転させる。
        obj.Angle += 1.0f;
    }
}

/// <summary>
/// ポーズのサンプル。
/// </summary>
class Pause_Basic
{
    public string Description
    {
        get { return "レイヤーの処理を一時停止するサンプルです。"; }
    }

    public string Title
    {
        get { return "ポーズ"; }
    }

    public string ClassName
    {
        get { return "Pause_Basic"; }
    }

    [System.STAThread]
    static void Main(string[] args)
    {
        // Altseedを初期化する。
        asd.Engine.Initialize("Pause_Basic", 640, 480, new asd.EngineOption());

        // シーンを生成する
        var scene = new asd.Scene();

        // ゲームの挙動を描画するレイヤーを生成する
        var layer = new Pause_Basic_MainLayer();

        // シーンにレイヤーを追加する
        scene.AddLayer(layer);

        // シーンを切り替える
        asd.Engine.ChangeScene(scene);

        // Altseedのウインドウが閉じられていないか確認する。
        while (asd.Engine.DoEvents())
        {
            // Altseedを更新する。
            asd.Engine.Update();
        }

        // Altseedの終了処理をする。
        asd.Engine.Terminate();
    }
}

Java

/**
 * ポーズのサンプル。
*/
class Pause_Basic 
{
    public java.lang.String getDescription() {
        return "レイヤーの処理を一時停止するサンプルです。";
    }
    public java.lang.String getTitle() {
        return "ポーズ";
    }
    public java.lang.String getClassName() {
        return "Pause_Basic";
    }
    public static void main(String args[])
    {
        // Altseedを初期化する。
        asd.Engine.Initialize("Pause_Basic", 640, 480, new asd.EngineOption());

        // シーンを生成する
        asd.Scene scene = new asd.Scene();

        // ゲームの挙動を描画するレイヤーを生成する
        Pause_Basic_MainLayer layer = new Pause_Basic_MainLayer();

        // シーンにレイヤーを追加する
        scene.AddLayer(layer);

        // シーンを切り替える
        asd.Engine.ChangeScene(scene);

        // Altseedのウインドウが閉じられていないか確認する。
        while(asd.Engine.DoEvents())
        {
            // Altseedを更新する。
            asd.Engine.Update();
        }


        // Altseedの終了処理をする。
        asd.Engine.Terminate();
    }
}