updateMasterGrid() 메서드에서 첫 번째로 c.getBall에서 값을 표시하고 있습니다. 소스배열 목록 값이 변경되지 않아도 변경됩니다.
2 내가 mastergrid하는 quadCellGrid의 값을 할당 한 후
나는 c.getBall.Source를 표시하고 위를 quadCellGrid ArrayList를
을 mastergrid하는 quadCellGrid의 값을 할당하고 quadCellGrid의 ArrayList에게 있습니다. quadCellGrid에서 값의 변화를 볼 수 있습니다. logcat 출력을 확인하십시오.
해결 방법을 알려주십시오.
public class BurstBalls {
private boolean Q1Match,Q2Match,Q3Match,Q4Match;
private Texture RED_BALL;
private Texture BURST_STAR;
private List<CellGrid> masterGrid;
private List<CellGrid> quadCellGrid = new ArrayList<CellGrid>();
private List<CellGrid> burstCellGrid = new ArrayList<CellGrid>();
private SpriteBatch batch;
private float scaleXY = 0.1f;
private int Q1Moves[][] = { { 0, 0 },{ -1, 0 }, { 0, 1 }, { -1, 1 } };
private int Q2Moves[][] = { { 0, 0 },{ 1, 0 }, { 0, 1 }, { 1, 1 } };
private int Q3Moves[][] = { { 0, 0 },{ 1, 0 }, { 0,-1 }, { 1,-1 } };
private int Q4Moves[][] = { { 0, 0 },{ -1, 0 }, { 0,-1 }, { -1,-1 } };
public BurstBalls() {
setGameTextures();
}
public void draw(SpriteBatch sb){
batch=sb;
if(!burstCellGrid.isEmpty()){
showImageZoom1(BURST_STAR, burstCellGrid.get(0).getColCoordinate()/2, burstCellGrid.get(0).getRowCoordinate()/2);
}
}
private void showImageZoom1(Texture t, int x, int y) {
scaleXY = scaleXY + 0.05f;
if (scaleXY >= 1.0){
//burstCellGrid.clear();
scaleXY = 1.0f;
}
Sprite s = new Sprite(t);
s.setPosition(x, y);
s.setScale(scaleXY);
s.draw(batch);
}
public List<CellGrid> getMatchBallCells(int row, int col, Ball b, List<CellGrid> mGrid){
this.masterGrid=mGrid;
Q1Match=false;
Q2Match=false;
Q3Match=false;
Q4Match=false;
quadCellGrid.clear();
burstCellGrid.clear();
if(row<(MainGame.ROW-1) && col >0){
Q1Match = checkCells(b, row,col, Q1Moves);
System.out.println("Q1Match : " + Q1Match);
}
if(row<(MainGame.ROW-1) && col < (MainGame.COL-1)){
Q2Match = checkCells(b,row,col, Q2Moves);
System.out.println("Q2Match : " + Q2Match);
}
if(row>0 && col< (MainGame.COL-1)){
Q3Match = checkCells(b, row,col, Q3Moves);
System.out.println("Q3Match : " + Q3Match);
}
if(row>0 && col > 0){
Q4Match = checkCells(b, row,col, Q4Moves);
System.out.println("Q4Match : " + Q4Match);
}
if(Q1Match || Q2Match || Q3Match || Q4Match){
updateMasterGrid();
}
for (CellGrid c : burstCellGrid) {
if(c.getBall()!=null){
System.out.println("!Burst Cells - (c.getRow(),c.getCol) - " + "(" + c.getRow() +","+c.getCol() +")");
}
}
return masterGrid;
}
private void updateMasterGrid() {
for(CellGrid c: quadCellGrid){
System.out.println(" Before quadCellGrid.ball " + c.getBall());
masterGrid.get(masterGrid.indexOf(c)).setBall(null);
System.out.println(" After quadCellGrid.ball " + c.getBall());
}
}
private boolean checkCells(Ball actionBall,int row,int col,int moves[][]) {
boolean firstCell = false,secondCell = false,thirdCell = false,fourthCell = false;
CellGrid cellGrid=checkIfBallThere(row+moves[0][1],col+moves[0][0]);
firstCell = checkBall(cellGrid,actionBall);
cellGrid=checkIfBallThere(row+moves[1][1],col+moves[1][0]);
secondCell = checkBall(cellGrid,actionBall);
cellGrid=checkIfBallThere(row+moves[2][1],col+moves[2][0]);
thirdCell = checkBall(cellGrid,actionBall);
cellGrid=checkIfBallThere(row+moves[3][1],col+moves[3][0]);
fourthCell = checkBall(cellGrid,actionBall);
if(firstCell && secondCell && thirdCell && fourthCell){
return true;
}
return false;
}
private boolean checkBall(CellGrid c, Ball actionBall) {
if(c!=null && c.getBall().getTexture().equals(actionBall.getTexture())){
if (!quadCellGrid.contains(c)){
quadCellGrid.add(c);
}
return true;
}
return false;
}
public CellGrid checkIfBallThere(int cellRow, int cellCol) {
for (CellGrid c : masterGrid) {
if (c.getRow() == cellRow && c.getCol() == cellCol
&& c.getBall() != null) {
return c;
}
}
return null;
}
private void setGameTextures() {
RED_BALL = Texturemanager.RED_BALL;
RED_BALL.setFilter(TextureFilter.Linear, TextureFilter.Linear);
BURST_STAR = Texturemanager.BURST_STAR;
BURST_STAR.setFilter(TextureFilter.Linear, TextureFilter.Linear);
}
}
로그 캣
Before quadCellGrid.ball [email protected]
After quadCellGrid.ball null
Before quadCellGrid.ball [email protected]
After quadCellGrid.ball null
Before quadCellGrid.ball [email protected]
After quadCellGrid.ball null
Before quadCellGrid.ball [email protected]
After quadCellGrid.ball null
문제를 설명하는 데 필요한 최소한의 코드를 편집하십시오. 여기에는 많은 관련성이없는 코드가 있으므로 다른 사용자에게 유용하지는 않습니다. [SSCCE] (http://sscce.org) – Bohemian
참고 두 셀 목록에 같은 셀을 넣었을 것입니다. – immibis