Вот мой вариант.

Работает как часы.

Код AS3:
package
{
import flash.display.Sprite;
import flash.display.Stage;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class Cube extends Sprite
{
private var cubeFaces:Array = new Array();
private var mainStage:Stage;
public function Cube(mainStage:Stage)
{
this.mainStage = mainStage;
init();
}
private function init() : void
{
cubeFaces['face'] = 1;
cubeFaces['back'] = 6;
cubeFaces['left'] = 4;
cubeFaces['right'] = 3;
cubeFaces['top'] = 5;
cubeFaces['bottom'] = 2;
traceCube();
mainStage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyPressed);
}
private function onKeyPressed(e: KeyboardEvent) : void
{
var keyPressed:String;
switch(e.keyCode)
{
case Keyboard.LEFT : // сдвиг face->left->back->right
faceShifter("face->left->back->right");
keyPressed = "LEFT";
break;
case Keyboard.RIGHT : // сдвиг face->right->back->left
faceShifter("face->right->back->left");
keyPressed = "RIGHT";
break;
case Keyboard.UP : // сдвиг face->top->back->bottom
faceShifter("face->top->back->bottom");
keyPressed = "UP";
break;
case Keyboard.DOWN : // сдвиг face->bottom->back->top
faceShifter("face->bottom->back->top");
keyPressed = "DOWN";
break;
}
if (keyPressed)
{
trace("keyPressed:", keyPressed);
traceCube();
}
}
private function faceShifter(shiftRule:String) : void
{
var facesForShift:Array = shiftRule.split("->");
var savingFace:int = cubeFaces[facesForShift[3]];
for (var i:int = 2; i > -1; i--)
{
cubeFaces[facesForShift[i+1]] = cubeFaces[facesForShift[i]];
}
cubeFaces[facesForShift[0]] = savingFace;
}
private function traceCube() : void
{
trace(" ", cubeFaces["top"], " ");
trace(cubeFaces["left"], cubeFaces["face"], cubeFaces["right"]);
trace(" ", cubeFaces["bottom"], " ");
trace(" ", cubeFaces["back"], " ");
}
}
}