0
回答
使用surfaceview做数独游戏
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

如何使用android  surfaceview做数独游戏,本人做好了界面但是想实现点击小单元格可以在里面输入1—9九个数字,但是在ontouchevent事件中总是出问题,导致界面混乱


 @Override
 public boolean onTouchEvent(MotionEvent event) {
  if(event.getAction() != MotionEvent.ACTION_DOWN){
   return super.onTouchEvent(event);
  }
  clicked = true;
  //用户点击的屏幕的坐标点
  selectedX = (int)(event.getX() / width);
  selectedY = (int)(event.getY() / height);
  System.out.println(selectedX);
  System.out.println(selectedY);
  //超出棋盘的点击 无效  直接返回
  if(!game.isVaildClick(selectedX, selectedY)){
   return super.onTouchEvent(event);
  }
  

  //不超出棋盘 点击初始化已经存在的数字 直接返回
    if(!game.getTileString(selectedX, selectedY).equals("")){
     Canvas canvas = surfaceHolder.lockCanvas();

            Paint paint = new Paint();
             
         //     paint.setStyle(Style.STROKE);//空心矩形框
              paint.setColor(getResources().getColor(R.color.red));
           canvas.drawRect(selectedX*width, selectedY*height, selectedX*width+width, selectedY*height+height, paint);  //选中相应的小单元格  

         surfaceHolder.unlockCanvasAndPost(canvas);
     return super.onTouchEvent(event);
     
    }
 


  
 // game.setNewTileString(selectedX, selectedY, game.getSelectCurNumber());
  //显示选中方格的相对坐标
     //Toast.makeText(getContext(), "("+selectedX+","+selectedY+")", Toast.LENGTH_SHORT).show();
  
 // draw();调用九宫格绘制界面
 
   
  
  number++;
  if(game.isWin()){
   showWinDialog();
   //Toast.makeText(getContext(), "恭喜你完成了!!", Toast.LENGTH_LONG).show();
  }
  return true;
 }











public void draw() {
  synchronized(surfaceHolder){
   // 获取Canvas对象
   // 锁定画布,一般在锁定后就可以通过其返回的画布对象Canvas,在其上面画图等操作了。
   Canvas canvas = null;
   Paint paint = new Paint();
   try{
    canvas = surfaceHolder.lockCanvas(); // 锁住Canvas
    
    // 清理屏幕 绘制背景
    initGameView(canvas, paint);
    //重绘surfaceview 填充新增的数据
    inflateNewNum(canvas,paint);
   }
 
   
   
   catch(Exception e){
    e.printStackTrace();
   }finally{
    if(canvas != null)
    // 结束锁定画图,并提交改变。
     
     
     
    surfaceHolder.unlockCanvasAndPost(canvas);  // 解锁Canvas,更新
   }
  } 
 }

可能是加粗部分导致线程混乱,但不知怎么修改

举报
qwem
发帖于3年前 0回/104阅
顶部