1

だから私は、ゴーストと衝突して攻撃する白い星としてプレイする単純なゲームを作成しています。不滅のゴーストの場合、粒子の軌跡が短くなるかリセットされます(コードに見られるように)私の問題は、パーティクルの軌跡が適切に機能していないようです。ゴーストが尾の端にぶつかった場合にのみ衝突し、頭以外の尾のどこでも衝突するはずですが、尾の端に衝突した場合にのみ衝突します。リストからゴーストを削除すると、計算が複数回実行されるように見えます。

        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