粒子不按我想要的方式进行?

时间:2015-12-15 00:34:23

标签: math bukkit pi sine cosine

好的,所以,我创造了这种很酷的粒子效果。但是,它不会以我想要的方式产生粒子或者将实体置于火上。事实证明,我传送自己去看问题是什么,当然 - 它根本不是正确的方向!

所以,我需要一些数学方面的帮助,因为我显然在某处出错了。 (因为我的θ错了,任务永远不会停止)提前谢谢!

https://sendvid.com/pbgq02as

    public void run(PlayerInteractEvent e) {
          final Player player = e.getPlayer();
          final World w = player.getWorld();
          new BukkitRunnable(){
                  double t = Math.PI/4;
                  Location loc = player.getLocation();
                  public void run(){
                          t = t + 0.1*Math.PI;
                          for (double theta = 0; theta <= 2*Math.PI; theta = theta + Math.PI/32){
                                  double x = t*Math.cos(theta);
                                  double y = 2*Math.exp(-0.1*t) * Math.sin(t) + 1.5;
                                  double z = t*Math.sin(theta);
                                  loc.add(x,y,z);
                                  List<Entity> near = loc.getWorld().getEntities();
                                  w.playSound(loc, Sound.GHAST_FIREBALL, 1, 1);
                                  ParticleEffect.FLAME.display(0, 0, 0, 0, 0, loc, 1);
                                  for (Entity en : near) {
                                      if(en.getLocation().distance(loc) <= 1.0) {
                                          if (!en.equals(player)) {
                                              en.setFireTicks(20*5);
                                          }
                                      }
                                  }
                                  loc.subtract(x,y,z);

                                  theta = theta + Math.PI/64;

                                  x = t*Math.cos(theta);
                                  y = 2*Math.exp(-0.1*t) * Math.sin(t) + 1.5;
                                  z = t*Math.sin(theta);
                                  loc.add(x,y,z);
                                  ParticleEffect.FLAME.display(0, 0, 0, 0, 1, loc, 1);
                                  for (Entity en : near) {
                                      if(en.getLocation().distance(loc) <= 1.0) {
                                          if (!en.equals(player)) {
                                              en.setFireTicks(20*5);
                                          }
                                      }
                                  }
                                  loc.subtract(x,y,z);
                          }
                          if (t > 20){
                                  this.cancel();
                          }
                  }

          }.runTaskTimer(MagicBattle.getPlugin(), 0, 1);
    }

有趣。我调试了我的theta,这些是我在粒子停止之前得到的值:http://pastebin.com/gSPnfus7

0 个答案:

没有答案