게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[ㅂㅅㄱ] 안드로이드 게임 예재 뷰 갱신 질문입니다.!
게시물ID : programmer_6961짧은주소 복사하기
작성자 : 쵸코훼이크
추천 : 0
조회수 : 637회
댓글수 : 3개
등록시간 : 2014/12/06 23:53:23
옵션
  • 본인삭제금지
책보고 카드 뒤집기 따라 하고 있는데요 ..
기본 예재 다 하고 추가 기능 넣어보고 있는데

처음에 카드 다 뒤집혀 있다가 한번 터치하면

5초간 앞면 보여주고 다시 다 뒤집어 놓으려고 하는데

5초동안 앞면 보여주고 다시 뒷면 보여주는게 안되네요..

코드는 간추려서 ...
-------------------------------------------
!! 뷰클래스 생성자: 
public CardGameView(Context context) {
super(context);

m_BackGroundImage = BitmapFactory.decodeResource(getResources(),
R.drawable.background);
m_Card_Backside = BitmapFactory.decodeResource(getResources(),
R.drawable.backside);

// 카드 정보 얻기
m_Card_Red = BitmapFactory.decodeResource(getResources(),
R.drawable.front_red);
m_Card_Blue = BitmapFactory.decodeResource(getResources(),
R.drawable.front_blue);
m_Card_Green = BitmapFactory.decodeResource(getResources(),
R.drawable.front_green);

// 화면에 표시할 카드만큼 할당 받음(2x3)
m_Shuffle = new Card[2][3];

// 카드 섞기
SetCardShuffle();

// 짝맞추기 검사 스레드 실행
CardGameThread thread = new CardGameThread(this);
thread.start();

}
!! onDraw :
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 배경 이미지
canvas.drawBitmap(m_BackGroundImage, 0, 0, null);

// 카드 그려주기
for (int x = 0; x < 2; x++) {
for (int y = 0; y < 3; y++) {
// 카드의 앞면을 그려야 하는 경우
if (m_Shuffle[x][y].m_state == Card.CARD_SHOW
|| m_Shuffle[x][y].m_state == Card.CARD_PLAYEROPEN
|| m_Shuffle[x][y].m_state == Card.CARD_MATCHED) {

// 색상 값에 따른 이미지 그려주기

if (m_Shuffle[x][y].m_Color == Card.IMG_RED) {
canvas.drawBitmap(m_Card_Red, 35 + y * 225,
335 + x * 350, null);
} else if (m_Shuffle[x][y].m_Color == Card.IMG_BLUE) {
canvas.drawBitmap(m_Card_Blue, 35 + y * 225,
335 + x * 350, null);
} else {
canvas.drawBitmap(m_Card_Green, 35 + y * 225,
335 + x * 350, null);
}
} else {
// 카드 뒷면을 그려야 하는 경우
canvas.drawBitmap(m_Card_Backside, 35 + y * 225,
335 + x * 350, null);
}

}
} // for()

} // end of onDraw

// 터치 이벤트
@Override
public boolean onTouchEvent(MotionEvent event) {
// 게임 준비중
if (m_state == STATE_READY) {

startGame();  

// 이부분에서 카드 상태를 Show로 하고 invalidate() 부르고 5초 sleep 했는데.. 그럼 onDraw에서 앞면으로 다시 셋팅하고 

// 5초 있다가 Close 상태로 셋팅하고 다시 invalidate() 불러서 뒷면으로 표시하면 될 것 같았는데 앞면이 안나오네요.

// 구조상의 문제인가요? 코드에 문제가 있나요 ... 


}

// 게임중
else if (m_state == STATE_GAME) {

// 카드 뒤집기 처리

// 비교하려고 두 개의 카드를 이미 뒤집은 경우
if (m_SelectCard_1 != null && m_SelectCard_2 != null) {
return true;
}

int px = (int) event.getX();
int py = (int) event.getY();

for (int x = 0; x < 2; x++) {
for (int y = 0; y < 3; y++) {
// 각 카드들의 박스 값을 생성
Rect box_card = new Rect(35 + y * 225, 335 + x * 350,
35 + y * 225 + 180, 335 + x * 350 + 258);
if (box_card.contains(px, py)) {
// (x, y)에 위치한 카드가 선택 되었습니다.

// 맞춘카드는 패스
if (m_Shuffle[x][y].m_state != Card.CARD_MATCHED) {
if (m_SelectCard_1 == null) {
m_SelectCard_1 = m_Shuffle[x][y];
m_SelectCard_1.m_state = Card.CARD_PLAYEROPEN;
} else {
// 이미 첫번쨰 카드가 뒤집혀 있으니 두번째로..
// 중복 뒤집기 방지
if (m_SelectCard_1 != m_Shuffle[x][y]) {
m_SelectCard_2 = m_Shuffle[x][y];
m_SelectCard_2.m_state = Card.CARD_PLAYEROPEN;
}
}

}

}

}// for
}// for
} // elseif
// 게임 종료
else if (m_state == STATE_END) {
// 게임 준비상태로 변경
m_state = STATE_READY;
}

invalidate();

return true;
}

// !!!!! Method들

public void startGame() {
// 잠시 보요주고
m_Shuffle[0][0].m_state = Card.CARD_SHOW;
m_Shuffle[0][1].m_state = Card.CARD_SHOW;
m_Shuffle[0][2].m_state = Card.CARD_SHOW;
m_Shuffle[1][0].m_state = Card.CARD_SHOW;
m_Shuffle[1][1].m_state = Card.CARD_SHOW;
m_Shuffle[1][2].m_state = Card.CARD_SHOW;

invalidate();

try {
Thread.sleep(5000);
Log.d("MyLog", "stats: " + m_Shuffle[0][0].m_state);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 가리기
m_Shuffle[0][0].m_state = Card.CARD_CLOSE;
m_Shuffle[0][1].m_state = Card.CARD_CLOSE;
m_Shuffle[0][2].m_state = Card.CARD_CLOSE;
m_Shuffle[1][0].m_state = Card.CARD_CLOSE;
m_Shuffle[1][1].m_state = Card.CARD_CLOSE;
m_Shuffle[1][2].m_state = Card.CARD_CLOSE;
Log.d("MyLog", "stats: " + m_Shuffle[0][0].m_state);

m_state = STATE_GAME;

invalidate();

}
---------------------------------
startGame() 부분에서 뭔가 구현하고 싶은데 뭐가 문제일까요...
계속 보고 있는데 뭐가 잘못된건지 모르겠네요
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호