Android 时滞与博弈循环

Android 时滞与博弈循环,android,Android,我正在做一个简单的match-3游戏,目前我正在使用一个类似下面代码的游戏循环。我正在使用一些帧计算来获得游戏的最佳速度。这是我以前玩过的另一场比赛的结果。但对于这种类型的游戏来说,这似乎是不必要的 我需要在几个地方有一些时间延迟,比如当我在游戏区域移动一个对象时,我希望在调用一个方法之前有一个短的时间延迟,该方法检查一行中是否有三个对象的匹配。然后,当代码检测到匹配时,我还需要一个短的时间延迟,以便在用户开始移动另一个对象,然后检查匹配之前,我可以在游戏网格中的这些位置执行一些简单的效果 因为

我正在做一个简单的match-3游戏,目前我正在使用一个类似下面代码的游戏循环。我正在使用一些帧计算来获得游戏的最佳速度。这是我以前玩过的另一场比赛的结果。但对于这种类型的游戏来说,这似乎是不必要的

我需要在几个地方有一些时间延迟,比如当我在游戏区域移动一个对象时,我希望在调用一个方法之前有一个短的时间延迟,该方法检查一行中是否有三个对象的匹配。然后,当代码检测到匹配时,我还需要一个短的时间延迟,以便在用户开始移动另一个对象,然后检查匹配之前,我可以在游戏网格中的这些位置执行一些简单的效果

因为现在每件事都是同时发生的,我想知道在没有计算帧的情况下运行这个游戏是否会更好,我该怎么做才能得到一些时间延迟? 我已经测试过在这段代码中使用
Thread.sleep(250)
,但没有达到我所希望的效果

有什么更好的方法来运行这样的游戏

// Game loop ---------------------------------------
@Override
public void run() {
    // TODO Auto-generated method stub

    long beginTime;
    long timeDiff;
    int sleepTime;
    int framesSkipped;

    sleepTime = 0;

    while (gameRunning) {
        if (!surfaceHolder.getSurface().isValid())
            continue;

        try {
            canvas = surfaceHolder.lockCanvas();

            beginTime = System.currentTimeMillis();
            framesSkipped = 0;

            // Different game states
            switch (gameState) {

            case 0: // Intro game
                drawStartPage(canvas);
                break;

            case 1: // Play game
                canvas.drawRGB(0,0,0);

                if(touchActionDown) {
                    touchActionDown = false;
                    colorObjectManager.checkPosition(touchX, touchY);
                    touchActionMove = false;
                }

                if(touchActionMove) {
                    touchActionMove = false;
                    colorObjectManager.swapObject(moveDirection);
                    // Time delay
                    colorObjectManager.checkMatch();
                    // Time delay
                }

                // Call method to draw objects on screen
                colorObjectManager.drawObjectsList(canvas);
                break;

            case 2: // End game

                break;

            }

            // Calculate difference from first call to
            // System.currentTimeMillis() and now
            timeDiff = System.currentTimeMillis() - beginTime;
            // Calculate sleepTime
            sleepTime = (int) (FRAME_PERIOD - timeDiff);

            if (sleepTime > 0) {

                try {
                    Thread.sleep(sleepTime);
                } catch (InterruptedException e) {
                }
            }

            while (sleepTime < 0 && framesSkipped < MAX_FRAME_SKIPS) {
                // Call method to only update objects on screen
                updateObjects();
                sleepTime += FRAME_PERIOD;
                framesSkipped++;
            }

        } finally {

            surfaceHolder.unlockCanvasAndPost(canvas);

        }

    } // End while-loop
}

// End game loop ---------------------------------------
//游戏循环---------------------------------------
@凌驾
公开募捐{
//TODO自动生成的方法存根
漫长的开端;
长时差;
int睡眠时间;
int框架屏蔽;
睡眠时间=0;
同时(游戏运行){
如果(!surfaceHolder.getSurface().isValid())
继续;
试一试{
canvas=surfaceHolder.lockCanvas();
beginTime=System.currentTimeMillis();
framesSkipped=0;
//不同的游戏状态
开关(游戏状态){
案例0://游戏介绍
绘图起始页(帆布);
打破
案例1://玩游戏
canvas.drawRGB(0,0,0);
如果(着陆){
着陆=错误;
colorObjectManager.checkPosition(touchX,touchY);
touchActionMove=false;
}
如果(触摸动作移动){
touchActionMove=false;
colorObjectManager.swapObject(移动方向);
//延时
colorObjectManager.checkMatch();
//延时
}
//调用方法在屏幕上绘制对象
colorObjectManager.drawObjectsList(画布);
打破
案例2://游戏结束
打破
}
//计算从第一次调用到
//System.currentTimeMillis()和now
timeDiff=System.currentTimeMillis()-beginTime;
//计算睡眠时间
睡眠时间=(int)(帧周期-时间差);
如果(睡眠时间>0){
试一试{
睡眠(睡眠时间);
}捕捉(中断异常e){
}
}
while(睡眠时间<0&&framesskiped
我建议使用一个简单的框架,您不需要计算延迟时间。
AFAIK不要在表面上使用线程睡眠。请使用单独的线程并锁定画布。

您可以使用android动画。淡出,淡出,淡出,淡出,淡出,淡出

//some other method to delay
new Handler().postDelayed(new Runnable()
{
 @Override
 public void run()
 {
   // your code here
 }
}, 1000/* 1sec delay */);
也得到了一个非常蹩脚的解决方案

 //for 5 second of delay
 for(int i=0;i<5000:i++){
    for(int k=0;k<5000:k++){
       for(int j=0;j<5000:j++){

       }
    }
  }
//延迟5秒

对于(int i=0;我知道libgdx和其他一些框架,但我现在已经做了很多编码。你能进一步解释一下你在最后一句中所写的内容是什么意思吗?代码示例?@3D krativ:Thread.sleep不适合使用,因为有时它会成为设计拙劣的程序的重要部分am.看这里:。如果你想应用
睡眠
状态,那么你可能可以尝试
时间任务
:@TheDarkKnight好的,不确定我应该如何继续,但我想最好使用时间任务。我还得测试一些。