응애맘마조

회전하는 미사일 공 본문

공부/2D과제

회전하는 미사일 공

TH.Wert 2022. 12. 26. 23:12

금요일에 내준 과제였는데 대전을 가느라 좀 늦었습니다.

과제 내용은 미사일 주변으로 회전하는 공을 만드는 것이 과제였습니다.

실행 영상입니다.

 

총 10발이고 10발 발사가 끝나면 더 이상 발사가 안됩니다. R키를 눌러서 리로드를 시켜서 다시 발사 가능하게끔 만들었습니다.

#include "stdafx.h"
#include "Main.h"

void Main::Init()
{
    player.SetWorldPos(Vector2(0.0f, 0.0f));
    player.scale = Vector2(80.0f, 80.0f);
    player.rotation = 0.0f;
    player.isAxis = true;
    player.isFilled = false;
    player.isVisible = true;
    player.color = Color(4.0f / 255.0f, 176.0f / 255.0f, 153.0f / 255.0f, 1.0f);

    pet.SetParentRT(player);
    pet.SetLocalPos(Vector2(100.0f, 100.0f));
    pet.scale = Vector2(30.0f, 30.0f);
    pet.rotation = 0.0f;
    pet.isAxis = true;

    for (int i = 0; i < BMAX; i++)
    {
        missileball[i].ball.SetParentRT(bullet[i].missile);
        missileball[i].ball.SetLocalPos(Vector2(30.0f, 30.0f));
        missileball[i].ball.scale = Vector2(10.0f, 10.0f);
        missileball[i].ball.rotation = 0.0f;
        missileball[i].ball.isAxis = false;
        missileball[i].ball.isFilled = true;
        missileball[i].ball.isVisible = true;
        missileball[i].ball.color = Color(0.5f, 0.5f, 0.5f, 1.0f);
    }

}

void Main::Release()
{
}

void Main::Update()
{
    if (INPUT->KeyPress(VK_UP))
    {
        player.MoveWorldPos(player.GetUp() * 200.0f * DELTA);
    }
    if (INPUT->KeyPress(VK_DOWN))
    {
        player.MoveWorldPos(-player.GetUp() * 200.0f * DELTA);
    }
    if (INPUT->KeyPress(VK_LEFT))
    {
        player.rotation -= 120.0f * ToRadian * DELTA;
    }
    if (INPUT->KeyPress(VK_RIGHT))
    {
        player.rotation += 120.0f * ToRadian * DELTA;
    }

    if (INPUT->KeyDown('R'))
    {
        for (int i = 0; i < BMAX; i++)
        {
            bullet[i].isVisible = false;
            missileball[i].isVisible = false;

            if (!bullet[i].isVisible)
            {
                BMAX - 10;
            }
        }
    }

    //발사해라
    if (INPUT->KeyDown(VK_SPACE))
    {
        for (int i = 0; i < BMAX; i++)
        {
            if (!bullet[i].isVisible)
            {
                missileball[i].isVisible = true;
                bullet[i].isVisible = true;
                bullet[i].missile.rotation = Utility::DirToRadian(player.GetRight());
                bullet[i].missile.SetWorldPos(player.GetWorldPos());

                missileball[i].ball.rotation = Utility::DirToRadian(player.GetRight());
                missileball[i].ball.SetWorldPos(player.GetWorldPos());
                break;
            }
        }       
    }

    for (int i = 0; i < BMAX; i++)
    {
        if (bullet[i].isVisible)
        {
            bullet[i].missile.MoveWorldPos(bullet[i].missile.GetRight() * 200.0f * DELTA);
        }
    }

    pet.revolution += 30.0f * ToRadian * DELTA;

    for (int i = 0; i < BMAX; i++)
    {
        missileball[i].ball.revolution += 500.0f * ToRadian * DELTA;
    }

    player.Update();
    pet.Update();

    for (int i = 0; i < BMAX; i++)
    {
        if (!bullet[i].isVisible) continue;
        bullet[i].missile.Update();
        missileball[i].ball.Update();
    }
}

void Main::LateUpdate()
{
}

void Main::Render()
{
    player.Render();
    pet.Render();

    for (int i = 0; i < BMAX; i++)
    {
        if (!bullet[i].isVisible) continue;
        bullet[i].missile.Render();
        missileball[i].ball.Render();
    }
}

void Main::ResizeScreen()
{
}

int WINAPI wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR param, int command)
{
    app.SetAppName(L"Game1");
    app.SetInstance(instance);
	app.InitWidthHeight(1400,800.0f);
	WIN->Create();
	Main* main = new Main();
	int wParam = (int)WIN->Run(main);
	SafeDelete(main);
	WIN->Destroy();
	WIN->DeleteSingleton();
	
	return wParam;
}

코드입니다.

 

읽어주셔서 감사합니다.

'공부 > 2D과제' 카테고리의 다른 글

가속도 미사일  (2) 2022.12.28
게이지에 따른 미사일 세기  (0) 2022.12.28
미사일 발사  (0) 2022.12.23
태양계2  (0) 2022.12.22
태양계  (0) 2022.12.21
Comments