自动退出SurfaceView

2023-12-15

我正在为 Android 2.x 开发一款游戏。当玩家松手时,我想自动退出并返回到游戏的上一个菜单。这可能是一个简单的问题,但我该怎么做呢?

我有一个 MenuActivity,它调用 GameActivity,它调用游戏逻辑所在的 GameView(SurfaceView 的实现)。

更新:不,等等,它比这更复杂。为了制作这个游戏,我遵循了使用线程的 MoonLander 示例。

GameView:

public class GameActivity extends Activity
{
GameView gameView;
GameThread gThread;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    gameView = new GameView(this);
    setContentView(gameView);

    gThread = gameView.getThread();
    gThread.doStart();
}

}

GameView:

package com.cp.balldrop;

public class GameView extends SurfaceView implements SurfaceHolder.Callback
{
    class GameThread extends Thread
    {


    public GameThread(SurfaceHolder sHolder, Context context, Handler handler)
    {
        //Code
    }

    public void doStart()
    {
        synchronized (mSurfaceHolder)
        {

        }
    }

    @Override
    public void run()
    {
        while (running)
        {
            Canvas c = null;
            try
            {
                c = mSurfaceHolder.lockCanvas(null);
                synchronized (mSurfaceHolder)
                {    
                    doDraw(c);
                }
            }
            finally
            {
                if (c != null)
                {
                    mSurfaceHolder.unlockCanvasAndPost(c);
                }
            }
        }
    }

    protected void doDraw(Canvas canvas)
    {
            //code
    }
}

/** Handle to the application context, used to e.g. fetch Drawables. */
private Context mContext;

/** Pointer to the text view to display "Paused.." etc. */
private TextView mStatusText;

/** The thread that actually draws the animation */
private GameThread gThread;

public GameView(Context context)
{
    super(context);

    // register our interest in hearing about changes to our surface
    SurfaceHolder holder = getHolder();
    holder.addCallback(this);

    // create thread only; it's started in surfaceCreated()
    gThread = new GameThread(holder, context, new Handler()
    {
        @Override
        public void handleMessage(Message m)
        {
           // mStatusText.setVisibility(m.getData().getInt("viz"));
           // mStatusText.setText(m.getData().getString("text"));
        }
    });

    setFocusable(true);
}

public GameThread getThread()
{
    return gThread;
}

public void surfaceCreated(SurfaceHolder holder)
{
    gThread.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
    boolean retry = true;
    gThread.setRunning(false);

    while (retry)
    {
        try
        {
            gThread.join();
            retry = false;
        }
        catch (InterruptedException e)
        {
        }
    }
}
}

在我的线程中,我从 SurfaceView 的 doTouch 调用以下方法:

public void doLose() {
            synchronized (mSurfaceHolder) {
                //quit to mainmenu
                ((Activity) mContext).finish();
            }            
        }

这似乎关闭了表面视图和托管它的活动,将我带回到主菜单活动中。请注意转换和预定义的上下文。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自动退出SurfaceView 的相关文章

