2015-01-16 1 views
0

에서 제대로 문제 자체의 비디오 직사각형/질감의 선택을 해제하는 방법 : 나는 scene2d이 할 수있는 간단한 방법이 알고 https://www.youtube.com/watch?v=cJfFIB3baAg선택하고 클릭

을하지만 난 사각형과 텍스처 변수로이 프로젝트를 만들하기로 결정했습니다 즉, 20 개의 텍스처 (빈 배경이있는 1 ~ 9 개, 행렬 [0] [0]에 표시된 녹색 blackground가있는 1 ~ 9 개)와 20 개의 직사각형이 있으며이 각각은 생성 된 텍스처 변수 중 하나를 나타냅니다. 너도 알다시피, 바로 그 순간에 [0] [0]이 선택되었다. My image

는 내가하고 싶은 것은, 또 다른 사각형을 선택하여,이 결과로 : My second image

그것은 일어나고있다! 문제는 제가 사각형을 클릭 할 때, 그것을 선택하기 위해 클릭 할 필요가 있다는 것입니다 ... 단지 한 번만하는 대신 2 번 또는 3 번! 그리고 나는 그것이 일어나는 이유를 알아낼 수 없습니다! 여기에 제 코드가 있습니다. 뭔가 이해가되지 않으면 저에게 물어보십시오. 당신이 나를 도울 수 있기를 바랍니다.

@Override 
public void render() { 
batch.begin(); 

...(drawing of the matrix)... 

if(Gdx.input.isTouched()){ 
       Vector3 touchPos = new Vector3(); 
       touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0); 
       camera.unproject(touchPos); 
       System.out.println(touchPos.x+ " "+touchPos.y); 
        checkTexture(); 
       } 
batch.end(); 
} 

checkTexture() 메소드에는 80 가지 이상의 종류가 있기 때문에 여기서 한 가지 예제 만 제공합니다. (도면의 I는 당신에게 내가하는 일의 9 예 중 하나만주지 방법을 렌더링

 public Texture checkTexture() { 
       int number=0;int x=0,y=0; 
       Vector3 touchPos = new Vector3(); 
       touchPos.set(Gdx.input.getX(), Gdx.input.getY(), 0); 
       camera.unproject(touchPos); 
       int lastX=0,lastY=0; 
       if((touchPos.x>=125 && touchPos.x<=164) && (touchPos.y>=400 && touchPos.y<=440)){ 
       number=matrix[0][0];x=125;y=400;lastX=currentX;lastY=currentY;squares[lastX][lastY]=false;currentX=0;currentY=0;squares[currentX][currentY]=true; 
       } 
      return associateImage(number,x,y); 
} 

Here are the selected textures 
public Texture associateImage(int n,int x,int y) { 
     Texture t=null; 
     switch(n) { 
     case 1: t=numberOneSEL;break; 
     case 2: t= numberTwoSEL;break; 
     case 3: t= numberThreeSEL;break; 
     case 4: t= numberFourSEL;break; 
     case 5: t= numberFiveSEL;break; 
     case 6: t= numberSixSEL;break; 
     case 7: t= numberSevenSEL;break; 
     case 8: t= numberEightSEL;break; 
     case 9: t= numberNineSEL;break; 
     case 10: t= emptySquareSEL;break; 
     } 
     batch.draw(t, x, y); 
     return t; 
    } 

그리고 다음에 ...; X 및 Y 변수는 associateImage()에 batch.draw에 사용되는 80은 선택되지 않음)

@Override 
public void render() { 

...batch.begin()... 

for(x=0;x<matrix.length;x++){ 
      for(y=0;y<matrix.length;y++){ 
       switch(matrix[x][y]){ 
       case 1: 
        if(squareCounter==9) {squareCounter=0;startingX=125;startingY-=40;numberOneR.x=startingX;numberOneR.y=startingY; } 
        numberOneR.setX(startingX);numberOneR.setY(startingY); 
        if(squares[x][y]==false) 
        batch.draw(numberOne, numberOneR.x, numberOneR.y); 
        squareCounter++; 
        startingX+=40; 
        numberOneR.x=startingX; 
       break; 
... 
} 

답변

0

음 ... 나는 당신이 읽고있는 생각이 마음에 들지 않습니다. 나는 당신이 "한번"그것을 만질 때마다 사각형 상태를 여러 번 뒤집을 수 있다고 생각합니다. 그래서 그것은 당신이 버튼 (손가락)을 놓을 때 어떤 상태가 유지 될 것인지 도박입니다.

제 조언은 touch/click이 발생할 때만 onTouchDown 또는 onTouchUp 또는 유사한 클릭 이벤트 리스너를 사용하여 코드를 실행하는 것입니다. 손가락이 화면을 터치하는 동안 터치 감지 코드가 실행됩니다.

+0

onTouchDown 또는 onTouchUp을 사용하려면 무엇을 가져와야합니까? – pMpC

0

GestureListener 및/또는 InputProcessor 인터페이스를 구현하고 필요한 방법을 만드십시오. 당신이 1 Rectangle/셀, 1이 아닌 번호와 배경 색상 당을 사용해야 내 생각에

import com.badlogic.gdx.InputProcessor; 
import com.badlogic.gdx.input.GestureDetector.GestureListener; 
0

: 귀하의 IDE가 자동으로 어쨌든 필요한 해당 클래스가 포함 된 파일 만 가져올 수 있습니다.
9 * 9 = 81 Rectangle이 있어야합니다. 여기서 Rectangle은 모두 스도쿠 필드의 1 셀을 나타냅니다.
을 사용하여 Rectangle을 만졌는지 확인할 수 있습니다.
Rectangle을 선택하면 을 저장할 수 있으며 Rectangle의 색인 또는 Rectangle을 선택하지 않은 경우 -1을 저장할 수 있습니다.
왼쪽 하단 Rectangle은 인덱스 0, 오른쪽 아래에는 인덱스 8, 오른쪽 상단에는 인덱스 80이 있습니다.
전체 스도쿠 필드는 0부터 시작하는 숫자를 포함하는 2D int 배열에 저장 될 수 있습니다. 9, 여기서 0은 빈 필드입니다.당신은 단순히 2 차원 배열을주기는 selRect을 확인하고 오른쪽 Texture

나는 내가 충분히 분명 희망을 렌더링 할 수있는 렌더링에서
.

관련 문제