Текстурная анимация Techne модели

Версия Minecraft
1.7.10

Led

291
3
0
Доброго времени суток.
В процессе создания Блока - гирлянды для елки, столкнулся с такой проблемой как анимация текстуры. Хочу, что бы у гирлянды мигали лампочки.
Попытался сделать с помощью .png.mcmeta, но эффекта ноль.
Подскажите, что я делаю неправильно, или как правильно решить мою проблему.

(Пока тренировался с анимацией не на гирлянде, а на венке).

[img=41x64]https://pp.vk.me/c836322/v836322701/11329/4O8F8JbiahU.jpg[/img]

Код:
{
  "animation": {}
}

zc-lPGYIwV4.jpg
 

timaxa007

Модератор
5,831
409
672
Если ты текстуру указывал используя ResourceLocation, то конечно так не выйдет.


Через ResourceLocation указываешь эти две текстуры и биндишь через определёное время, то одно, то другую текстуру.
 

Led

291
3
0
timaxa007 написал(а):
Если ты текстуру указывал используя ResourceLocation, то конечно так не выйдет.


Через ResourceLocation указываешь эти две текстуры и биндишь через определёное время, то одно, то другую текстуру.




А можешь объяснить, как биндить?

И насколько это производительно получиться.
 

Led

291
3
0
Я имею в виду, как их менять?

Код:
public class renderGarland extends TileEntitySpecialRenderer{
 
 private static final ResourceLocation texture = new ResourceLocation(LWMEvent.MOD_ID + ":" + "textures/model/modelGarland.png");
 private static final ResourceLocation texture2 = new ResourceLocation(LWMEvent.MOD_ID + ":" + "textures/model/modelGarland2.png");
 private modelGarland model;
 
 public renderGarland() {
 this.model = new modelGarland();
 }

 @Override
 public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) {
 int i = 0;

        if (tileentity.hasWorldObj()) {
            i = tileentity.getBlockMetadata();
        }
 GL11.glPushMatrix();
 GL11.glTranslatef((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F);

 switch (tileentity.blockMetadata) 
 {
 case 0: GL11.glRotatef(180F, -1F, 0F, 1F); break; //WEST
 case 1: GL11.glRotatef(180F, 0.5F, 0F, 0.5F); break; //
 case 2: GL11.glRotatef(180F, 1F, 0F, 0F); break;  
 default: GL11.glRotatef(180F, 0F, 0F, 1F); break;
 }
 Minecraft.getMinecraft().renderEngine.bindTexture(texture);
 Minecraft.getMinecraft().renderEngine.bindTexture(texture2);
 GL11.glPushMatrix();
 this.model.renderModel(0.0625F);
 GL11.glPopMatrix();
 
 GL11.glPopMatrix();
 }
}


Как включаь то одну, о другую текстуру?
 

Led

291
3
0
Спасибо большое, но как реализовать таймер?
Извиняюсь, за такое количество вопросов.
Нашел в гугле про таймеры в java, но не знаю, как реализовать максимально просто и производительно
 

timaxa007

Модератор
5,831
409
672
Создаёшь переменную timer числового типа, желательно в твоём TileEntity, в update или в самом рендере этот timer увеличивать значение ( ++timer; ), когда дойдёт до определённого значения по условию для того, чтобы значения timer стали равны нулю. Потом в рендере в условии используешь эту переменную и проверяешь, если timer будет не больше определённого значения, то будет одна текстура, если больше определённого значения, то другая текстура.
 

Led

291
3
0
timaxa007 написал(а):
Создаёшь переменную timer числового типа, желательно в твоём TileEntity, в update или в самом рендере этот timer увеличивать значение ( ++timer; ), когда дойдёт до определённого значения по условию для того, чтобы значения timer стали равны нулю. Потом в рендере в условии используешь эту переменную и проверяешь, если timer будет не больше определённого значения, то будет одна текстура, если больше определённого значения, то другая текстура.

Cделал вот так:


В энтити
Код:
 public static int timer;

В рендере

Код:
++tileEntityGarland.timer;
 if(tileEntityGarland.timer >200) { tileEntityGarland.timer = 0;}
 if (tileEntityGarland.timer > 100) {
 Minecraft.getMinecraft().renderEngine.bindTexture(texture);
 } else {
 Minecraft.getMinecraft().renderEngine.bindTexture(texture2);
 }


Но у меня прямо ощущение что все подлагивает.
Ибо гирлянд мигают даже как то не в такт

Тончее как только повесить, мигает все хорошо, а позже начинается дребизжание.

Так же если отойти длитеьность такта почему то возрастает
 
2,505
81
397
Переменную таймера нужно инкрементить в каком-нибудь клиентском тик ивенте, а не в рендере. Т.к. в последнем скорость таймера пропорциональна количеству видимых блоков
 

timaxa007

Модератор
5,831
409
672
Не знаю почему у тебя такие проблемы, у меня он не просит.
[video=youtube]https://www.youtube.com/watch?v=Mkmhw0O6WC4[/video]


Хм... А у тебя "tileEntityGarland" - это переменная или класс? Если класс, то ясно почему у тебя такая ошибка.
 
2,505
81
397
Тимаха, а куда ты этот таймер сунул, в тайл что ли?


Зачем для каждого тайла свой таймер? Хотя тут на любителя. Если нужно, чтобы все мигали совсем вразнобой, то да, нормально. Но это какая-то стремная гирлянда.
 

timaxa007

Модератор
5,831
409
672
Да, в свой TileEntity.
Да, что-бы у каждого TileEntity было своё время, для разнобоя. Да, тут для каждого своё можно как хочется делать, я просто как пример писал.
 
Сверху