所以,我有一个自定义的boardview类extends view。我实现了绘图板,线和绘制“O”时,用户按下单元格可绘制。
但是,我不能正确地实现以下问题:
1。当用户进行按压(多点触摸)时,缩放板视图。
2。如果boardview大于boardview的初始宽度或高度,请将boardview滚动到左、右、上、下。
三。当用户在缩放或滚动后按单元格时,找到正确的单元格坐标。
这是我的第一个游戏项目,如果有人知道如何解决这个问题,请帮助我。
我试过了,但没有正常工作。boardview width等于屏幕宽度,boardview height等于boardview width。这是正方形的板景。
我悬赏200英镑来解决这个问题。
这是我的项目,每个人都可以下载和编辑:https://drive.google.com/file/d/0BxNIUTd_m1x8cUQ2NGpSMDBuVVE/view?usp=sharing
GITHUB:https://github.com/boyfox/GameTicTacToe
boardview代码:http://pastie.org/10109253或http://pastebin.com/TRU8Ybds
我找到了自己的解决方案,但需要改进代码,你可以用你的解决方案来回答我的问题!
最佳答案
你能把代码移到github吗?下载、编辑和建议更改会容易得多。
如果你正在寻找一个通用的实现两个手指缩放/旋转,看看我的游戏(https://github.com/ZieIony/Gravity)。最有趣的部分是gamepanel视图和dispatchtouchEvent方法:
private PointF prevPos = new PointF(), prevPos2 = new PointF();
float scale = 1;
final float MIN_SCALE = 0.2f, MAX_SCALE = 2.0f;
float rotation = 0;
Matrix matrix = new Matrix();
private float prevDist;
public boolean dispatchTouchEvent(android.view.MotionEvent event) {
if (event.getPointerCount() == 2) {
float d = dist(event.getX(0), event.getY(0), event.getX(1),
event.getY(1));
float pivotX = (event.getX(0) + event.getX(1)) / 2;
float pivotY = (event.getY(0) + event.getY(1)) / 2;
float prevPivotX = (prevPos.x + prevPos2.x) / 2;
float prevPivotY = (prevPos.y + prevPos2.y) / 2;
if (event.getAction() == MotionEvent.ACTION_MOVE) {
float newScale = scale * d / prevDist;
newScale = Math.max(MIN_SCALE,
Math.min(newScale, MAX_SCALE));
float scaleFactor = newScale / scale;
scale = newScale;
matrix.postScale(scaleFactor, scaleFactor, pivotX, pivotY);
float prevAngle = (float) Math.atan2(
prevPos.x - prevPos2.x, prevPos.y - prevPos2.y);
float angle = (float) Math.atan2(
event.getX(0) - event.getX(1), event.getY(0)
- event.getY(1));
rotation += prevAngle - angle;
matrix.postRotate(
(float) ((prevAngle - angle) * 180.0f / Math.PI),
pivotX, pivotY);
matrix.postTranslate(-prevPivotX + pivotX, -prevPivotY
+ pivotY);
}
prevPos.x = event.getX(0);
prevPos.y = event.getY(0);
prevPos2.x = event.getX(1);
prevPos2.y = event.getY(1);
prevDist = d;
}
return true;
}
此方法生成一个转换矩阵,应用于绘制。
protected void dispatchDraw(Canvas canvas) {
canvas.save();
canvas.setMatrix(matrix);
// do your drawing here
canvas.restore();
}