c++ 프로그래밍 한번만 봐주세요.

lalupo20의 이미지

https://kldp.org/node/165866

일단 밑에 이 글에 관련된 글입니다

밑에 글에서 언급한 두 손가락 터치 어찌어찌 구현하기는 했는데요.

한가지 버그가 있습니다.

두손가락으로 버튼을 누르고 있다가, 눌린 두 버튼 중 오른쪽에 있는 버튼을 누른 손가락을 때면

왼쪽에 있던 버튼이 원 위치로 돌아왔다가 다시 눌립니다.

제가 작성한 코드에 논리적인 문제점이 있는지 한번 봐주실 수 있을까요?

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;
			}
		}
	}
}

라스코니의 이미지

잘 모르겠네요.

touchMove()에서 마지막 else { }이 들어오는 상황이면 어떤 버튼이 눌린 상태에서 touchUp()이 되는데 의도하신 대로 동작하는 건가요?

그리고 매번 for (int i = 0; i < 7; i++) 이렇게 7개 버튼을 순환해서 검사해야 하나요?

lalupo20의 이미지

일단 여쭈어보신 touchMove()함수에서 else 문 이하 코드는 양 손가락이 누르고 있지 않은 버튼의 경우 touchUp()이 되어야 하니까 맞는거 같습니다. 그리고 두번째 for문 관해서는 제가 코드를 조금 수정했습니다. touchDown() 함수가 호출될때 변수를 하나 선언해서 해당 객체 주소값을 저장해 두었다가, touchUp함수가 호출될 때, 미리 선언된 변수가 가르키는 객체만 검사하도록 수정했습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.