마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

조이스틱 구현에 관한 질문입니다.

0 추천

조이스틱이 있으면 큰 원 안에 작은 원이 있어서 그걸 터치해서 움직이면 큰 원을 벗어나지 않는 범위에서 손가락의 움직임을 따라가잖아요? 그거 만들려고 하는데,

다음은 그 소스입니다.

public boolean onTouchEvent(MotionEvent event) {
			int action = event.getAction();
			e_x=event.getX();
			e_y= event.getY();
			switch(action){
			case MotionEvent.ACTION_MOVE:
				if (e_x > this.x && e_x < this.x + cont.getWidth()
	                    && e_y > this.y && e_y < this.y + cont.getHeight()) {
					a=1;//터치가 작은 원의 범위애서 이루어짐
	            }
				if(a==1){
					this.x = e_x ; //터치점의 x좌표
	                this.y = e_y ; //터치점의 y좌표
				}
				if((e_x-45)*(e_x-45)>r*r-(e_y-(y_b+cont_b.getHeight()/2))*(e_y-(y_b+cont_b.getHeight()/2))){
					this.x=(float) Math.sqrt(r*r-(this.y-(y_b+cont_b.getHeight()/2))*(this.y-(y_b+cont_b.getHeight()/2)))+45;
				} //(x-a)^2+(y-b)^2=r^2 응용한 것임. this.x는 비트맵 작은 원 이 그려질 x좌표, this.y는 비트맵 cont가 그려질 y좌표이다. r는 큰 원의 반지름.y_b는큰 원의 중심의 y좌표임. cont_b는 비트맵 큰 원임.
				if((e_y-(y_b+cont_b.getHeight()/2))*(e_y-(y_b+cont_b.getHeight()/2))>r*r-(e_x-45)*(e_x-45)){
					this.y=(float) Math.sqrt(r*r-(this.x-45)*(this.x-45))+(y_b+cont_b.getHeight()/2);
				}
				invalidate();
				break;
			case MotionEvent.ACTION_UP:
				this.x=cont_b.getWidth()/2-cont.getWidth()/2;
				this.y=y_b+cont_b.getHeight()/2-cont.getHeight()/2;
				e_x=0;
				e_y=0;
				a=0;
	           	 break;		
			};
			return true;

이렇게 하면 제대로 안 움직이던데 무엇이 잘못된 걸까요???

익명사용자 님이 2013년 7월 14일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...