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

2Dの衝突判定

2次元図形同士(Shapeクラスの派生系)が衝突しているかどうかをクラスのGetIsCollidedWithメソッドにて調べることができます。

ここのサンプルに掲載されている図形に限らず、様々な図形同士の衝突判定ができます。

四角

円弧

三角形

多角形

円と円との衝突判定

SS

C++

#include <Altseed.h>

/**
@brief  Collision2Dのサンプル1。マウスによって操作する円が固定された円にヒットしたら円が赤く変化します。
*/
int main()
{
    // Altseedを初期化する。
    asd::Engine::Initialize(asd::ToAString("Collision2D_Basic").c_str(), 640, 480, asd::EngineOption());

    // 図形描画オブジェクトのインスタンスを生成する。
    std::shared_ptr<asd::GeometryObject2D> geometryObj0 = std::make_shared<asd::GeometryObject2D>();
    std::shared_ptr<asd::GeometryObject2D> geometryObj1 = std::make_shared<asd::GeometryObject2D>();

    // マウスによって動かす円。
    std::shared_ptr<asd::CircleShape> selfCircle;

    // 停止している円。
    std::shared_ptr<asd::CircleShape> circle;

    // 図形描画オブジェクトをエンジンに追加する。
    asd::Engine::AddObject2D(geometryObj0);
    asd::Engine::AddObject2D(geometryObj1);

    // マウスによって動かす円の形状と描画の設定を行う。
    {
        // 円の外径を指定する。
        selfCircle = std::make_shared<asd::CircleShape>();
        selfCircle->SetOuterDiameter(100);

        // マウスによって動かす円を描画する図形として設定する。
        geometryObj0->SetShape(selfCircle);
    }

    // 停止している円の形状と描画の設定を行う。
    {
        // 円の外径、内径、頂点数、中心位置を指定する。
        circle = std::make_shared<asd::CircleShape>();
        circle->SetOuterDiameter(100);
        circle->SetPosition(asd::Vector2DF(100, 100));

        // 停止している円を描画する図形として設定する。
        geometryObj1->SetShape(circle);
    }


    // Altseedのウインドウが閉じられていないか確認する。
    while (asd::Engine::DoEvents())
    {
        // マウスによって制御される円の中心位置をマウスの位置とする。
        selfCircle->SetPosition(asd::Engine::GetMouse()->GetPosition());

        // 固定されている円に、マウスによって動く円が衝突した時に円を赤く変化させる。
        // そうでない時は白く変化させる。
        if (selfCircle->GetIsCollidedWith(circle))
        {
            geometryObj0->SetColor(asd::Color(255, 0, 0, 255));
        }
        else
        {
            geometryObj0->SetColor(asd::Color(255, 255, 255, 255));
        }

        // Altseedを更新する。
        asd::Engine::Update();
    }

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

    return 0;
}

C#

/// <summary>
/// Collision2Dのサンプル1。マウスによって操作する円が固定された円にヒットしたら円が赤く変化します。
/// </summary>
public class Collision2D_Basic
{
    public string Title
    {
        get { return ""; }
    }
    public string Description
    {
        get { return ""; }
    }
    public string ClassName
    {
        get { return "Collision2D_Basic"; }
    }

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

        // 図形描画オブジェクトのインスタンスを生成する。
        asd.GeometryObject2D geometryObj0 = new asd.GeometryObject2D();
        asd.GeometryObject2D geometryObj1 = new asd.GeometryObject2D();

        // マウスによって動かす円。
        asd.CircleShape selfCircle = null;

        // 停止している円。
        asd.CircleShape circle = null;

        // 図形描画オブジェクトをエンジンに追加する。
        asd.Engine.AddObject2D(geometryObj0);
        asd.Engine.AddObject2D(geometryObj1);

