我正在爲Android設計一款遊戲。通過存儲RGBA值的ColorTheme對象設置遊戲元素的顏色。 在初始化例如ColorTheme對象之外的RGBA值的三角形被傳遞給構造函數。 儘管ColorTheme-Object中的顏色在初始化後不會改變,但三角形的顏色確實如此。我試圖找出原因。 我注意到它可以像我想要的那樣工作,如果我使用ColorTheme數組中的元素傳遞一個新數組而不是將ColorTheme對象本身傳遞給三角形構造函數。這真的沒有關係,因爲沒有Java中的指針(對吧?)。傳遞現有數組給出的結果不同於傳遞具有數組元素的新數組
@Override
public void onSurfaceChanged(GL10 gl10, int width, int height) {
//...
mThemes = new ColorTheme[]{
new ColorTheme(
new float[]{0.20f, 0.71f, 0.91f, 1.00f}, // blue circle
new float[]{1.00f, 1.00f, 1.00f, 1.00f}, // white obstacle
new float[]{1.00f, 1.00f, 1.00f, 1.00f}, // white triangle
new float[]{0.00f, 0.60f, 0.80f, 1.00f} // shadow
),
new ColorTheme(
new float[]{0.27f, 0.40f, 0.80f, 1.00f}, // purple circle
new float[]{1.00f, 1.00f, 1.00f, 1.00f}, // white obstacle
new float[]{1.00f, 1.00f, 1.00f, 1.00f}, // white triangle
new float[]{0.60f, 0.20f, 0.80f, 1.00f} // shadow
),
new ColorTheme(
new float[]{0.60f, 0.80f, 0.00f, 1.00f}, // green circle
new float[]{1.00f, 1.00f, 1.00f, 1.00f}, // white obstacle
new float[]{1.00f, 1.00f, 1.00f, 1.00f}, // white triangle
new float[]{0.40f, 0.60f, 0.00f, 1.00f} // shadow
)
};
//...
// Values keep changing after initialization like this
mShadowTriangle = new Triangle(mScreenRatio, mThemes[outerThemeIndex].theme[3],true);
// They don't like this
mShadowTriangle = new Triangle(mScreenRatio, new float[]{mThemes[outerThemeIndex].theme[3][0],mThemes[outerThemeIndex].theme[3][1],mThemes[outerThemeIndex].theme[3][2],mThemes[outerThemeIndex].theme[3][3]},true);
}