随机推荐

  • Oracle 11g 中的 XML 表

    这是一个示例表 create table xmltemp mydoc xmltype 这是一个小的 xml 文档 insert into xmltemp values xmltype
  • 如何阻止类对象的构造?

    我在任何地方都找不到答案 可以通过使用条件并抛出异常来完成 但是还有其他方法吗 目前尚不清楚为什么您想要一个在任何情况下都无法构造的类 但您可以使所有构造函数private并没有为他们提供任何实施 这将阻止编译时的构造 在 C 11 中你可
  • 如何在 bash shell 中格式化字符串?

    我正在尝试在linux中格式化变量 str Initial Value 168 echo New Value echo str cut d f2 gt gt test txt 我期待以下输出 Value 168 但相反得到 Value 16
  • 子集 data.table 仅保留大于应用于所有列的特定值的元素

    我想要子集news 下 创建news2 下文进一步 将仅包括每个元素中的abs 值 的行 列news gt 0 01 下面是我尝试过的代码 gr lt data frame which abs news 1 ncol news with F
  • mysql_real_escape_string() 不应该在数据库中留下斜杠吗?

    我正在使用 smarty 和mysql real escape string 对于用户输入 当我插入一些代码时 or 并在 phpmyadmin 中查找 它显示没有反斜杠 当我从数据库获取记录时 我也没有反斜杠 但是当我只是传递转义字符串而
  • 仅字母、下划线、连字符、撇号的正则表达式

    我想要一个只接受字母 连字符 撇号 下划线的正则表达式 我试过 A Za z 但它不起作用 请帮忙 你的正则表达式是错误的 尝试这个 0 9A Za z OR w 连字符需要位于字符类中的第一个或最后一个位置以避免转义 另外 如果不允许空字
  • 使用多线程模块将 API 数据检索到数据帧中

    我正在使用第三方 API 从大量天数中检索不同标签的 10 分钟数据 当前数据提取可能需要长达几分钟的时间 具体取决于天数和标签数量 因此 我正在尝试多线程 我知道这对于繁重的 IO 操作很有用 API 调用如下 我已替换了实际的 API
  • 在 d3.js 中嵌入 json 文件

    http bl ocks org mbostock 4339083我正在使用这个 代替d3 json d 4063550 flare json function error flare 我如何让它使用 html 中的 json 文件 就像我
  • 如何将 ZipInputStream 转换为 InputStream?

    我有代码 其中 ZipInputSream 转换为 byte 但我不知道如何将其转换为输入流 private void convertStream String encoding ZipInputStream in throws IOExc
  • 如何在 Swift 中的两个场景之间传递数据?

    我有两个场景 我想使用转场将单个变量传递到另一个场景 我已经尝试过 但不幸的是我见过的所有教程都涉及故事板 我没有使用故事板 我正在以编程方式完成所有这些工作 这是我试图初始化的segue func prepareForSegue segu
  • 刷新 recyclerview 片段中的项目

    我的应用程序有 4 个带有滑动选项卡布局的选项卡 我在 MainActivity 中使用了一个视图寻呼机 每个选项卡都有 4 个片段 我使用 volley 从 mysql 接收数据 卡片视图 回收者视图和 JSON 我想使用 SwipeRe
  • 与 MATLAB SQL Server 进行通信

    有没有办法有效地沟通这些平台 我是说 像导出 SQL Server 和加载 Matlab 之类的东西 但以有效的方式 我找到了adodb 工具到目前为止 文件交换工作得最好 它比数据库工具箱或任何先前的包装解决方案要快得多 不需要额外的工具
  • 在 OpenCV 中使用 FeatureDetector 会导致访问冲突

    我需要找到并匹配立体图像中的特征点 因此我想比较 OpenCV 2 4 5 支持的不同特征检测算法 通过将 SURF SIFT 等传递给函数 代码片段 include opencv2 opencv hpp include
  • 绘制鼠标指针图标?

    我正在编写一些有趣的小工具 我希望能够在与原始鼠标不同的位置绘制第二个 或更多 鼠标指针图标 但根据原始鼠标的移动来移动它 我知道如何跟踪鼠标的移动 但我不知道如何绘制 重绘鼠标指针 有人可以帮忙吗 您可以使用以下代码 CURSORINFO
  • 如果 f:viewParam / converter 返回 null,如何将用户发送到 404 页面?

    假设您有一个带有视图参数的页面 例如 widgets widgetId 1
  • 这段代码能确保我从套接字读取我想要的所有内容吗?

    执行 Socket Receive byte 将从缓冲区中获取字节 但如果预期的数据相当大 则所有字节可能尚未在缓冲区中 这将给我一个仅部分填充的字节数组 这段代码能确保我读入我想要的所有内容吗 sock Receive message b
  • RDD 谱系何时创建?如何找到谱系图?

    我正在学习 Apache Spark 并尝试获取 RDD 的谱系图 但我找不到特定谱系何时创建 另外 哪里可以找到 RDD 的谱系 RDD谱系是每次应用转换时创建和扩展的分布式计算的逻辑执行计划any RDD 请注意执行操作后发生的 逻辑
  • 如何导入同目录或子目录中的类?

    我有一个目录 其中存储了所有 py files bin main py user py where class User resides dir py where class Dir resides 我想使用来自的课程user py and
  • GoF Factory 的命名约定?

    该模式使用抽象工厂 然后使用工厂的实现 我确信这两个类有一个标准的命名约定 但我不知道它是什么 例如 public abstract class ChocolateFactory public class MyChocolateFactor
  • 自动退出SurfaceView

    我正在为 Android 2 x 开发一款游戏 当玩家松手时 我想自动退出并返回到游戏的上一个菜单 这可能是一个简单的问题 但我该怎么做呢 我有一个 MenuActivity 它调用 GameActivity 它调用游戏逻辑所在的 Game