Ссылка на индексированные массивы
Возможный дубликат:
Проверка по индексированным массивам
Итак, у меня есть мой код, каждый раз, когда мышь нажимается, он рисует новую частицу в 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;
}
}
2 ответа
Вы можете использовать координаты в качестве хеша и сохранять точки в HashSet, просто перегрузите хеш-функцию Point чем-то вроде x*y
Вы можете написать новый метод, который проверяет, находится ли точка в массиве с индексом меньше, чем "Индекс".
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, чтобы избежать добавления точки к массиву в первую очередь, если он является дубликатом.
Удачи!