Спавн партиклей сферой.

Да никакой, просто тригонометрия. Вот система уравнений для окружности через тригонометрию:
x = cos(alpha);
y = sin(alpha);

При помощи этой нехитрой системы можно получить любое количество точек на окружности. Ну а из точек на окружности получаем точки на сфере при помощи этой же системы.
 
Я тоже думал типа того. Надо из листа все частицы разом рендерить. А еще лучше удалить майнкрафт и пойти писать игру
 
Dovakin написал(а):
Я тоже думал типа того. Надо из листа все частицы разом рендерить. А еще лучше удалить майнкрафт и пойти писать игру
А есть такой метод?
 
GloomyFolken написал(а):
Код:
public static final int NUM_VERTICAL_SEGMENTS = 20;

private void spawnSphere(float centerX, float centerY, float centerZ){
    for (int vert = 0; vert < NUM_VERTICAL_SEGMENTS; vert++){
           int numHorizontalParticles =  vert < NUM_VERTICAL_SEGMENTS / 2 ? vert * 4 : (NUM_VERTICAL_SEGMENTS - vert)*4;
            for (int hor = 0; hor < numHorizontalParticles; hor++){
                float angleH = (float)hor/numHorizontalParticles * 2 * (float)Math.PI;
                float angleV = (float)vert/NUM_VERTICAL_SEGMENTS * (float)Math.PI - (float)Math.PI/2;
                float particleY = centerY + MathHelper.sin(angleV);
                float particleX = centerX + MathHelper.cos(angleH) * MathHelper.cos(angleV);
                float particleZ = centerZ + MathHelper.sin(angleH) * MathHelper.cos(angleV);
//код для моей либы партиклов, мне лень вспоминать, как спавнить партиклы майна. Перепиши уж.
                TestParticle particle = new TestParticle(this, AnomalyIconList.funnelEyeIcon);
                particle.setPosition(particleX, particleY, particleZ);
                particles.add(particle);
            }
        }
}
h_1426876296_2731243_07a8a42c13.png

P.S: сначала забыл убрать двойку из строки, где вычисляется particleY (была для теста).
Вопрос актуален: как сделать сферу больше?)
 
Код:
public static final int NUM_VERTICAL_SEGMENTS = 20;

private void spawnSphere(float radii, float centerX, float centerY, float centerZ){
    for (int vert = 0; vert < NUM_VERTICAL_SEGMENTS; vert++){
           int numHorizontalParticles =  vert < NUM_VERTICAL_SEGMENTS / 2 ? vert * 4 : (NUM_VERTICAL_SEGMENTS - vert)*4;
            for (int hor = 0; hor < numHorizontalParticles; hor++){
                float angleH = (float)hor/numHorizontalParticles * 2 * (float)Math.PI;
                float angleV = (float)vert/NUM_VERTICAL_SEGMENTS * (float)Math.PI - (float)Math.PI/2;
                float particleY = centerY + MathHelper.sin(angleV) * radii;
                float particleX = centerX + MathHelper.cos(angleH) * MathHelper.cos(angleV) * radii;
                float particleZ = centerZ + MathHelper.sin(angleH) * MathHelper.cos(angleV) * radii;
//код для моей либы партиклов, мне лень вспоминать, как спавнить партиклы майна. Перепиши уж.
                TestParticle particle = new TestParticle(this, AnomalyIconList.funnelEyeIcon);
                particle.setPosition(particleX, particleY, particleZ);
                particles.add(particle);
            }
        }
}
 
Он же сказал, это код для его системы частиц. Переделывай под свой.
 
Это не работает или я дурак. (да, без вопросительного знака)
Хау то фикс ит?
Код:
@SideOnly(Side.CLIENT)
   
   public static final int NUM_VERTICAL_SEGMENTS = 20;
   public void randomDisplayTick(World p_149734_1_, int p_149734_2_, int p_149734_3_, int p_149734_4_, Random p_149734_5_, float radii, float centerX, float centerY, float centerZ) {
         
       for (int vert = 0; vert < NUM_VERTICAL_SEGMENTS; vert++){
           int numHorizontalParticles =  vert < NUM_VERTICAL_SEGMENTS / 2 ? vert * 4 : (NUM_VERTICAL_SEGMENTS - vert)*4;
            for (int hor = 0; hor < numHorizontalParticles; hor++){
                float angleH = (float)hor/numHorizontalParticles * 2 * (float)Math.PI;
                float angleV = (float)vert/NUM_VERTICAL_SEGMENTS * (float)Math.PI - (float)Math.PI/2;
                float particleY = centerY + MathHelper.sin(angleV) * radii;
                float particleX = centerX + MathHelper.cos(angleH) * MathHelper.cos(angleV) * radii;
                float particleZ = centerZ + MathHelper.sin(angleH) * MathHelper.cos(angleV) * radii;
                p_149734_1_.spawnParticle("smoke", particleY, particleX, particleZ, 0.0D, 0.1D, 0.0D);
            }
        }
}
 
Да дядя то дурачок, просто на ночь голова не варит после трудоемкого дня. А метод то вродь как бы вызывается.. Как сделать правильно? :D
 
Код:
@Override
   public void randomDisplayTick(World p_149734_1_, int centerX, int centerY, int centerZ, Random p_149734_5_) {
       float radii = 1;
       final int NUM_VERTICAL_SEGMENTS = 20;
       for (int vert = 0; vert < NUM_VERTICAL_SEGMENTS; vert++) {
           int numHorizontalParticles = vert < NUM_VERTICAL_SEGMENTS / 2 ? vert * 4 : (NUM_VERTICAL_SEGMENTS - vert) * 4;
           for (int hor = 0; hor < numHorizontalParticles; hor++) {
               float angleH = (float) hor / numHorizontalParticles * 2 * (float) Math.PI;
               float angleV = (float) vert / NUM_VERTICAL_SEGMENTS * (float) Math.PI - (float) Math.PI / 2;
               float particleY = centerY + MathHelper.sin(angleV) * radii;
               float particleX = centerX + MathHelper.cos(angleH) * MathHelper.cos(angleV) * radii;
               float particleZ = centerZ + MathHelper.sin(angleH) * MathHelper.cos(angleV) * radii;
               p_149734_1_.spawnParticle("spell", (int) particleX, (int) particleY, (int) particleZ, 0.0D, 0.0D, 0.0D);
               
           }
       }
   }
Данный код делает следующее - 
zdnOA.jpg
 
Назад
Сверху