Как получить доступ к геттеру из объекта LinkedList - PullRequest
0 голосов
/ 16 мая 2019

следующий сценарий:Классы:

GamePlayScene (логика игры и обнаружение столкновений) Obstacle (имеет метод Rect getObstacleBounds () для возврата Bounds) ObstacleManager (имеет LinkedList объектов препятствий)

Я хочу получить доступ к границам (android.Rect) препятствия.Все препятствия будут сохранены в LinkedList.

Теперь в запущенной игре я хочу получить доступ к методу getObstacleBounds () в моем GameplayScene Class , но проблема в том, что я не могу получить доступ кобъект-препятствие напрямую, но мне, очевидно, приходится циклически перебирать все мои объекты в LinkedList в моем ObstacleManager.

В связи с этим я подумал, что мне нужно также реализовать Rect getObstacleBounds () в моем диспетчере препятствий, откуда я циклически повторяючерез каждое препятствие в моем Списке и верните этот Рект.

Это правильный способ сделать это?Я довольно новичок в доступе к объектам и их методам в LinkedList

Если нет: Как бы я реализовал доступ к таким методам?

Вот моя идея, что я считаю холодной работой / правильнымпуть.(Не компилируется, более или менее псевдокод)

GameplayScene.java

private ObstacleManager obstacleManager;

public GameplayScene() {

  obstacleManager = new ObstacleManager();
  obstacleManager.addObstacle(new Obstacle(...));
}

public void hitDetection() {
//get the Boundaries of obstacle(s) for collision detection
}

Obstacle.java

//...
public Rect getObstacleBounds() {
   return obstacleBounds;
}

ObstacleManager.java

LinkedList<Obstacle> obstacles = new LinkedList<>();

public void update() { //example method 
    for (Obstacle o : obstacles){
        o.update();
    }
}

public Rect getObjectBounds() {
   return ...
   //how do I cycle through my objects and return each Bounds Rect?
}

1 Ответ

0 голосов
/ 16 мая 2019

В конце концов, зависит от того, что вы хотите сделать в hitDetection

Если вы просто хотите проверить, произошло ли попадание

В этом случаевы можете просто получить список Rect и проверить, произошел ли какой-либо удар

GameplayScene.java

public void hitDetection() {
    ArrayList<Rect> listOfBounds = obstacleManager.getObstacleBounds();
    for(Rect bound : listOfBounds) {
        // Do you stuff
        // Note the here, you are receiving a list of Rects only.
        // So, you can only check if a hit happened.. but you can't update the Obstacles because here, you don't have access to them.
        // Nothing stops you of receiving the whole list of items if you want to(like the reference of ObstacleManager.obstacles).
    }
}

ObstacleManager.java

    public ArrayList<Rect> getObjectBounds() {
        // You can also return just an array.. like Rect[] listToReturn etc
        ArrayList<Rect> listToReturn = new ArrayList(obstacles.size());
        for (Obstacle item : obstacles) {
            listToReturn.add(item.getObjectBounds);
        }
        return listToReturn;
    }

Есливам нужно обновить некоторую информацию о препятствии, которое было достигнуто

В этом случае вы можете передать логику hitDetection вам ObstacleManager (я предполагаю, что вы проверяете координаты X и Y, чтобы проверить, было ли препятствиехит):

GameplayScene.java

public void hitDetection(int touchX, int touchY) {
    Obstacle objectHit = obstacleManager.getObstacleTouched(int touchX, int touchY);
    if (objectHit != null) {
        objectHit.doStuffAlpha();
        objectHit.doStuffBeta();
    } else {
        // No obstacle was hit.. Nothing to do
    }
}

ObstacleManager.java

public Obstacle getObstacleTouched(int touchX, int touchY) {
    Obstacle obstacleToReturn = null;
    for (Obstacle item : obstacles) {
        if(item.wasHit(touchX, touchY) {
            obstacleToReturn = item;
            break;
        }
    }
    return listToReturn;
}

Есть несколько способов достичь того, что вы хотите.Одни лучше других и т. Д. В конце концов, зависит от того, что именно вы хотите сделать.

...