gpt4 book ai didi

java - 如何从 LinkedList 的对象访问 getter

转载 作者:行者123 更新时间:2023-12-02 05:35:38 25 4
gpt4 key购买 nike

以下场景:
类(class):

GamePlayScene(游戏逻辑和碰撞检测)
Obstacle(具有 Rect getObstacleBounds() 方法来返回边界)
ObstacleManager(具有障碍物对象的 LinkedList)

我想访问障碍物的边界(android.Rect)。所有障碍物都将存储到一个 LinkedList 中。

现在在运行的游戏中,我想访问我的 GameplayScene 类中的 getObstacleBounds() 方法,但问题是我无法直接访问障碍物对象,但显然我必须循环访问所有障碍物对象我的 ObstacleManager 中 LinkedList 中的对象。

因此,我认为我还必须在障碍物管理器中实现 Rect getObstacleBounds(),从那里我循环遍历列表中的每个障碍物并返回该 Rect。

这是正确的方法吗?我对访问 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?
}

最佳答案

最后,取决于您想在 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;
}

有多种方法可以实现您想要的目标。有些比其他更好等等最终取决于你到底想做什么。

关于java - 如何从 LinkedList 的对象访问 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56169028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com