我目前正在为Android开发一个游戏。我正在做的事情之一是通过触摸移动地图。
这是处理获取速度的代码,然后将其添加到屏幕位置,下一次更新将绘制映射的相应部分。
@Override
public boolean onTouchEvent(MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (released) {
touchX = event.getX();
touchY = event.getY();
released = false;
}
else {
float newX = event.getX();
float newY = event.getY();
speedX = (int) (newX - touchX);
speedY = (int) (newY - touchY);
touchX = newX;
touchY = newY;
}
return true;
case MotionEvent.ACTION_UP:
released = true;
return true;
}
return false;
}它工作得很好,真的。但这似乎还不够流体运动。
有人知道我怎样才能让它更像无缝运动吗?
编辑:
现在我的fps是80了。因此,我不认为这是由位图本身造成的。
发布于 2014-05-03 17:45:38
我在Android和处理触摸事件方面的经验是,在运行应用程序时,很难查看代码并了解它将如何工作。这甚至可以是不同的安卓设备的不同,所以要确保你的应用程序是在Android2.3.5和安卓的4+设备上测试的(假设你的目标也是Android2.3.5)。
据我所知,“通过触摸移动地图”意味着您正在滚动地图,就像一个HorizontalScrollView与一个普通的(垂直的) ScrollView组合在一起。据说,可以将这两者结合在一起创建一个“二维滚动视图”,但我自己并没有能够以一种创造平滑用户体验的方式完成这一任务(实际上,我认为这是一种不好的做法)。不过,我还是找到了一个非常容易使用的Android视图类,它负责所有这些滚动操作。然而,这个链接似乎已经消失了,但是您可以尝试这个GitHub项目,如果这对您不起作用,那么通过评论或者在第二监测器聊天室找到我,让我知道,我可以提供我正在使用的实现。
至于你现有的代码,它是干净的,它是直进的。但是speedX/speedY和touchX/touchY在哪里使用?问题会在那里吗?
我只有一个改进您的代码的建议:
switch(event.getAction()) {应该是(请看这里)
switch(event.getActionMasked()) {处理触摸活动时的一般建议:
日志、日志和日志就像疯子一样使用Log.d("YOUR_TAG", "A whole bunch of information")!您记录的越多,希望您能够更多地了解MotionEvents,并能够编写更好的代码。
https://codereview.stackexchange.com/questions/48860
复制相似问题