총알 여러개 만드는 코드인데
스페이스바 누를때마다 새로운 탄환 객체 만드려고함
근대 처음에는
if (isKeyPressedAndReleased(GLFW_KEY_SPACE))
{
for (int i = 0; i <bullet_num; i++)
{
if (b[i] == nullptr)
{
bb = i;
continue;
}
}
if (b[bb] == nullptr) {
b[bb] = new MyBullet;
b[bb]->center = tank.center;
b[bb]->center.x += 0.2f;
b[bb]->center.y += 0.1f;
b[bb]->velocity = vec2(0.5f, 0.0f);
}
}
이렇게 짜서 잘됐는데
코드좀 줄일수 있을꺼같아서
{
for (int i = 0; i < bullet_num; i++)
{
if (bullet[i] == nullptr)
{
bullet[i] = new MyBullet;
bullet[i]->center = center;
bullet[i]->center.x += 0.2f;
bullet[i]->center.y += 0.1f;
bullet[i]->velocity = vec2(0.5f, 0.0f);
continue;
}
}
}
이렇게 다시 짜봤단말야?
근대 이렇게 하니깐 하나밖에 생성이 안되고 그 탄 객체가 조건에 의해서 딜리트되면 그때 다시 생성되더라
근대 뭐가 잘못됐나? 싶어서 두개 코드 비교해봤는데 차이점을 모르겠음 똑같은 코드 아님???
SoftVanilla
총알 배열에 똑같은 총알 정보로 bullet_num개만큼 생성되는거 아님?
그냥 배열이 nullptr이면 무조건 생성하는거 같은데,
하나처럼 보이지만 사실은 bullet_num개의 총알이 겹쳐있을 거 같은데
씨발좆같은개새끼
그래서 하나 생성되면 컨티뉴로 빠져나오게 했는데??
SoftVanilla
break 쓰려는걸 continue로 착각한거 아님?
continue하면 다시 루프문 처음으로 돌아가잖아
씨발좆같은개새끼
맞네시발 ㅋㅋㅋㅋㅋㅋㅋ엌ㅋㅋ break 써도 안되서 왜안되지 했더니 다른 컴파일러에 했던거네 씨발 ㅋㅋ
다시 제대로 해보니간 된다 개빡대가리새끼 ㅋㅋ
SoftVanilla
개발환경이 뭔지는 모르겠지만, 디버거를 쓰거나 bullet 생성 쪽에 총알 생성 로그를 찍어보는 식으로 원인 파악이 가능함
씨발좆같은개새끼
걍 opengl 만지면서 놀고있음 ㅋㅋ; 디버거 활용을 잘못하겠어서 잘안쓰긴함
Lssss
Continue땜에 for빠져나와서 1개만 만들어지는거 아님?
씨발좆같은개새끼
그럼 다시 스페이스바 누르면 생성되야되는거 아님??
Lssss
캄 걍 continue자리에 리턴시키면 안되나
객체 삭제할때 null초기화 잘되있음 될것같은뎅;;
mrquta
continue 대신 break 써라. 그럼 될거 같은데? 수정전 코드는 배열을 돌며 가장 마지막 빈 슬롯을 찾아서 거기다가 새로운 총알을 넣는 코드고, 수정 후 코드는 배열돌며 빈데다가 줴다 새로운 총알을 하나씩 집어넣는 코드라 한번쏘고 나면, 모든 배열이 같은 위치에 스폰된 총알들로 차 있어서 추가로 발사가 안되는거지. break를 쓰면 가장 처음 만난 빈 슬롯에 총알 하나 만들고 루프 탈출하니 될꺼야.
씨발좆같은개새끼
브레이크 쓰니간 스페이스바 누르면 처음 만들어서 나가는 총알 객체가 다시 생성되서 나가는데 ㅋㅋ;;?
씨발좆같은개새끼
ㄴㄴ num을 20으로 고정시켜셔 무조껀 20개는 나가야되는데 1개밖에 안나가고 그게 사라져야지 나가더라
mrquta
if (isKeyPressedAndReleased(GLFW_KEY_SPACE))
{
for (int i = 0; i < bullet_num; i++)
{
if (bullet[i] == nullptr)
{
bullet[i] = new MyBullet;
bullet[i]->center = center;
bullet[i]->center.x += 0.2f;
bullet[i]->center.y += 0.1f;
bullet[i]->velocity = vec2(0.5f, 0.0f);
break;
}
}
}
이렇게 한거지?
mrquta
그럴리가 있나?? 저기 코드만으론 그럴리가 없는데...?
씨발좆같은개새끼
ㅈㅅ 다시 제대로 break써보니간 되더라 다른 컴파일 코드에 해서 안됐었음 씨발 ㅋㅋㅋㅋㅋ ㅈㅅㅈㅅ;;;;
숨참고백스텝
씨발좆같은개새끼
ㅇㅈ 개빡머가리새끼 ㅋㅋ 컨티뉴랑 브레이크랑 해깔려서 몇시간동안 머리 감싸해맴 ㅋㅋㅋㅋㅋ
가난한미식가
지금 코드만 보면 한 프레임에 총알이 모두 생성되는게 맞음.
for문 실행은 한 프레임 안에 모두 실행되고, 첫 발사시 현재 사용 가능한 모든 포인터에 총알이 모두 생성되어 똑같은 위치 정보를 가진 총알이 동시에 발사된다 이 말임.
continue 용법이 내가 아는거랑 다른거같음.
내가 알기로 continue는 이하의 명령을 실행하지 않고 바로 다음 회차 반복으로 진입하는거거든.
한 번 스페이스 누를 때 마다 하나씩 발사되도록 하러면 윗 댓글 말대로 break를 써서 만들면 될거야.
가난한미식가
아 댓글 쓰고 보니 이미 이해했나보네