gpt4 book ai didi

android - 如何在没有 View 的情况下在Android游戏中实现滑动

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:24:09 24 4
gpt4 key购买 nike

我正在尝试在 Android 上制作贪吃蛇游戏,其中蛇会通过滑动手势移动。

我已经尝试了很多方法来完成这项工作,但似乎没有一种对我有用。 我还没有实现 View - 这会成为问题吗?

这是我根据之前的 StackOverflow 问题尝试实现的示例 - Android: How to handle right to left swipe gestures .

我按照说明创建了 OnSwipeTouchListener.java。然而,我在使用上遇到了一些问题。

在 GameScreen.java(所有触摸事件发生的地方)中,我将其添加为示例 -

onSwipeTouchListener = new OnSwipeTouchListener() {
public void onSwipeTop() {
Toast.makeText(MyActivity.this, "top", Toast.LENGTH_SHORT).show();
}
public void onSwipeRight() {
Toast.makeText(MyActivity.this, "right", Toast.LENGTH_SHORT).show();
}
public void onSwipeLeft() {
Toast.makeText(MyActivity.this, "left", Toast.LENGTH_SHORT).show();
}
public void onSwipeBottom() {
Toast.makeText(MyActivity.this, "bottom", Toast.LENGTH_SHORT).show();
}
};

imageView.setOnTouchListener(onSwipeTouchListener);

这会导致出现一堆错误(主要涉及 imageView),并且无法解决。

有人会碰巧有针对我的情况的替代滑动实现吗?

最佳答案

您可以通过两种方式做到这一点:

选项 1:

在您游戏的基础 Activity 类中:

class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
float slope = (e1.getY() - e2.getY()) / (e1.getX() - e2.getX());
float angle = (float) Math.atan(slope);
float angleInDegree = (float) Math.toDegrees(angle);
// left to right
if (e1.getX() - e2.getX() > 20 && Math.abs(velocityX) > 20) {
if ((angleInDegree < 45 && angleInDegree > -45)) {
//code for left to right swipe should go here
}
// right to left fling
} else if (e2.getX() - e1.getX() > 20
&& Math.abs(velocityX) > 20) {
if ((angleInDegree < 45 && angleInDegree > -45)) {
//code for right to left swipe should go here

}
}
return true;
} catch (Exception e) {
// nothing
}
return false;
}
}

然后您可以注册任何 View 以接收/监听手势:

 final GestureDetector  gestureDetector = new GestureDetector(new MyGestureDetector());
gameView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) return false;
return false;
}
});
//the parent layout
findViewById(R.id.parent_layout).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) return false;
return false;
}
});
//an image view
findViewById(R.id.image_view).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) return false;
return false;
}
});

选项 2:

如果 GameScreen 类可以直接访问触摸事件,您可以读取它们并实现滑动操作的逻辑。其代码类似于 Mostafa Gazar 的回答。

关于android - 如何在没有 View 的情况下在Android游戏中实现滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26718308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com