2014-10-14 2 views
0

Я пытаюсь заставить актера перемещаться случайным образом каждые X секунд. Код для действия таков:Актер libGDX не будет вести себя нормально при движении

@Override 
public void act(float delta) 
{ 
    super.act(delta); 

    if (delta > (float)(rand.nextInt(5)+3)) 
    { 
     switch(rand.nextInt(3)) 
     { 
      case 0: 
       moveBy(3,0); 
       break; 
      case 1: 
       moveBy(-3,0); 
       break; 
      case 2: 
       moveBy(0,3); 
       break; 
      case 3: 
       moveBy(0,-3); 
       break; 
     } 
    } 

} 

Отладка отображает только X, увеличивающееся сверхурочное время, и оно останавливается на ~ 103. В чем проблема? Случайный вводится в конструкторе с семенем System.currentTimeMillis().

+2

Не уверен, почему он вообще движется. 'delta' - это время с момента последнего кадра, поэтому обычно оно будет выглядеть как' 0.016667f'. Поэтому ваш оператор if никогда не должен выполняться. Кроме того, 'nextInt' является эксклюзивным, поэтому' nextInt (3) 'является числом от 0 до 2, поэтому случай 3 никогда не будет выполнен. – Tenfour04

ответ

1

Здравствуйте, извините за мой английский тест, этот простой пример, если хотите, измените конечную переменную, чтобы ее настроить.

private Random random= new Random(); 

private float inttt = 0; 

private float tiempo = 0; 

private int randomT = 0; 

private int randomN = 0; 

private final int MAXTIEMPO = 15; // cambiar para aumentar o disminuir el tiempo que pasa como maximo entre un movimiento y otro.//changed to increase or decrease the time spent at most from one movement to another. 

public int RandomNumber(float delta){ 

    tiempo += delta; 

     if(randomT == 0 || randomN == 0){ 

       random.setSeed(System.nanoTime() * (long)inttt); 
       this.randomN = random.nextInt(MAXTIEMPO); 
       inttt += randomN; 
       randomT = randomN; 

       Gdx.app.log("randomN", ""+randomN); 
       Gdx.app.log("randomT", ""+randomT); 
       Gdx.app.log("tiempo", ""+tiempo); 

       return 0; 

     }else if(randomT != 0 && tiempo >= randomT){ 

       tiempo = 0; 
       randomT = 0; 

       Gdx.app.log("randomN", ""+randomN); 
       Gdx.app.log("randomT", ""+randomT); 
       Gdx.app.log("tiempo", ""+tiempo); 

       return randomN; 

     }else{ 

       Gdx.app.log("randomN", ""+randomN); 
       Gdx.app.log("randomT", ""+randomT); 
       Gdx.app.log("tiempo", ""+tiempo); 

       return 0; 
     } 
    } 

@Override общественного недействительными акт (флоат дельта) { super.act (дельта);

if (RandomNumber(delta) != 0){ 

     switch(rand.nextInt(4)){ 

     case 0: 
      moveBy(3,0); 
      break; 
     case 1: 
      moveBy(-3,0); 
      break; 
     case 2: 
      moveBy(0,3); 
      break; 
     case 3: 
      moveBy(0,-3); 
      break; 
    } 
    } 
+0

Спасибо, это очистило! Ясно, что я ошибаюсь. – user2279559

Смежные вопросы