所以,我有一个自定义的BoardView类扩展View。当用户按下单元格时,我实现了绘图板,线条和绘制“O”drawable。
但是,我无法正确实现以下问题:
1。当用户进行捏合(多点触控)时,缩放BoardView。
2. 如果BoardView大于BoardView的初始宽度或高度,则将BoardView向左,向右,向上,向下滚动。
3。在用户在缩放或滚动后按下单元格时找到右侧单元格坐标。
这是我的第一个游戏项目,请帮助我,如果有人知道如何解决这个问题。
我试过但没有正常工作。 BoardView宽度等于宽度,BoardView高度等于BoardView宽度。这是方板视图。
我给了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
我找到了自己的解决方案,但需要改进代码,您可以使用您的解决方案回答我的问题!
答案 0 :(得分:1)
你能把你的代码移到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();
}
答案 1 :(得分:1)