        // マウスによって動かす円の形状と描画の設定を行う。
        {
            // 円の外径を指定する。
            selfCircle = new asd.CircleShape();
            selfCircle.OuterDiameter = 100;

            // マウスによって動かす円を描画する図形として設定する。
            geometryObj0.Shape = selfCircle;
        }

        // 停止している円の形状と描画の設定を行う。
        {
            // 円の外径、内径、頂点数、中心位置を指定する。
            circle = new asd.CircleShape();
            circle.OuterDiameter = 100;
            circle.Position = new asd.Vector2DF(100, 100);

            // 停止している円を描画する図形として設定する。
            geometryObj1.Shape = circle;
        }


        // Altseedのウインドウが閉じられていないか確認する。
        while (asd.Engine.DoEvents())
        {
            // マウスによって制御される円の中心位置をマウスの位置とする。
            selfCircle.Position = asd.Engine.Mouse.Position;

            // 固定されている円に、マウスによって動く円が衝突した時に円を赤く変化させる。
            // そうでない時は白く変化させる。
            if (selfCircle.GetIsCollidedWith(circle))
            {
                geometryObj0.Color = new asd.Color(255, 0, 0, 255);
            }
            else
            {
                geometryObj0.Color = new asd.Color(255, 255, 255, 255);
            }


            // Altseedを更新する。
            asd.Engine.Update();

        }

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

    }
}

Java

