Движение энтити

1,976
68
220
Доброго времени суток :D
У меня есть танк, на нём можно ездить, всё как бы нормально, но.. Ездит он "кустарно" - рывками, вращается тоже отнюдь не плавно. Более того скорость движения в разные стороны разная. Куда-то быстрее, куда-то медленнее, а почему - не ясно. В чём может быть причина? Вот код (в onUpdate):
Код:
        if (!this.worldObj.isRemote) {
            this.prevPosX = this.posX;
            this.prevPosY = this.posY;
            this.prevPosZ = this.posZ;
            this.rotationYaw = this.rotationHorizontal;
            
            if (this.riddenByEntity != null && rider != null) {
                this.motionX = -Math.sin(Math.toRadians(this.rotationYaw)) / 4 * this.speedModifier;
                this.motionZ = Math.cos(Math.toRadians(this.rotationYaw)) / 4 * this.speedModifier;
                if (this.motionX > 0.1)    this.motionX = 0.1;
                if (this.motionZ > 0.1) this.motionZ = 0.1;
            } else {
                if (this.motionX > 0) {
                    this.motionX -= 0.05D;
                    if (this.motionX <= 0.05D) {
                        this.motionX = 0;
                    }
                } else if (this.motionX < 0) {
                    this.motionX += 0.05D;
                    if (this.motionX >= -0.05D) {
                        this.motionX = 0;
                    }
                }
                if (this.motionZ > 0) {
                    this.motionZ -= 0.05D;
                    if (this.motionZ <= 0.05D) this.motionZ = 0;
                } else if (this.motionZ < 0) {
                    this.motionZ += 0.05D;
                    if (this.motionZ >= -0.05D) this.motionZ = 0;
                }
            }
            if (this.isInAir()) this.motionY -= 0.05D;
        }
        
        this.moveEntity(this.motionX, this.motionY, this.motionZ);
Надеюсь, поможете =)
[merge_posts_bbcode]Добавлено: 03.07.2016 16:16:41[/merge_posts_bbcode]

P.S. speedModifier - переменная, которая меняет скорость, от 0 до 1 с шагом в 0.05F

[merge_posts_bbcode]Добавлено: 03.07.2016 16:17:39[/merge_posts_bbcode]

P.P.S. isInAir - улучшенный под мой танк аналог onGround, проверяет возможность упасть.
 
769
1
42
Ты смотрел как в Flan`s делают? Даже группа в вк есть
 
1,976
68
220
Флан лагучий. © wilah
Зачем мне это?
[merge_posts_bbcode]Добавлено: 03.07.2016 17:56:35[/merge_posts_bbcode]

Наверняка есть способы двигать энтити по-человечески. Ведь ни один моб не ходит рывками, как и лодка с вагонеткой. Значит - ошибка где-то у меня. А где - непонятно.
Я не весь код кинул, если нужно ещё какой-то кусок - скажите, я просто не вижу смысла кидать то, что никак не влияет на движение, типа апдейт выстрелов или защита "экипажа".
 
164
1
4
Меня интересуют параметры которые ты указываешь в EntityRegistry.registerModEntity
 
1,976
68
220
Код:
registerEntity(IonPlasmaTankEntity.class, "IonPlasmaTank", false, 0, 0);

Код:
EntityRegistry.registerGlobalEntityID(entityClass, name, ID);
EntityRegistry.registerModEntity(entityClass, name, ID, OSMMain.instance, 64, 1, true);
 
164
1
4
Хм, я думал проблема в последних параметрах (ванильная лодка юзает 80 и 3), но у тебя всё норм, тогда я хз. В ванильной лодке есть ещё такое:
Код:
d2 = this.posX + (this.boatX - this.posX) / (double)this.boatPosRotationIncrements;
d4 = this.posY + (this.boatY - this.posY) / (double)this.boatPosRotationIncrements;
d11 = this.posZ + (this.boatZ - this.posZ) / (double)this.boatPosRotationIncrements;
this.setPosition(d2, d4, d11);
Может быть это поможет.
 
1,976
68
220
И что это за переменные, которых у меня нет и как их задавать? Там же вызов в лодке идёт, у меня такого нет да и не нужно оно
 
1,137
5
3
posX - предыдущая
boatX - текущая
Это ж интерполяция линейная
 
1,137
5
3
Должно быть в промежутке [0;1]. При 0 - posX, при 1 - boatX. А при 0.5 (boatX + posX) / 2
 
Сверху