好的,所以,我创造了这种很酷的粒子效果。但是,它不会以我想要的方式产生粒子或者将实体置于火上。事实证明,我传送自己去看问题是什么,当然 - 它根本不是正确的方向!
所以,我需要一些数学方面的帮助,因为我显然在某处出错了。 (因为我的θ错了,任务永远不会停止)提前谢谢!
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