이 코드로 비트맵 블록 내려오는부분을 만드는데 필요없는것좀 알려주시면 ㅠㅠ
스코어 점수 올라가는 거랑 이런거 필요없고
이 Activity를
<com.test.android.GameActivity
android:id="@+id/gameview"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" />
xml이런식으로 띄울려고 하는데
이코드로 블록 내려오는 부분만 간추려 주실수 있나요 ㅠㅠ 계속 오류가 떠서 이렇게 올려봅니다 ㅠㅠ
(다른거 필요없이 그냥 블록만 내려오기만 하면 됩니다.)
public class GameView extends SurfaceView implements Callback{
/**
* @uml.property name="thread"
* @uml.associationEnd
*/
public MyThread thread; //스레드
private Bitmap[] myimg; //블록이미지
private Bitmap bimg; //배경이미지
private Intent score; //화면점수
private int check; //음악정지 체크
private boolean next; //화면이동체크
private Random imgr; //이미지랜덤
private int code; //이미지코드값
/**
*/
private Random r; //블럭랜덤
/**
*/
private int block; ////블럭위치지정값
public static int[] blockX;//X위치배열
public static int[] blockY;//Y위치배열
private int[] blockZ; //블럭 색상
public static int ic; //블럭 증가값
/**
*/
private Rect selRect; //선택렉트의 위치값 돌려받기
public GameView(Context context, AttributeSet attrs){
super(context, attrs);
SurfaceHolder holder = getHolder();
holder.addCallback(this);
//cotext넘겨받은 surfaceview의 context가져와서 intent생성
score = new Intent(this.getContext(), Score.class);
Resources res = context.getResources();
imgr = new Random();
code = Math.abs(imgr.nextInt()%2);
switch(code){
case 0 : bimg = BitmapFactory.decodeResource(res, R.drawable.play1);break;
case 1 : bimg = BitmapFactory.decodeResource(res, R.drawable.play2);break;
}
myimg = new Bitmap[4];
myimg[0] = BitmapFactory.decodeResource(res, R.drawable.rim);
myimg[1] = BitmapFactory.decodeResource(res, R.drawable.yim);
myimg[2] = BitmapFactory.decodeResource(res, R.drawable.bim);
myimg[3] = BitmapFactory.decodeResource(res, R.drawable.pim);
thread = new MyThread(holder, this);
ic=0;
selRect = new Rect();
blockX = new int[3000];//X위치배열
blockY = new int[3000];//Y위치배열
blockZ = new int[3000];
next=false;
setFocusable(true);
}
/**
*/
private float width;
/**
*/
private float height;
/**
*/
private int th;
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
width = w/4f;
height = h/15f;
th = this.getHeight();
}
public void onDraw(Canvas c){
++ic;//블럭갯수증가
//배경화면
Paint p1 = new Paint();
c.drawBitmap(bimg,0, 0, p1);
//블럭위치,블록색상배열
r = new Random();
//블럭갯수가 짝수일때만 block 출력
if(ic%2==0){
block = Math.abs(r.nextInt()%4);
}else{block = 4;}
//블록x위치는 0,1,2중 하나의 위치
if(ic<16){
blockX[ic] = 4;
}else if(ic>16){
blockX[ic]=block;
}
//y좌표 위치
blockY[ic] = 0;
if(Game.mp.isPlaying()==false){
check++;
blockX[ic]=4;
}
//선그리기
Paint p2 = new Paint();
p2.setColor(Color.WHITE);
p2.setStrokeWidth(1);
for(int i=1;i<4;i++){
c.drawLine(i*width, 0, i*width, th, p2);
}
//블록paint
Paint p3 = new Paint();
p3.setStyle(Paint.Style.FILL_AND_STROKE);
p3.setStrokeJoin(Join.ROUND);
if(ic>16){
//화면그리기
for(int i=0;i<blockX.length;i++){
getRect(blockX[i],blockY[i], selRect);//블록위치지정
switch(block){
case 0 : blockZ[ic] = 0;break;
case 1 : blockZ[ic] = 1;break;
case 2 : blockZ[ic] = 2;break;
case 3 : blockZ[ic] = 3;break;
}
c.drawBitmap(myimg[blockZ[i]], null, selRect, p3);//블록그리기
//blockz가 1이면 두번째 이미지,null,렉트생성(위치지정),페인트
}
}
}
public void getRect(int x, int y, Rect selrect){
selrect.set((int)(x*width),(int)(y*height),(int)(x*width+width),(int)(y*height+height) );
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
public void surfaceCreated(SurfaceHolder holder) {
thread.start();
}
public void surfaceDestroyed(SurfaceHolder holder) {
if(next==false){
android.os.Process.killProcess(android.os.Process.myPid());
}
}
public class MyThread extends Thread{
private SurfaceHolder mholder;
private GameView mv; //GameView plyer음악재생하는부분 불러오기
public MyThread(SurfaceHolder surfaceHolder, GameView m){
mholder = surfaceHolder;
mv = m;
}
private boolean retry;
private void score_view(){
mv.getContext().startActivity(score);
}
public void run() {
check=0;
retry=true;
while(retry){
Canvas c = null;
try{
c = mholder.lockCanvas();
synchronized(mholder){
if(check>16){
next=true;
retry=false;
score_view();
}
mv.onDraw(c);
if(ic<16){
sleep(200); // 게임 시작 전 지연시간
}
else if(ic>16){
switch(MyGame.delay){
case 1: sleep(90); break; //Easy 게임 속도
case 2: sleep(60); break; //Medium 게임 속도
case 3: sleep(30); break; //Hard 게임 속도
}
}
}
}catch(InterruptedException e){
e.printStackTrace();
}finally{
if(c!=null){
mholder.unlockCanvasAndPost(c);
}
}
for(int i=0;i<blockY.length;i++){
blockY[i] = blockY[i]+1; //모든 게임 블럭 한칸 이동
}
}
}
}
}