1

因此,我正在创建一个简单的游戏,您可以在其中扮演白星通过与它们碰撞来攻击鬼魂,如果它是不朽的鬼魂,则您的粒子轨迹会变短或重置(如代码中所示)我的问题是与粒子轨迹似乎无法正常工作,它只有在幽灵击中它的尾端时才会发生碰撞,当它应该在尾部的任何地方而不是头部时发生碰撞,并且当它确实击中尾端时,即使我从列表中删除幽灵,它似乎不止一次地运行计算,例如,你看到 `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);
}

这是应用程序的图片:

我的应用程序

4

0 回答 0