Вы можете просто изменить что-нибудь вроде этого:
bullets[index].foo
до
bullets.get(index).foo
Однако, в коде, который вы дали, мы можем сделать лучше.
Итак:
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
int pressedX = e.getX();
int pressedY = e.getY();
Bullet bullet = new Bullet(player.x, player.y);
double angle = Math.atan2((pressedY - player.y), (pressedX - player.x));
bullet.dx = Math.cos(angle)*5;
bullet.dy = Math.sin(angle)*5;
bullets.add(bullet);
}
}
Теперь он все еще напрямую обращается к полям в пуле, что для меня не очень хорошая идея. Я хотел бы предложить, чтобы вы либо использовали свойства для dx
и dy
- или, возможно, single свойство, принимающее Velocity
(которое в основном было бы вектором dx и dy) - или вы делаете это часть конструктора:
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
// Again, ideally don't access variables directly
Point playerPosition = new Point(player.x, player.y);
Point touched = new Point(e.getX(), e.getY());
// You'd need to put this somewhere else if you use an existing Point
// type.
double angle = touched.getAngleTowards(playerPosition);
// This method would have all the trigonometry.
Velocity velocity = Velocity.fromAngleAndSpeed(angle, 5);
bullets.add(new Bullet(playerPosition, velocity));
}
}