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

기존 객체는 그대로 두고 같은 객체 생성 하려고 합니다 도와주십쇼ㅠㅜ

0 추천
질문이 맞는건지 모르겠습니다~
블럭격파 게임인데요~
패들에서 공이 발사되어 블럭에 맞으면 그자리에 공이 정지하게 하였습니다~
그렇게 블럭과 충돌을 할 때마다 공들은 블럭과 충돌한 자리에 정지하고 패들에는 새로운 공이
다시 하나씩  생기게 하고 싶은데요~
공을 정지시킨 후에 아래와 같이 새로운 공을 생성하게 나름대로 해봤더니...
블럭에 붙어있던 공이 패들에 와서 붙어버리네요...ㅠㅜ
블럭과 충돌한 공은 충돌한 자리에 정지하고 새로운 공이 패들에 생성되게 하려면 어떻게 해야 할까요??ㅠㅜ
조언 부탁드립니다~~
 
<일부 소스>

 //-------------------------------------
 //  GameThread Class
 //-------------------------------------
 class GameThread extends Thread {
  ----- 중략 ------  
  Ball   mBall;  // 볼
  Paddle mPaddle;  // 패들       
    
    
  //-------------------------------------
  //  게임 초기화
  //-------------------------------------
  public void InitGame() {
   B_width = width / 6;     // 블록의 폭
   B_height = B_width / 2;     // 블록의 폭
   M_left = (width - B_width * 5) / 2;  // 왼쪽 여백
   M_top = B_width * 4 / 5;    // 상단 여백
   mPaddle = new Paddle(mContext, width / 2, height - B_height, width);
   mBall = new Ball(mContext, width / 2, mPaddle.y - 17, width, height);
   
   paint.setAntiAlias(true);
   paint.setColor(Color.WHITE);
   paint.setTextSize(15);
   
  }
---------- 중략 ----------  
 
  //-------------------------------------
  //  충돌 판정 - run()에서 호출
  //-------------------------------------
  public void CheckCollision() {
   if (mBlock.size() == 0) {   // 이 판을 클리어 했으면
    stgNum++;      // 다음 스테이지로
    if (stgNum >= STAGE_COUNTER) // 스테이지 끝은 처음 스테이지
     stgNum = 0;
    MakeStage();     // 새로운 스테이지 만들기
    return;
   }
   // 패들과 충돌
   if (Math.abs(mBall.x - mPaddle.x) <= mPaddle.pw
     && mBall.y >= (mPaddle.y - 17) && mBall.y < mPaddle.y) {
    mBall.sx = sx[rnd.nextInt(4)];  // 난수로 각도 지정
    mBall.sy = -Math.abs(mBall.sy);  // 무조건 반사
   }
   
   // 블록과 충돌
   for (Block tmp : mBlock) {
    // 충돌 없음
    if (mBall.x + mBall.bw < tmp.x1 || mBall.x - mBall.bw > tmp.x2  
      || mBall.y + mBall.bw < tmp.y1 || mBall.y - mBall.bw > tmp.y2) {
     continue;
    } 
    // 양쪽 벽과의 충돌인지 판정
    if (tmp.x1 - mBall.x >= mBall.bw || mBall.x - tmp.x2 >= mBall.bw) {
     mBall.sx = -mBall.sx;
     
    }
    else            // 상하 충돌
     mBall.sx = 0;
     mBall.sy = 0;
     mBall = new Ball(mContext, mPaddle.x, mPaddle.y - 17, width, height);


    break;
   }
  }
 ------- 이하 생략 --------
 
빨간 부분이 잘못된 듯 싶은데요....
어떻게 해야 할까요??
조언 부탁드립니다~~^^;;

 

브릿지 (180 포인트) 님이 2013년 4월 13일 질문

2개의 답변

0 추천
그리는 부분의 소스를 못 봐서 알 순 없지만 상하충돌시에 볼 객체를 저장하고 새로 만들어야 되지 않을까요?

상하충돌된 볼들을 저장해두고 그려주지 않는다면 당연히 새로 생성된 볼만 보이지 않을까요?
익명사용자 님이 2013년 4월 13일 답변
볼객체를 저장하려면~어떻게해야하는건가요??제가초보라...알려주심 정말 감사하겠습니다~부탁드려요~~~
0 추천
볼객체를 어레이리스트나 배열로 관리하여

 

새로운 볼 객체를 계속 해서 새로 생성해주거나

 

충돌한 위치에 볼의 기능이 없이 이미지만 위치시키고 싶으신거면

 

새로운 이미지 객체를 생성해서 그 위치에 계속해서 그려주면 되지 않나요 ?
메루몽 (170 포인트) 님이 2013년 4월 13일 답변
현재 처음 생성된 볼 객체에 다시 새로 덮어 씌워지고 있기 때문에

볼 자체는 하나가 됩니다.

볼이 두개가 되는게 아니라 하나가 되기 때문에

볼이 새로 생성되는것 처럼 보이는게아니라

원래 있던 공이 지워지고 새로 그 위에 덮어 씌워져서 다시 제자리로

돌아오는 것 같습니다.
답변 감사드립니다^^
그럼~ 상하충돌 부분에 canvas.drawBitmap~ 사용해서 그려주면 될까요??
그럼~ 충돌한 부분의 좌표를 알아야 하는것 아닌가요??
그건 어떻게 구해야 하는지요??
...