Как изменить свойства объекта из списка массивов? - PullRequest
0 голосов
/ 18 марта 2012

По сути, я создаю шутер сверху вниз в java, и для маркеров есть объект маркера со всеми свойствами, методами обновления и прочим. Я решил использовать список массивов для хранения маркеров после нажатия мыши и создания экземпляра объекта. Проблема в том, что я не знаю, как идентифицировать элементы в списке массивов. Вот фрагмент кода, когда я использовал простой массив:

addMouseListener(new MouseAdapter(){
    public void mousePressed(MouseEvent e){
        pressedX = e.getX();
        pressedY = e.getY();


        bullets[bulletCount] = new Bullet(player.x, player.y));
        double angle = Math.atan2((pressedY - player.y),(pressedX - player.x));
    bullets[bulletCount].dx = Math.cos(angle)*5;
    bullets[bulletCount].dy = Math.sin(angle)*5;
    bulletCount++;  


    }

Любая помощь очень ценится! Заранее спасибо!

1 Ответ

3 голосов
/ 18 марта 2012

Вы можете просто изменить что-нибудь вроде этого:

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));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...