Ich hoffe wir haben hier ein paar kompetente Javaleute...ich beiss schon in die Tastatur.... folgendes: ich wollte für den Android eine Rubics Cube app entwicklen. es scheitert aber am drehen. Drehe ich eine Bestimmte achse (ich habe zum testen derzeit die z-Achse den vordersten Dreier), so muss ich die einzelnen subwürfel drehen (das klappt) und im array (welches ein array aus 27 cube objekten ist) entsprechend objekte vertauschen, da sie ihre positionen gewechselt haben.
Ich debugge zurzeit, in dem ich nur 3 subwürfel rendere ( das sind die vorderen drei in der ersten zeile). dann sieht man wunderbar drehungen um die z-achse. das witzige daran sind folgende fakten:
1) wenn ich nur die grafik rotiere, klappt es super
2) wenn ich nur im array tausche, sieht es auch super (90° gedreht ohne grafischen aufwand, andere 3 würfel sind die ersten drei im array) aus
wird aber beides nacheinander durchgeführt, würfelt er die positionen der würfel nach dem zweiten mal drehen durcheinander... und sind teilwise an ganz andern plätzen... hier der code:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
public void RotateZ(int index)
{
if (!cubes[0+index*9].inMotion())
{
//0 1 2
//3 4 5
//6 7 8
//2 5 8
//1 4 7
//0 3 6
Cube[] round = new Cube[]
{
cubes[0+index*9],
cubes[1+index*9],
cubes[2+index*9],
cubes[3+index*9],
cubes[4+index*9],
cubes[5+index*9],
cubes[6+index*9],
cubes[7+index*9],
cubes[8+index*9],
};
cubes[0+index*9] = round[2];
cubes[1+index*9] = round[5];
cubes[2+index*9] = round[8];
cubes[3+index*9] = round[1];
cubes[5+index*9] = round[7];
cubes[6+index*9] = round[0];
cubes[7+index*9] = round[3];
cubes[8+index*9] = round[6];
cubes[0+index*9].rotateZ(90);
cubes[1+index*9].rotateZ(90);
cubes[2+index*9].rotateZ(90);
cubes[3+index*9].rotateZ(90);
cubes[4+index*9].rotateZ(90);
cubes[5+index*9].rotateZ(90);
cubes[6+index*9].rotateZ(90);
cubes[7+index*9].rotateZ(90);
cubes[8+index*9].rotateZ(90);
}
}
|
das index kann auf 0 gesetzt werden, es entscheidet nur, welche der 3 reihen auf der aktuellen achse gedreht werden sollen.
irgend jemand eine idee?!