응애맘마조
쿠키런 2탄 : 착지, 젤리 먹기, 타격 본문
저번 1탄에 이어서 착지 모션과 젤리 아이템을 먹었을 때 사라지게 하는 것이 과제였습니다.
(타격 모션은 과제 내용이 아니었습니다.)
//main.h
#pragma once
enum class C_State
{
RUN,
JUMP,
SLIDE
};
class Cookie
{
public:
ObRect* col;
ObImage* run;
ObImage* jump;
ObImage* slide;
ObImage* landing;
C_State state;
float gravity;
bool doubleJump;
bool isDamaged;
float damageTime;
public:
Cookie();
~Cookie();
void Update();
void Render();
void TakeDamage();
};
//main.cpp
#include "stdafx.h"
#include "Main.h"
void Main::Init()
{
test = 1.0f;
for (int i = 0; i < FMAX; i++)
{
floor[i] = new ObImage(L"C_floor.png");
floor[i]->scale = Vector2(floor[0]->imageSize.x, floor[0]->imageSize.y);
floor[i]->pivot = OFFSET_LT;
floor[i]->SetWorldPosX(-app.GetHalfWidth() + floor[0]->imageSize.x * i);
floor[i]->SetWorldPosY(-app.GetHalfHeight() + floor[0]->imageSize.y);
floor[i]->collision = COLLIDER::RECT;
}
for (int i = 0; i < JMAX; i++)
{
jelly[i] = new ObImage(L"C_jelly.png");
jelly[i]->scale = Vector2(jelly[i]->imageSize.x, jelly[i]->imageSize.y);
jelly[i]->SetWorldPosY(sinf(i * 12 * ToRadian) * 150.0f);
jelly[i]->SetWorldPosX(80.0f * i);
jelly[i]->collision = COLLIDER::CIRCLE;
}
cookie = new Cookie;
time = 0.0f;
}
void Main::Release()
{
for (int i = 0; i < FMAX; i++)
{
SafeDelete(floor[i]);
}
for (int i = 0; i < JMAX; i++)
{
SafeDelete(jelly[i]);
}
SafeDelete(cookie);
}
void Main::Update()
{
CAM->position += RIGHT * 100.0f * DELTA;
for (int i = 0; i < FMAX; i++)
{
floor[i]->Update();
}
for (int i = 0; i < JMAX; i++)
{
jelly[i]->Update();
}
cookie->Update();
}
void Main::LateUpdate()
{
for (int i = 0; i < FMAX; i++)
{
if (cookie->col->GetWorldPos().x - floor[i]->GetWorldPos().x > 650.0f)
{
floor[i]->MoveLocalPos(Vector2(FMAX * floor[i]->scale.x, 0.0f));
}
}
for (int i = 0; i < JMAX; i++)
{
if (cookie->col->GetWorldPos().x - jelly[i]->GetWorldPos().x > 650.0f)
{
jelly[i]->MoveLocalPos(Vector2(80.0f * JMAX, 0.0f));
jelly[i]->isVisible = true;
}
}
for (int i = 0; i < JMAX; i++)
{
if (jelly[i]->Intersect(cookie->col))
{
jelly[i]->isVisible = false;
cookie->TakeDamage();
}
}
for (int i = 0; i < FMAX; i++)
{
if (floor[i]->Intersect(cookie->col->GetWorldPos()))
{
cookie->col->SetWorldPosY(-app.GetHalfHeight() + 140.0f);
//jump -> run
if (cookie->state == C_State::JUMP)
{
cookie->landing->isVisible = true;
cookie->jump->isVisible = false;
cookie->doubleJump = true;
if (TIMER->GetTick(time, 0.3f))
{
cookie->state = C_State::RUN;
cookie->run->isVisible = true;
cookie->landing->isVisible = false;
cookie->doubleJump = false;
}
}
}
}
}
void Main::Render()
{
for (int i = 0; i < FMAX; i++)
{
floor[i]->Render();
}
for (int i = 0; i < JMAX; i++)
{
jelly[i]->Render();
}
cookie->Render();
}
void Main::ResizeScreen()
{
}
int WINAPI wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR param, int command)
{
app.SetAppName(L"Game1");
app.SetInstance(instance);
app.InitWidthHeight(1600, 800.0f);
WIN->Create();
Main* main = new Main();
int wParam = (int)WIN->Run(main);
SafeDelete(main);
WIN->Destroy();
WIN->DeleteSingleton();
return wParam;
}
코드입니다.
읽어주셔서 감사합니다.