/**
 * Collision2Dのサンプル1。マウスによって操作する円が固定された円にヒットしたら円が赤く変化します。
*/
public class Collision2D_Basic 
{
    public java.lang.String getTitle() {
        return "";
    }
    public java.lang.String getDescription() {
        return "";
    }
    public java.lang.String getClassName() {
        return "Collision2D_Basic";
    }
    public static void main(String args[])
    {
        // Altseedを初期化する。
        asd.Engine.Initialize("Collision2D_Basic", 640, 480, new asd.EngineOption());

        // 図形描画オブジェクトのインスタンスを生成する。
        asd.GeometryObject2D geometryObj0 = new asd.GeometryObject2D();
        asd.GeometryObject2D geometryObj1 = new asd.GeometryObject2D();

        // マウスによって動かす円。
        asd.CircleShape selfCircle = null;

        // 停止している円。
        asd.CircleShape circle = null;

        // 図形描画オブジェクトをエンジンに追加する。
        asd.Engine.AddObject2D(geometryObj0);
        asd.Engine.AddObject2D(geometryObj1);

        // マウスによって動かす円の形状と描画の設定を行う。
        // マウスによって動かす円の形状と描画の設定を行う。

        // 円の外径を指定する。
        selfCircle = new asd.CircleShape();
        selfCircle.setOuterDiameter(100);

        // マウスによって動かす円を描画する図形として設定する。
        geometryObj0.setShape(selfCircle);

        // 停止している円の形状と描画の設定を行う。
        // 停止している円の形状と描画の設定を行う。

        // 円の外径、内径、頂点数、中心位置を指定する。
        circle = new asd.CircleShape();
        circle.setOuterDiameter(100);
        circle.setPosition(new asd.Vector2DF(100, 100));

        // 停止している円を描画する図形として設定する。
        geometryObj1.setShape(circle);


        // Altseedのウインドウが閉じられていないか確認する。
        while(asd.Engine.DoEvents())
        {
            // マウスによって制御される円の中心位置をマウスの位置とする。
            selfCircle.setPosition(asd.Engine.getMouse().getPosition());

            // 固定されている円に、マウスによって動く円が衝突した時に円を赤く変化させる。
            // そうでない時は白く変化させる。
            if(selfCircle.GetIsCollidedWith(circle))
            {
                geometryObj0.setColor(new asd.Color(255, 0, 0, 255));
            }
            else
            {
                geometryObj0.setColor(new asd.Color(255, 255, 255, 255));
            }


            // Altseedを更新する。
            asd.Engine.Update();
        }


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

円とあらゆる図形との衝突判定

SS

C++

#include <Altseed.h>

/**
@brief  Collision2Dのサンプル。マウスによって操作する円が固定されたいずれかのオブジェクトにヒットしたら円が赤く変化します。
*/
int main()
{
    // Altseedを初期化する。
    asd::Engine::Initialize(asd::ToAString("Collision2D_Geometries").c_str(), 640, 480, asd::EngineOption());

    // 図形描画オブジェクトのインスタンスを生成する。
    std::shared_ptr<asd::GeometryObject2D> geometryObj0 = std::make_shared<asd::GeometryObject2D>();
    std::shared_ptr<asd::GeometryObject2D> geometryObj1 = std::make_shared<asd::GeometryObject2D>();
    std::shared_ptr<asd::GeometryObject2D> geometryObj2 = std::make_shared<asd::GeometryObject2D>();
    std::shared_ptr<asd::GeometryObject2D> geometryObj3 = std::make_shared<asd::GeometryObject2D>();

    // マウスによって動かす円。
    std::shared_ptr<asd::CircleShape> selfCircle;

    // 停止している円、三角形、矩形。
    std::shared_ptr<asd::CircleShape> circle;
    std::shared_ptr<asd::TriangleShape> triangle;
    std::shared_ptr<asd::RectangleShape> rect;


    // 図形描画オブジェクトをエンジンに追加する。
    asd::Engine::AddObject2D(geometryObj0);
    asd::Engine::AddObject2D(geometryObj1);
    asd::Engine::AddObject2D(geometryObj2);
    asd::Engine::AddObject2D(geometryObj3);

    // マウスによって動かす円の形状と描画の設定を行う。
    {
        // 円の外径を指定する。
        selfCircle = std::make_shared<asd::CircleShape>();
        selfCircle->SetOuterDiameter(100);

        // マウスによって動かす円を描画する図形として設定する。
        geometryObj0->SetShape(selfCircle);
    }

    // 停止している円の形状と描画の設定を行う。
    {
        // 円の外径、中心位置を指定する。
        circle = std::make_shared<asd::CircleShape>();
        circle->SetOuterDiameter(100);
        circle->SetPosition(asd::Vector2DF(400, 100));

        // 停止している円を描画する図形として設定する。
        geometryObj1->SetShape(circle);
    }

    // 停止している三角形の形状と描画の設定を行う。
    {
        // 三角形の各頂点の位置を指定する。
        triangle = std::make_shared<asd::TriangleShape>();
        triangle->SetPointByIndex(asd::Vector2DF(440, 350), 0);
        triangle->SetPointByIndex(asd::Vector2DF(340, 450), 1);
        triangle->SetPointByIndex(asd::Vector2DF(580, 450), 2);

        // 停止している三角形を描画する図形として設定する。
        geometryObj2->SetShape(triangle);
        geometryObj2->SetPosition(asd::Vector2DF(0, 0));
    }

    // 停止している矩形の形状と描画の設定を行う。
    {
        rect = std::make_shared<asd::RectangleShape>();
        rect->SetDrawingArea(asd::RectF(70, 110, 300, 200));
        rect->SetAngle(15);

        // 停止している矩形を描画する図形として設定する。
        geometryObj3->SetShape(rect);
    }

    // Altseedのウインドウが閉じられていないか確認する。
    while (asd::Engine::DoEvents())
    {
        // マウスによって制御される円の中心位置をマウスの位置とする。
        selfCircle->SetPosition(asd::Engine::GetMouse()->GetPosition());

        // 停止している円・三角形・矩形のいずれかに、マウスによって動く円が衝突した時に円を赤く変化させる。
        // そうでない時は白く変化させる。
        if (selfCircle->GetIsCollidedWith(circle)
            || selfCircle->GetIsCollidedWith(triangle)
            || selfCircle->GetIsCollidedWith(rect))
        {
            geometryObj0->SetColor(asd::Color(255, 0, 0, 255));
        }
        else
        {
            geometryObj0->SetColor(asd::Color(255, 255, 255, 255));
        }

        // Altseedを更新する。
        asd::Engine::Update();
    }

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

    return 0;
}

C#

/// <summary>
/// Collision2Dのサンプル。マウスによって操作する円が固定されたいずれかのオブジェクトにヒットしたら円が赤く変化します。
/// </summary>
public class Collision2D_Geometries
{
    public string Title
    {
        get { return ""; }
    }
    public string Description
    {
        get { return ""; }
    }
    public string ClassName
    {
        get { return "Collision2D_Geometries"; }
    }

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

        // 図形描画オブジェクトのインスタンスを生成する。
        asd.GeometryObject2D geometryObj0 = new asd.GeometryObject2D();
        asd.GeometryObject2D geometryObj1 = new asd.GeometryObject2D();
        asd.GeometryObject2D geometryObj2 = new asd.GeometryObject2D();
        asd.GeometryObject2D geometryObj3 = new asd.GeometryObject2D();

        // マウスによって動かす円。
        asd.CircleShape selfCircle = null;

        // 停止している円、三角形、矩形。
        asd.CircleShape circle = null;
        asd.TriangleShape triangle = null;
        asd.RectangleShape rect = null;


        // 図形描画オブジェクトをエンジンに追加する。
        asd.Engine.AddObject2D(geometryObj0);
        asd.Engine.AddObject2D(geometryObj1);
        asd.Engine.AddObject2D(geometryObj2);
        asd.Engine.AddObject2D(geometryObj3);

        // マウスによって動かす円の形状と描画の設定を行う。
        {
            // 円の外径を指定する。
            selfCircle = new asd.CircleShape();
            selfCircle.OuterDiameter = 100;

            // マウスによって動かす円を描画する図形として設定する。
            geometryObj0.Shape = selfCircle;
        }

        // 停止している円の形状と描画の設定を行う。
        {
            // 円の外径、中心位置を指定する。
            circle = new asd.CircleShape();
            circle.OuterDiameter = 100;
            circle.Position = new asd.Vector2DF(400, 100);

            // 円を描画する図形として設定する。
            geometryObj1.Shape = circle;
        }

        // 停止している三角形の形状と描画の設定を行う。
        {
            // 三角形の各頂点の位置を指定する。
            triangle = new asd.TriangleShape();
            triangle.SetPointByIndex(new asd.Vector2DF(440, 350), 0);
            triangle.SetPointByIndex(new asd.Vector2DF(340, 450), 1);
            triangle.SetPointByIndex(new asd.Vector2DF(580, 450), 2);

            // 停止している三角形を描画する図形として設定する。
            geometryObj2.Shape = triangle;
        }

        // 停止している矩形の形状と描画の設定を行う。
        {
            rect = new asd.RectangleShape();
            rect.DrawingArea = new asd.RectF(70, 110, 300, 200);
            rect.Angle = 15;

            // 停止している矩形を描画する図形として設定する。
            geometryObj3.Shape = rect;
        }


        // Altseedのウインドウが閉じられていないか確認する。
        while (asd.Engine.DoEvents())
        {
            // マウスによって制御される円の中心位置をマウスの位置とする。
            selfCircle.Position = asd.Engine.Mouse.Position;

            // 停止している円・三角形・矩形のいずれかに、マウスによって動く円が衝突した時に円を赤く変化させる。
            // そうでない時は白く変化させる。
            if (selfCircle.GetIsCollidedWith(circle)
                || selfCircle.GetIsCollidedWith(triangle)
                || selfCircle.GetIsCollidedWith(rect))
            {
                geometryObj0.Color = new asd.Color(255, 0, 0, 255);
            }
            else
            {
                geometryObj0.Color = new asd.Color(255, 255, 255, 255);
            }


            // Altseedを更新する。
            asd.Engine.Update();
        }

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

Java

/**
 * Collision2Dのサンプル。マウスによって操作する円が固定されたいずれかのオブジェクトにヒットしたら円が赤く変化します。
*/
public class Collision2D_Geometries 
{
    public java.lang.String getTitle() {
        return "";
    }
    public java.lang.String getDescription() {
        return "";
    }
    public java.lang.String getClassName() {
        return "Collision2D_Geometries";
    }
    public static void main(String args[])
    {
        // Altseedを初期化する。
        asd.Engine.Initialize("Collision2D_Geometries", 640, 480, new asd.EngineOption());

        // 図形描画オブジェクトのインスタンスを生成する。
        asd.GeometryObject2D geometryObj0 = new asd.GeometryObject2D();
        asd.GeometryObject2D geometryObj1 = new asd.GeometryObject2D();
        asd.GeometryObject2D geometryObj2 = new asd.GeometryObject2D();
        asd.GeometryObject2D geometryObj3 = new asd.GeometryObject2D();

        // マウスによって動かす円。
        asd.CircleShape selfCircle = null;

        // 停止している円、三角形、矩形。
        asd.CircleShape circle = null;
        asd.TriangleShape triangle = null;
        asd.RectangleShape rect = null;


        // 図形描画オブジェクトをエンジンに追加する。
        asd.Engine.AddObject2D(geometryObj0);
        asd.Engine.AddObject2D(geometryObj1);
        asd.Engine.AddObject2D(geometryObj2);
        asd.Engine.AddObject2D(geometryObj3);

        // マウスによって動かす円の形状と描画の設定を行う。
        // マウスによって動かす円の形状と描画の設定を行う。

        // 円の外径を指定する。
        selfCircle = new asd.CircleShape();
        selfCircle.setOuterDiameter(100);

        // マウスによって動かす円を描画する図形として設定する。
        geometryObj0.setShape(selfCircle);

        // 停止している円の形状と描画の設定を行う。
        // 停止している円の形状と描画の設定を行う。

        // 円の外径、中心位置を指定する。
        circle = new asd.CircleShape();
        circle.setOuterDiameter(100);
        circle.setPosition(new asd.Vector2DF(400, 100));

        // 円を描画する図形として設定する。
        geometryObj1.setShape(circle);

        // 停止している三角形の形状と描画の設定を行う。
        // 停止している三角形の形状と描画の設定を行う。

        // 三角形の各頂点の位置を指定する。
        triangle = new asd.TriangleShape();
        triangle.SetPointByIndex(new asd.Vector2DF(440, 350), 0);
        triangle.SetPointByIndex(new asd.Vector2DF(340, 450), 1);
        triangle.SetPointByIndex(new asd.Vector2DF(580, 450), 2);

        // 停止している三角形を描画する図形として設定する。
        geometryObj2.setShape(triangle);

        // 停止している矩形の形状と描画の設定を行う。
        // 停止している矩形の形状と描画の設定を行う。

        rect = new asd.RectangleShape();
        rect.setDrawingArea(new asd.RectF(70, 110, 300, 200));
        rect.setAngle(15);

        // 停止している矩形を描画する図形として設定する。
        geometryObj3.setShape(rect);


        // Altseedのウインドウが閉じられていないか確認する。
        while(asd.Engine.DoEvents())
        {
            // マウスによって制御される円の中心位置をマウスの位置とする。
            selfCircle.setPosition(asd.Engine.getMouse().getPosition());

            // 停止している円・三角形・矩形のいずれかに、マウスによって動く円が衝突した時に円を赤く変化させる。
            // そうでない時は白く変化させる。
            if(((selfCircle.GetIsCollidedWith(circle) || selfCircle.GetIsCollidedWith(triangle)) || selfCircle.GetIsCollidedWith(rect)))
            {
                geometryObj0.setColor(new asd.Color(255, 0, 0, 255));
            }
            else
            {
                geometryObj0.setColor(new asd.Color(255, 255, 255, 255));
            }


            // Altseedを更新する。
            asd.Engine.Update();
        }


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