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