Java 暂停没有线程的程序

Java 暂停没有线程的程序,java,for-loop,sleep,thread-sleep,Java,For Loop,Sleep,Thread Sleep,我正在制作一个视频游戏,游戏中有一群怪物在屏幕上跑来跑去。问题是怪物在某一点经过一个区域(在y坐标之上),并且必须一路返回到顶部。我收到一个建议,建议将此从底部到顶部的传输延迟随机时间(0、1、2或3秒)。现在,它只是上升到顶部,没有任何中断。我的问题是实施这个休息。我尝试了各种方法,如使用循环暂停,如下所示 // if( monster is below 400 on y-axis if( sbgBackFootY[ i ] >= 400 ) {

我正在制作一个视频游戏,游戏中有一群怪物在屏幕上跑来跑去。问题是怪物在某一点经过一个区域(在y坐标之上),并且必须一路返回到顶部。我收到一个建议,建议将此从底部到顶部的传输延迟随机时间(0、1、2或3秒)。现在,它只是上升到顶部,没有任何中断。我的问题是实施这个休息。我尝试了各种方法,如使用循环暂停,如下所示

            // if( monster is below 400 on y-axis
        if( sbgBackFootY[ i ] >= 400 ) {
            // random number that determines how long it will take to go to top
            int randCo = ( int ) ( Math.random() * 3 );

            if( randCo == 0 ) {
                //moves monster to top
                sbgHeadX[ i ] = 200;
                sbgHeadY[ i ] = 80;
                sbgMouthX[ i ] = 206;
                sbgMouthY[ i ] = 110;
                sbgBackX[ i ] = 190;
                sbgBackY[ i ] = 95;
                sbgBackFootX[ i ] = 190;
                sbgBackFootY[ i ] = 115;
                sbgFrontFootX[ i ] = 197;
                sbgFrontFootY[ i ] = 115;
                sbgLeftEyeX[ i ] = 205;
                sbgLeftEyeY[ i ] = 90;
                sbgRightEyeX[ i ] = 215;
                sbgRightEyeY[ i ] = 90;
                sbgLeftEyebrowStartX[ i ] = 203;
                sbgLeftEyebrowStartY[ i ] = 83;
                sbgLeftEyebrowEndX[ i ] = 210;
                sbgLeftEyebrowEndY[ i ] = 90;
                sbgRightEyebrowStartX[ i ] = 220;
                sbgRightEyebrowStartY[ i ] = 83;
                sbgRightEyebrowEndX[ i ] = 215;
                sbgRightEyebrowEndY[ i ] = 90;

            }

            if( randCo == 1 ) {
                //loop is supposed to stall program 
                for( int w = 0; w <= 1000000000; w++ ){
                    SBGco[ i ]++;
                }

                if( SBGco[ i ] == 1000000000 ) {
                    //moves monster to top
                    sbgHeadX[ i ] = 200;
                    sbgHeadY[ i ] = 80;
                    sbgMouthX[ i ] = 206;
                    sbgMouthY[ i ] = 110;
                    sbgBackX[ i ] = 190;
                    sbgBackY[ i ] = 95;
                    sbgBackFootX[ i ] = 190;
                    sbgBackFootY[ i ] = 115;
                    sbgFrontFootX[ i ] = 197;
                    sbgFrontFootY[ i ] = 115;
                    sbgLeftEyeX[ i ] = 205;
                    sbgLeftEyeY[ i ] = 90;
                    sbgRightEyeX[ i ] = 215;
                    sbgRightEyeY[ i ] = 90;
                    sbgLeftEyebrowStartX[ i ] = 203;
                    sbgLeftEyebrowStartY[ i ] = 83;
                    sbgLeftEyebrowEndX[ i ] = 210;
                    sbgLeftEyebrowEndY[ i ] = 90;
                    sbgRightEyebrowStartX[ i ] = 220;
                    sbgRightEyebrowStartY[ i ] = 83;
                    sbgRightEyebrowEndX[ i ] = 215;
                    sbgRightEyebrowEndY[ i ] = 90;

                }
            }
//如果(怪物在y轴上低于400
if(sbgBackFootY[i]>=400){
//确定到达顶部所需时间的随机数
int randCo=(int)(Math.random()*3);
如果(randCo==0){
//将怪物移到顶部
sbgHeadX[i]=200;
sbgHeadY[i]=80;
sbgMouthX[i]=206;
sbgMouthY[i]=110;
sbgBackX[i]=190;
sbgBackY[i]=95;
sbgBackFootX[i]=190;
sbgBackFootY[i]=115;
sbgFrontFootX[i]=197;
sbgFrontFootY[i]=115;
sbgLeftEyeX[i]=205;
sbgLeftEyeY[i]=90;
sbgRightEyeX[i]=215;
sbgrighteyy[i]=90;
sbgLeftEyebrowStartX[i]=203;
sbgLeftEyebrowStartY[i]=83;
sbgLeftEyebrowEndX[i]=210;
sbgLeftEyebrowEndY[i]=90;
sbgRightEyebrowStartX[i]=220;
sbgRightEyebrowStartY[i]=83;
sbgRightEyebrowEndX[i]=215;
sbgRightEyebrowEndY[i]=90;
}
如果(randCo==1){
//循环应该暂停程序

对于(int w=0;w我认为Thread.sleep(..)是你最好的选择。如果你有一个线程,你把它放在睡眠状态并不意味着你有多线程。

你可能最好为你的精灵预先计算一条路径,然后给它指定一个速度。然后,在你的“绘制”过程中步骤:根据精灵的路径、速度和时间计算位置。

为什么不保留他离开屏幕的时间,然后在他回到屏幕时将其放回:

int initTime= 0;
int elapsedTimeOffScreen = 0

if( sbgBackFootY[ i ] >= 400 ) {
if(initTime!= 0)
   initTime= DateTime.Now;
elapsedTimeOfScreen  = DateTime.Now - initTime;

if(elapsedTimeOffscreen > 1000)
{
  initTime = 0
  elapsedTimeOffScreen = 0;
 //go back on screen
}
每次重新设置字符时,initTime都会被重置
这将使用时间来检查角色离开屏幕的时间。这肯定比使用cpu周期可靠得多。

不要认为他可以线程睡眠。如果我理解他是正确的,单线程渲染他的所有怪物,因此如果你线程睡眠,所有怪物都将停止(而不仅仅是那些穿越边界的怪物)@Michael在重新阅读问题时,我认为你是对的。他应该支持Andrew的解决方案。不要气馁,你的解决方案也很好。我使用了你建议使用系统时间的部分。谢谢。