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

이 코드로 비트맵 블록 내려오는부분을 만드는데 필요없는것좀 알려주시면 ㅠㅠ

–1 추천
이 코드로 비트맵 블록 내려오는부분을 만드는데 필요없는것좀 알려주시면 ㅠㅠ

스코어 점수 올라가는 거랑 이런거 필요없고 

이 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; //모든 게임 블럭 한칸 이동
   }
   
  }
   
 }  

}
 
}

 

익명사용자 님이 2014년 6월 22일 질문

1개의 답변

0 추천
익명은 글 등록 안되게 했으면 좋겠습니다.
쭈쭈총각 (17,750 포인트) 님이 2014년 6월 23일 답변
...