请下载以下代码:
http://media.pragprog.com/titles/eband3/code/Sudokuv2/src/org/example/sudoku/PuzzleView.java
在代码中,
取什么初始值selX
以及selY
如何取值?我问这个是因为有一个getRect(selX, selY, selRect)
使用这两个变量的函数调用()。那么,在这个函数调用期间,基本上传递了selX
和的哪些值?selY
请下载以下代码:
http://media.pragprog.com/titles/eband3/code/Sudokuv2/src/org/example/sudoku/PuzzleView.java
在代码中,
取什么初始值selX
以及selY
如何取值?我问这个是因为有一个getRect(selX, selY, selRect)
使用这两个变量的函数调用()。那么,在这个函数调用期间,基本上传递了selX
和的哪些值?selY
它们的初始值将是0,因为它没有在任何地方(至少在这个文件中)设置为其他任何值。据我从您提供的代码中可以看出,只有一个地方selX
并且selY
已设置。
private void select(int x, int y) {
invalidate(selRect);
selX = Math.min(Math.max(x, 0), 8); <------ Here
selY = Math.min(Math.max(y, 0), 8); <------
getRect(selX, selY, selRect);
invalidate(selRect);
}
selX
并且selY
仅在select(int x, int y)
调用该方法时设置,因此我无法真正为您提供它们的价值。这意味着传入的值是..getRect(selX, selY, selRect)
最后select
设置的值。
如果不知道在哪里调用此方法以及将哪些值传递给它,很难回答您的问题。但是我确实注意到在这些方法中调用了 select 方法
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() != MotionEvent.ACTION_DOWN)
return super.onTouchEvent(event);
select((int) (event.getX() / width),
(int) (event.getY() / height));
game.showKeypadOrError(selX, selY);
Log.d(TAG, "onTouchEvent: x " + selX + ", y " + selY);
return true;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.d(TAG, "onKeyDown: keycode=" + keyCode + ", event="
+ event);
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
select(selX, selY - 1);
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
select(selX, selY + 1);
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
select(selX - 1, selY);
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
select(selX + 1, selY);
break;
...
所以看起来它们是在用户触摸屏幕或使用箭头键时设置的。
你可以在这里放一个断点并自己检查一下