私はこのビデオ ゲームに取り組んでおり、画面を横切るたくさんのモンスターが登場します。問題は、ある時点でモンスターが領域を通り過ぎて (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;
}
}
しかし、コンピューターの計算が速すぎるため、変数 w は 1000000000 倍速になります。これを行うもう 1 つの方法は、スレッドを作成して Thread.sleep(randCo) などに移行することですが、マルチスレッドにならないようにしています。これを行う他の方法はありますか?