Помогите Спавн партиклов

  • Автор темы Автор темы ilya50
  • Дата начала Дата начала

ilya50

Активный участник
Пользователь
Баллы
76
Как можно заспавнить спираль из партиклов по вектору ? Везде код который спавнит спираль вертикально вверх, но вот как сделать такую же спираль по вектору(player.getLocation().getDirection()) ? Снизу код который спавнит спираль вверх
Код:
            Location loc = event.getPlayer().getLocation();
            double t = 0;
            double r = 2;
            while(t<Math.PI*8){
                t = t + Math.PI/16;
                double x = r*Math.cos(t);
                double y = 0.5*t;
                double z = r*Math.sin(t);
                loc.getWorld().spawnParticle(Particle.FLAME,loc.getX()+x,loc.getY()+y,loc.getZ()+z,1,0,0,0,0,null,true);
            }
 
Такое же как на видео
Ну так в плоскости перпендикулярной вектору вгляда игрока двигай частицу по окружности, а по вектору взгляда - равномерно прямолинейно.
 
Можно пример пожалуйста ?
Тебе уже сказали, что делать, учи тригонометрию и уравнение плоскости, перпендикулярный вектор уже есть (представим, что это вектор с координатами {a, b, c}, так что множество твоих плоскостей будет задаваться уравнением ax+bz+cy+d=0.
 
Тебе уже сказали, что делать, учи тригонометрию и уравнение плоскости, перпендикулярный вектор уже есть (представим, что это вектор с координатами {a, b, c}, так что множество твоих плоскостей будет задаваться уравнением ax+bz+cy+d=0.
После получения уравнения плоскости что делать нужно ?
upload_2019-3-5_18-11-50.png
 
После получения уравнения плоскости что делать нужно ?
Посмотреть вложение 53319
Жестб парниш, ты рофлишь что ли? Уравнение плоскости тебе уже известно, ибо есть вектор взгляда игрока, тебе нужно в этой плоскости двигать точку по окружности, а через d регулировать уже движение по вектору взгляда.
За тебя никто не напишет, если ты скипал в школе математику, то только твои траблы, полный алгоритм тебе уже сказали.
 
Напишу для тех кому нужно будет
PHP:
protected void doShoot() {
 Location location = player.getEyeLocation()
 Vector v = location.getDirection().normalize().multiply(0.2);
 for (double i = 0; i < 40; i += 0.1) {
  location.add(v);
  double x = Math.cos(i);
  double z = Math.sin(i);
  Vector local = new Vector(x, 0, z);
  local = rotateVector(local, location.getYaw(), location.getPitch() + 90);
  location.getWorld().spawnParticle(Particle.FLAME, location.getX() + local.getX(), location.getY() + local.getY(), location.getZ() + local.getZ(), 1, 0, 0, 0, 0, null, true);
 }
}
public static Vector rotateVector(Vector v, float yawDegrees, float pitchDegrees) {
 double yaw = Math.toRadians(-1 * (yawDegrees + 90));
 double pitch = Math.toRadians(-pitchDegrees);

 double cosYaw = Math.cos(yaw);
 double cosPitch = Math.cos(pitch);
 double sinYaw = Math.sin(yaw);
 double sinPitch = Math.sin(pitch);

 double initialX, initialY, initialZ;
 double x, y, z;

 // Z_Axis rotation (Pitch)
 initialX = v.getX();
 initialY = v.getY();
 x = initialX * cosPitch - initialY * sinPitch;
 y = initialX * sinPitch + initialY * cosPitch;

 // Y_Axis rotation (Yaw)
 initialZ = v.getZ();
 initialX = x;
 z = initialZ * cosYaw - initialX * sinYaw;
 x = initialZ * sinYaw + initialX * cosYaw;

 return new Vector(x, y, z);
}
 
Напишу для тех кому нужно будет
PHP:
protected void doShoot() {
 Location location = player.getEyeLocation()
 Vector v = location.getDirection().normalize().multiply(0.2);
 for (double i = 0; i < 40; i += 0.1) {
  location.add(v);
  double x = Math.cos(i);
  double z = Math.sin(i);
  Vector local = new Vector(x, 0, z);
  local = rotateVector(local, location.getYaw(), location.getPitch() + 90);
  location.getWorld().spawnParticle(Particle.FLAME, location.getX() + local.getX(), location.getY() + local.getY(), location.getZ() + local.getZ(), 1, 0, 0, 0, 0, null, true);
 }
}
public static Vector rotateVector(Vector v, float yawDegrees, float pitchDegrees) {
 double yaw = Math.toRadians(-1 * (yawDegrees + 90));
 double pitch = Math.toRadians(-pitchDegrees);

 double cosYaw = Math.cos(yaw);
 double cosPitch = Math.cos(pitch);
 double sinYaw = Math.sin(yaw);
 double sinPitch = Math.sin(pitch);

 double initialX, initialY, initialZ;
 double x, y, z;

 // Z_Axis rotation (Pitch)
 initialX = v.getX();
 initialY = v.getY();
 x = initialX * cosPitch - initialY * sinPitch;
 y = initialX * sinPitch + initialY * cosPitch;

 // Y_Axis rotation (Yaw)
 initialZ = v.getZ();
 initialX = x;
 z = initialZ * cosYaw - initialX * sinYaw;
 x = initialZ * sinYaw + initialX * cosYaw;

 return new Vector(x, y, z);
}
Хрень какую-то нашел на spigotmc, тебе написали намного более простой способ.
 
Назад
Верх