我正在使用粒子效果,它会转到您点击的位置并且不会停止。当我点击某个地方时,粒子会相应地移动。然而,当我再次点击时,粒子开始越来越快地通过它的效果,我完全难以理解为什么。我假设它在SpellParent类中,因为它发生在所有法术中,并且现在所有法术通常与父级相同。这是父级法术课
public SpellParent(Player player, float x, float y, float scalar){
this.player = player;
this.position = new Vector2(player.getHandPosition().x, player.getHandPosition().y);
this.destination = new Vector2(x, y);
this.isAlive = true;
this.gridPosition = new Vector2();
particle = new ParticleEffect();
emitter = new ParticleEmitter();
emitter.setName("asshole");
}
@Override
public void update() {
particle.update(Gdx.graphics.getDeltaTime());
if(particle.isComplete())
particle.reset();
particle.setPosition(position.x, position.y);
//particle.getEmitters().first().setPosition(position.x, position.y);
if(position.x >= destination.x - 1 && position.x <= destination.x + 1)
reachedX = true;
if(position.y >= destination.y - 1 && position.y <= destination.y + 1)
reachedY = true;
if(!reachedX){
if(position.x < destination.x){
velocity.x = 1f;
}
else if(position.x > destination.x){
velocity.x = -1f;
}
}
if(!reachedY){
if(position.y < destination.y){
velocity.y = 1f;
}
else if(position.y > destination.y){
velocity.y = -1f;
}
}
if(reachedX && reachedY){
startBehavior();
}else if(reachedY){
velocity.y = 0;
}else if(reachedX){
velocity.x = 0;
}
position.x += velocity.x;
position.y += velocity.y;
gridPosition.x = position.x / MapGrid.CELL_SIZE;
gridPosition.y = position.y / MapGrid.CELL_SIZE;
}
@Override
public void render(SpriteBatch batch) {
//if(isAlive)
//emitter.draw(batch);
particle.draw(batch);
batch.draw(TextureTuples.dirt, position.x, position.y, 10, 10);
}
这里是输入监听器,用于查看它的调用方式
@Override
public boolean keyDown(int keycode) {
if(keycode == Keys.NUM_1){
referenceSpell = new FlameSpell(player, tmp.x, tmp.y, .2f);
}
if(keycode == Keys.NUM_2){
referenceSpell = new HealthRingSpell(player, tmp.x, tmp.y, .2f);
}
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
tmp.x = screenX;
tmp.y = screenY;
tmp.z = 0;
cam.unproject(tmp);
stage.addSpell(referenceSpell);
stageSpells.add(referenceSpell);
grid.checkAndDestroy(new Vector2(tmp.x, tmp.y));
return false;
}
这里只是澄清一个例子。我的健康戒指是一个蓝色的戒指,从一个小戒指变成一个大戒指,因此它的大小是脉动的。但是,如果我再次点击它会开始更快,更快,更快地进行大小更改。随着射击的火焰法术,它的x速度将在多次点击时非常快。非常感谢任何帮助
答案 0 :(得分:1)
好吧,不要使用旧粒子,而是创建一个新粒子。新FlameSpell/HelthRingSpell
。最好使用pool
。 (Take a look here)
此外,每次触摸都不要将法术添加到舞台上。 (2次添加=快2倍,因为它获得加倍的更新调用)所以确保如果你点击10次它会快10倍。如果您更新两个阶段,则法术会更新两次。因此,在这种情况下,一个新法术获得2x更新。再次推动其4倍更新是6倍更新等等。如果我做对了。
但我不确定Stage meight是否检查引用是否已经在舞台上。
但总的来说,如果你将referenceSpell
添加到舞台上,如果你设置了对新法术的引用,则无需在调用新法术后再添加它。
所以一切都很好,只是不在touchDown
上阅读。只需在启动时添加referenceSpell
并在keyDown
上设置对法术的引用。
@Override
public boolean keyDown(int keycode) {
if (keycode == Keys.NUM_1) {
referenceSpell = new FlameSpell(player, tmp.x, tmp.y, .2f);
}
if (keycode == Keys.NUM_2) {
referenceSpell = new HealthRingSpell(player, tmp.x, tmp.y, .2f);
}
}
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
tmp.x = screenX;
tmp.y = screenY;
tmp.z = 0;
cam.unproject(tmp);
//stage.addSpell(referenceSpell); //already added in ctor
//stageSpells.add(referenceSpell);
grid.checkAndDestroy(new Vector2(tmp.x, tmp.y));
return false;
}