0

重複の可能性:
インデックス付き配列に対するチェック

マウスが押されるたびに、mouseX と mouseY に新しいパーティクルを描画し、その位置を配列に格納して、画面の下部に到達したときに停止するように指示されるまで更新できるようにします。私がやりたいことは、現在の位置を既に「作成された」粒子の位置と照合し、同じ座標を持っている場合はすぐに停止させて、スタック効果を与えることです。誰かが私を助けてくれますか?

    import java.awt.Point;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;

public class Control extends BasicGameState {
    public static final int ID = 1;

    public Methods m = new Methods();
    public Point[] point = new Point[(800 * 600)];

    int pressedX;
    int pressedY;
    int num = 0;
    String Build = "1.1";

    public void init(GameContainer container, StateBasedGame game) throws SlickException{
    }

    public void render(GameContainer container, StateBasedGame game, Graphics g) throws SlickException {
        for (int index = 0; index < point.length; index++) {
            Point p = point[index];
            if (p != null) {
                if (p.y >= 598) {
                    m.drawParticle(point[index].x,(point[index].y));
                } else {
                    m.drawParticle(p.x, p.y);
                    p.y++;
                }
            }
        }
        g.drawString("Particle Test", 680, 0);
        g.drawString("Build: " + Build, 680, 15);
        g.drawString("Pixels: " + num, 10, 25);
    }

    public void update(GameContainer container, StateBasedGame game, int delta) {
    }

    public void mousePressed(int button, int x, int y) {
        pressedX = x;
        pressedY = y;
        num = num + 1;
        point[num] = new Point(pressedX, pressedY);
        }

    public int getID() {
        return ID;
    }

}
4

2 に答える 2

2

座標をハッシュとして使用し、ポイントを HashSet に格納できます。Point のハッシュ関数を x*y のようなものでオーバーロードするだけです。

于 2012-10-09T00:27:41.230 に答える
0

ポイントが「Index」未満のインデックスで配列内にあるかどうかを確認する新しいメソッドを作成できます。

public boolean isInArray(int index)
{
    for (int index2 = 0; index2 < index; index2++)
    {
        if( (point[index2].x == point[index].x) &&
            (point[index2].y == point[index].y) )
        {
            return true;    //point(index) is previously in array
        }
    }
    return false;    //point(index) is NOT previously in array
}

次に、for..next ループで、break ステートメントを使用する必要があります。

if (isInArray(index))
{
    //the break statement causes the program to exit the current loop
    break;
}

ただし、MousePressed メソッドでテストして、重複している場合に最初にポイントを配列に追加しないようにすることをお勧めします。

幸運を!

于 2012-10-09T01:39:35.950 に答える