Анимированная заставка

14
0
Можно ли сделать анимированную заставку вместо заставки MOJANG. Не как в FTB отдельным окном, а прям внутри окна minecraft.
P.S. Если кинут готовый мод для добавки анимации буду очень рад))
 
Нужно пускать загрузку в отдельный поток. Я даже почти уверен, что у JFrame есть отдельный метод по этому поводу. Силами мода - скорее всего нельзя.
 
На JFrame добавляется LWJGL-овский Canvas. Ну или как-то так.
 
Можно и не через фордж, а вставкой класса) Не могли бы вы сделать?
 
RaVeN_II написал(а):
LionZXY написал(а):
Можно и не через фордж, а вставкой класса) Не могли бы вы сделать?
Не смей вставлять!Рефлексия или асм
Почему!? Если делать самостоятельный мод, то да, а если ему для клиента своего, то пусть меняет наздоровье, заколебали.
 
Фордж загрузочный экран не хучит.
Смотри:
BZk3lYU.png
Т.е. вероятно придется менять сурсы, рефлексия тут тоже не сильно поможет, да и от неё потом проблемы при обфускации.
В лоадскрине единожды рисуется текстура через тесселейтор и всё.
Если даже и менять сурсы, отдельные потоки сильно не помогут. Потому что идет загрузка текстур и прочего, а это обязательно должно вызываться из потока LWJGL. И рендер анимации тоже должен быть из этого потока. Коли тебе нужна анимация - значит нужен периодычный рендер и параллельная загрузка ресурсов.
Это, думаю, можно сделать, но тебе точно придется менять сурсы и придется неслабо повозиться с потоками.
Думаю, можно выделить один под загрузку, но все текстуры он будет отправлять потоку LWJGL.
Структура примерно такая:


Код:
private ArrayList<String> loadQueue = new ArrayList<>();
private Thread loaderThread;
private boolean taskCompleted = false;

public void startGame() {
  <blablabla...>
  loaderThread = new Thread() {
    public void waitNextTask() {
      while (!taskCompleted) {
         Thread.sleep(20L); //ну и исключение лови
      }
    }

    public void run() {
        loadSomething();
        loadAnotherSomething();
        loadQueue.add("fontRenderer");
        waitNextTask();
        loadQueue.add("texture: " + "assets/blabla/blocks.png");
        waitNextTask();
        //и так далее
    }
  };    
  <blabla...>
  runLoadCycle();
}
public void runLoadCycle() {
  while(notLoaded) {
    renderLoadScreen(); //рендерим экран с анимацией
    checkTasks();
    Thread.sleep(20L); //и исключение
  }
}

private void checkTasks() {
  ArrayList<String> completedTasks = new ArrayList<>();
  for (String s : loadQueue) {
    if (s.contains("fontRenderer"))
      loadFontRenderer();
    if (s.contains("texture:"))
      loadTexture(s.split(":")[1].trim());
    // и так далее
    completedTasks.add(s);
  }
  loadQueue.removeAll(completedTasks);
  if (!loadQueue.isEmpty()) {
    System.out.println("ERROR: Couldn't load some resources!");
    for (String s : loadQueue) 
      System.out.println("Couldn't load: " + s);
    return;
  }

  taskCompleted = true;
}
 
Назад
Сверху