2011-12-14 6 views
0

나는 풍선을 (위아래로, 무한대로) 만들고 그 중 하나를 클릭하면 방향이 바뀔 것입니다. Animation을 사용하려했지만 현재 시간의 현재 위치에서 뷰를 클릭하는 것을 지원하지 않습니다. 나는 적어도를 들어, 두 가지 방법이 있다는 것을 알고 :클릭하면 안드로이드 버튼 애니메이션

  • 사용 OpenGL은
  • 과 캔버스를 사용합니다.

나는 간단한 애니메이션을 종료하기 위해 OpenGL을 사용하고 싶지 않습니다. 캔버스를 사용하는 방법을 이해하지 못합니다 (this, Google 문서 및 일부 Google 검색 링크 참조). 코드가 필요하지 않습니다. 코드 작성 방법과 알고리즘이 필요합니다. 활동 (활동을 확장) -
:

+0

난 돈 ' 안드로이드 게임 튜토리얼에 대한 전체 설명을 구글에 올리려면 시간이 필요합니다. 풍선 객체에 업데이트 명령을 실행 한 다음 캔버스에 그리기 명령을 호출하는 스레드를 만들어야합니다. 많은 튜토리얼이 있습니다. 사용 가능하며 도움을 받아야합니다. 나중에 코드를 게시 할 수 있습니다. 나중에 내게 필요한 많은 작업을 사용하는 프로젝트에서. – Grambot

+0

확인. 몇 가지 코드에 대해 고맙게 생각합니다. – jumper0k

답변

1

좋아,이

당신은 4 개 주요 측면을 만들 필요가 ... 내가 정확히 당신이 필요로 일하는 것이 내 프로젝트 중 하나에 설정 한 것입니다
- 스레드
(스레드 확장) - - 서피스 뷰 SurfaceViw는
(서피스 뷰 SurfaceView가의 SurfaceHolder.Callback 구현 확장) (그리기 연장) 상호 작용하는 개체

활동의 시작 및 스레드를 생성하는 서피스 뷰 SurfaceView를 생성한다. 보기 또는 스레드에는 그리기/상호 작용하는 개체가 포함될 수 있습니다.이 시점에서 데이터를 저장하는 방법은 사용자가 결정하지만, 클래스 간 커플 링이 가장 적은 디자인을 생각해 내면 가장 쉽습니다. 이 클래스에서

/** 
* Processing loop 
*/ 
public void run() { 
    while (isRunning) { 
     try { 
       sleep(25); 
      } catch (InterruptedException e) { 
       Log.e("Thread","Thread Interruption"); 
       e.printStackTrace(); 
      } 
     update(); 
    } 
    Log.d("Thread", "Game Loop Stopped"); 
} 

/** 
* Main processing of the game loop. 
*/ 
private void update() { 
    handleInput(); 
    updatePhysics(); 
    updateUI(); 
    updateState(); 
    updateAI(); 
    updateAnimations(); 
    updateSound(); 
    updateVideo(); 
} 

당신이 행동의 무리 스레드의 각 반복을 수행하는 update() 방법을 참조하십시오

일단 중지 될 때까지 스레드는 지속적으로 (false로 isRunning 설정) 실행 시작했다.

대부분 관심있는 방법은 handleInput, updateUI 및 입니다.

handleInput에서는 정보 처리에 필요한 데이터를 얻기 위해 SurfaceView에 대한 콜백을 수행합니다. 내 handleInput은 SurfaceView 클래스의 onTouchEvent에서 MotionEvent (SurfaceHolder.OnCallBack 인터페이스를 사용할 때 구현 됨)을 그냥 잡았다는 점에서 상당히 간단합니다.

updateUI 방법은 우리가 각 하나에 캔버스 객체를 통과하는 draw 메서드를 호출하는 것을 볼 수는 각 개체와 Canvas을 그립니다 재, 또는 서피스 뷰 SurfaceView의 update 여기

public void update(List<Actor> actors) { 
     Canvas canvas = null;  
     try { 
      canvas = surface.lockCanvas(); 
      synchronized (surface) { 
       //Blank the Canvas 

       for (int i = 0; i < actors.size(); i++) { 
        actors.get(i).draw(canvas); 
       } 
      } 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } finally { 
      if (canvas != null) { 
       surface.unlockCanvasAndPost(canvas); 
      } 
     } 
    } 

풍선 호출하여 상호 작용 가능한 객체. 위의 코드에서 광산 "액터"를 호출했습니다. draw을 구현하는 방법은 당신에게 달려 있지만, 많은 canvas.drawBitmap() 기능을 사용하는 것처럼 들립니다.

스레드의 updatePhysics 메서드로 돌아가서 개체를 화면에 그리기 전후에 개체를 업데이트하는 데 사용하려고합니다.당신은 풍선을 치기로 결정한 후 화면에서 X 및/또는 Y 위치를 변경하거나 이동 방향을 변경하고 싶을 것입니다. handleInput.


그것의 아주 열심히는 StackOverflow의 응답에 잘 설명합니다. 정말로 원한다면 이번 주말에 더 많은 정보를 제공하고 외부에서 게시 할 수 있습니다. (그림 예제, 구조 및 데이터 흐름과 같은 다른 정보 중에서 UML 클래스 다이어그램을 제공 할 수 있습니다.)

알려 주시기 바랍니다. 만약 당신이 더 많은 도움이 될 수 있습니다!이 모든 작품이 아니라는 점을 유의하십시오. 나는 기본적인 안드로이드 게임 구조에 대한 온라인 자습서를 많이 사용했지만 참조를 제공 할 수있는 링크가 지금은 없습니다.