2012-02-18 6 views
1

私はゲームについてのプログラムを作っています。実際に目に見えないビーズを表示するビードを置くためのコードを書くようにしています。しかし、それを前後に行った1時間後、私はちょうど私のmotioneventのY座標がいつも必要なところから2行下がっているように思うのです。ViewでmotionEvent .getRawY()を使用できますか? getTop()?

私の配列

for(int y=0; y< 9;y++) 
    { 
     for(int x=0;x<9;x++) 
     { 
     String name="Whitebead" + ((9*y)+x+2); //The +2 is because of a naming problem 
     WhitePieces[x][y]=(ImageView) findViewById(getResources().getIdentifier(name, "id", getPackageName())); 
     } 

    } 

モーションイベント

@Override 
public boolean onTouchEvent(MotionEvent e) 
{ 

     if(e.getAction() == MotionEvent.ACTION_DOWN) 
     { 
      float X=e.getRawX(); 
      float Y=e.getRawY(); 

      if(X>Board.getLeft() && X<Board.getRight()) 
       if(Y< Board.getTop() && Y>Board.getBottom()); 
        player1.placepiece(X, Y); 

     } 
     return super.onTouchEvent(e); 
} 

そして最後に座標何

public void placepiece(float X, float Y) 
{ 
    int[] pieceindex=resolvePiece(X,Y); 

    pieces[pieceindex[0]][pieceindex[1]].setVisibility(ImageView.VISIBLE); 

} 


private int[] resolvePiece(float x, float y) { 

    int Xindex=0; 
    int[] oldcoords= new int[2]; //cordinates are like so {xCoord, Ycoord} 
    int[] newcoords= new int[2]; 
    oldcoords[0]=pieces[0][0].getLeft(); //set the oldcoordinates to the first index 
    oldcoords[1]=pieces[0][0].getTop(); 
    for(int i=1; i<9;i++) //go through the 9 indexs to find the closest X value 
    { 
     newcoords[0]=pieces[i][0].getLeft(); 
     newcoords[1]=pieces[i][0].getTop(); 
     if(Math.abs((int)x-newcoords[0])<Math.abs((int)x-oldcoords[0])) 
     { 
      Xindex=i; 
      oldcoords[0]=newcoords[0]; 
     } 
    } 

    int Yindex=0; 
    oldcoords[0]=pieces[0][0].getLeft(); //Reset oldcoords again 
    oldcoords[1]=pieces[0][0].getTop(); 
    for(int n=1; n<9;n++) //Go through the 9 indexes for the closest Y value 
    { 
     newcoords[0]=pieces[0][n].getLeft(); 
     newcoords[1]=pieces[0][n].getTop(); 
     if(Math.abs((int)y-newcoords[1])<Math.abs((int)y-oldcoords[1])) 
     { 
      Yindex=n; 
      oldcoords[1]=newcoords[1]; 
     } 

    } 

    int[] rInt= new int[]{Xindex,Yindex}; 
    return rInt; 
} 

//にビーズを解決する私のコードを処理するための私のコードを充填するための私のコード//// EDIT:固定 私はそれを考え出しました。アンドロイドウィンドウの上部にあります画面の全体に表示されるモーション座標を取得すると、.getTop()は線形レイアウトの開始位置からのみ取得されます。代わりに.getTopまたは.getLeftを使用する代わりに、私は.getLocationInWindow(oldcoord [])を使用し、私は私のoldcoord配列に必要な情報を配置します。

答えて

1

//////私がそれを理解したのは、アンドロイドウィンドウの上部にあり、タイトルとバッテリーの寿命やものが移動する場所の約1インチです。動きの座標を取得すると、 .getTop()は、線形レイアウトの開始位置からのみ取得します。代わりに.getTopまたは.getLeftを使用する代わりに、私は.getLocationInWindow(oldcoord [])を使用し、私は私のoldcoord配列に必要な情報を配置します。

+0

getLocationOnScreen()も便利なメソッドです。 – tos

関連する問題