c++ 프로그래밍 한번만 봐주세요.
글쓴이: lalupo20 / 작성시간: 일, 2022/10/23 - 4:09오후
일단 밑에 이 글에 관련된 글입니다
밑에 글에서 언급한 두 손가락 터치 어찌어찌 구현하기는 했는데요.
한가지 버그가 있습니다.
두손가락으로 버튼을 누르고 있다가, 눌린 두 버튼 중 오른쪽에 있는 버튼을 누른 손가락을 때면
왼쪽에 있던 버튼이 원 위치로 돌아왔다가 다시 눌립니다.
제가 작성한 코드에 논리적인 문제점이 있는지 한번 봐주실 수 있을까요?
button 객체의 touchUp()함수는 눌린 버튼을 원위치로 되돌리는 역할을 하고
touchDown() 함수는 버튼을 눌러 아래로 조금 이동시키는 함수이며
checkTouch() 함수는 해당 버튼이 터치 되었는지 판단하는 함수이고
isTouched() 함수는 해당 버튼이 눌린 상태(touchDown()이 호출된 상태인지)인지 판단하는 함수입니다.
일단 터치한 손가락을 땔 때 호출되는 함수는 아래와 같습니다.
void MainView::touchUp() { for (int i = 0; i < 7; i++) { GameButton* button = gameBoard->getButton(i); if (button->checkTouch(pixelsL)) { if (button->isTouched() == true) { button->touchUp(); return; } } else if (button->checkTouch(pixelsR)) { if (button->isTouched() == true) { button->touchUp(); return; } } } }
그리고 그 다음은 터치한 손가락을 움직였을때
void MainView::touchMove() { for (int i = 0; i < 7; i++) { GameButton* button = gameBoard->getButton(i); if (button->checkTouch(pixelsL)) { if (button->isTouched() == false) button->touchDown(); } else if (button->checkTouch(pixelsR)) { if (button->isTouched() == false) button->touchDown(); } else { if (button->isTouched() == true) button->touchUp(); } } }
마지막 함수는 화면을 터치했을때 호출됩니다.
void MainView::touchDown() { for (int i = 0; i < 7; i++) { GameButton* button = gameBoard->getButton(i); if (button->checkTouch(pixelsL)) { if (button->isTouched() == false) { button->touchDown(); return; } } else if (button->checkTouch(pixelsR)) { if (button->isTouched() == false) { button->touchDown(); return; } } } }
Forums:
잘 모르겠네요.
잘 모르겠네요.
touchMove()에서 마지막 else { }이 들어오는 상황이면 어떤 버튼이 눌린 상태에서 touchUp()이 되는데 의도하신 대로 동작하는 건가요?
그리고 매번 for (int i = 0; i < 7; i++) 이렇게 7개 버튼을 순환해서 검사해야 하나요?
댓글 감사드립니다.
일단 여쭈어보신 touchMove()함수에서 else 문 이하 코드는 양 손가락이 누르고 있지 않은 버튼의 경우 touchUp()이 되어야 하니까 맞는거 같습니다. 그리고 두번째 for문 관해서는 제가 코드를 조금 수정했습니다. touchDown() 함수가 호출될때 변수를 하나 선언해서 해당 객체 주소값을 저장해 두었다가, touchUp함수가 호출될 때, 미리 선언된 변수가 가르키는 객체만 검사하도록 수정했습니다.
댓글 달기