我正在制作这个视频游戏,其中有一群怪物在屏幕上运行。问题是怪物一度经过一个区域(超过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。另一种方法是通过制作线程和Thread.sleep(randCo)或其他东西,但我试图不多线程。还有其他办法吗?
答案 0 :(得分:1)
我认为Thread.sleep(..)是你最好的选择。如果你有一个线程并且让它进入休眠状态并不意味着你有多线程。
答案 1 :(得分:1)
你可能最好为你的精灵预先计算一个路径,然后给它一个速度。然后,在“绘制”步骤中,您将根据精灵的路径,速度和时间计算位置。
答案 2 :(得分:0)
为什么不记下他离开屏幕多久的时间,然后当他回到屏幕上时让他回来:
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周期更可靠。