• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

총알이 여러발 나가도록 하려고 하는데 잘안됩니다...

19.09.04 19:04 작성 조회수 226

1

void update() override

{

// move tank

if (isKeyPressed(GLFW_KEY_LEFT))tank.center.x -= 0.5f * getTimeStep();

if (isKeyPressed(GLFW_KEY_RIGHT))tank.center.x += 0.5f * getTimeStep();

if (isKeyPressed(GLFW_KEY_UP))tank.center.y += 0.5f * getTimeStep();

if (isKeyPressed(GLFW_KEY_DOWN))tank.center.y -= 0.5f * getTimeStep();

 

// shoot a cannon ball

if (isKeyPressedAndReleased(GLFW_KEY_SPACE))

{

bullet = new MyBullet;

bullet->center = tank.center;

bullet->center.x += 0.2f;

bullet->center.y += 0.1f;

bullet->velocity = vec2(0.5f, 0.0f);

if (bullet1 == nullptr)bullet1 = bullet;

bullet = bullet->prev;

}

 

if (bullet1 != nullptr && (bullet1->velocity - bullet1->center) > 5)

{

bullet1 = bullet1->prev;

}

bullet_update = bullet1;

while (bullet_update != nullptr)

{

bullet_update->update(getTimeStep());

bullet_update->draw();

bullet_update = bullet_update->prev;

 

}

// rendering

tank.draw();

/*if (bullet1!= nullptr)

{

bullet1->draw();

}*/

}

};

우선  vec2에 대해서 오버로딩 시켜서 벡터 거리 값을 구해서 상수와 크기비교시킬수있도록 해놨습니다.

그래서 그 거리값을 기준으로 총알이 딜리트 시키도록 하려고 했습니다.

그후 리스트 형식을 이용하려고 총알 클래스에 총알 포인트 변수를 넣었고 이를 이용해서 스페이스바를 누르면 총알의 포인트는 총알이전 주소값 현재는 아무 주소값이 없으니깐 nullptr값으로 이동하게되고 이후 다시 스페이스바를 누르면 bullet->prev에 새로운 bullet 클래스를 만들고 여기에 다시 값을 주고 되고 반복하게 하고

제일처음 bullet값을 다른 bullet 클래스 변수 bullet1에 넣어서 이 변수가 조건이 만족되어 delete가 되면 이전변수로 넘어가게 되고

업데이트는 와일문으로 bullet1값에 있는 이전 변수 클래스들을 다 반복문 돌려서 업데이트 시키면서 draw까지 시키려고 했구요

근대 이렇게 생각해서 구현해보니깐 총알이 하나밖에 안나가고 그 총알 하나가 사라져야지 다른 총알이 나오게 됩니다.

뭐가 잘못된지 잘모르겠어서 그런데 좀 어디가 문제인지 알려주실수 있으신가요

너무 어렵네요....

 

 

답변 1

답변을 작성해보세요.

1

안녕하세요? 여기서 어려움을 느끼는 학생들이 꽤 많습니다. 문제의 난이도가 높고 낮음에 상관 없이 어떻게든 스스로 해결하는 것이 가장 중요합니다. 반대로 여기만 잘 극복해내시면 훨씬 수월해집니다. std::vector 같은 컨테이너에 bullet의 포인터를 여러개 저장할 수 있게 구현하면 직접 linked list를 관리하는 것 보다 더 편합니다.