因此,我正在创建一个简单的游戏,您可以在其中扮演白星通过与它们碰撞来攻击鬼魂,如果它是不朽的鬼魂,则您的粒子轨迹会变短或重置(如代码中所示)我的问题是与粒子轨迹似乎无法正常工作,它只有在幽灵击中它的尾端时才会发生碰撞,当它应该在尾部的任何地方而不是头部时发生碰撞,并且当它确实击中尾端时,即使我从列表中删除幽灵,它似乎不止一次地运行计算,例如,你看到 `score += 5' 而不是添加了 100 到 500 之间的任何地方。
for (int i = 0; i < EntityHandler.getEnemies().size(); i++) {
Enemy e = EntityHandler.getEnemies().get(i);
if (collidesWith(e)) {
if (e.getType() == GHOST_IMMORTAL) {
trailLife = 100;
score -= 100;
} else {
score += 15;
trailLife -= 5;
}
EntityHandler.removeEnemy(e);
}
for (int k = 0; k < trails.size(); k++) {
ParticleTrail pt = trails.get(i);
if (pt.intersects(e.getBounds())) {
if (e.getType() == GHOST_IMMORTAL) {
trailLife += 20;
score -= 20; //instead takes away 500 if at tail end, else it doesnt do anything
} else score += 5; //instead adds 200-500 if at tail end, else nothing happens
EntityHandler.removeEnemy(e);
}
}
}
至于粒子轨迹是如何创建的,如果与它有关:
@Override
public void tick() {
if (alpha > speed) alpha -= speed;
else dead = true;
}
@Override
public void render(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setComposite(Util.makeTransparent(alpha));
g.setColor(color);
drawShape(g); //Renderer.fillStar(g, (int) x, (int) y, PLAYER_PRONG_RADIUS, radius, PLAYER_PRONGS);
//Renderer.fillRegularPolygon(g, (int) x, (int) y, radius, PLAYER_SIDES);
g2d.setComposite(Util.makeTransparent(ALPHA_VISIBLE));
}
这是我创建的“Util”类中的透明制作方法:
public static AlphaComposite makeTransparent(float alpha) {
int type = AlphaComposite.SRC_OVER;
return AlphaComposite.getInstance(type, alpha);
}
这是应用程序的图片: