|
|
|||||
Регистрация: Nov 2009
Сообщений: 176
|
узнать грань игральной кости
Приветствую!
Есть игральная кость на 2д плоскости. И стрелки управления: вверх, вниз, влево, вправо. При клике на стрелку кость перекручивается в соответствующую сторону. Как узнать какую грань показывать? |
|
|||||
я бы сделал так
кубик у меня такой import flash.ui.Keyboard; import flash.events.KeyboardEvent; var cub : Array = [[3,1,4,2],[0,5,4,2],[3,1,0,5],[5,0,4,2],[3,1,5,0],[1,3,2,4]]; var cubFace : int = 0; stage.addEventListener(KeyboardEvent.KEY_DOWN, onKD); function onKD (e: KeyboardEvent) : void { if(e.keyCode == Keyboard.LEFT){ cubFace = cub[cubFace][0]; } if(e.keyCode == Keyboard.RIGHT){ cubFace = cub[cubFace][1]; } if(e.keyCode == Keyboard.UP){ cubFace = cub[cubFace][2]; } if(e.keyCode == Keyboard.DOWN){ cubFace = cub[cubFace][3]; } trace('cubFace:'+ (cubFace + 1)); } |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
MoHaX, а ничего, что кубик поворачивается? Что под клавишу Up может попасть любая из четырех прилегающих сторон?
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2009
Сообщений: 176
|
а как же быть тогда?
|
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Хранить текущее состояние кубика?
|
|
|||||
Регистрация: Nov 2009
Сообщений: 176
|
Делаю так.
private var combination= [[0, 4, 0, 0], [2, 1, 5, 6], [0, 3, 0, 0], [0, 6, 0, 0]]; public function changeDice(direct:String):void { var vertical:Array = [combination[0][1], combination[1][1], combination[2][1], combination[3][1]]; var horizontal:Array = [combination[1][0], combination[1][1], combination[1][2], combination[1][3]]; var index:int; if(direct == "up") { content.gotoAndStop(combination[2][1]); index = combination[0][1]; combination[0][1] = vertical[1]; combination[1][1] = vertical[2]; combination[2][1] = vertical[3]; combination[3][1] = vertical[0]; combination[1][3] = index; } if(direct == "down") { content.gotoAndStop(combination[0][1]); index = combination[2][1]; combination[0][1] = vertical[3]; combination[1][1] = vertical[0]; combination[2][1] = vertical[1]; combination[3][1] = vertical[2]; combination[1][3] = index; } if(direct == "right") { content.gotoAndStop(combination[1][0]); index = combination[1][2]; combination[1][0] = horizontal[3]; combination[1][1] = horizontal[0]; combination[1][2] = horizontal[1]; combination[1][3] = horizontal[2]; combination[1][3] = index; } if(direct == "left") { content.gotoAndStop(combination[1][2]); index = combination[1][0]; combination[1][0] = horizontal[1]; combination[1][1] = horizontal[2]; combination[1][2] = horizontal[3]; combination[1][3] = horizontal[0]; combination[3][1] = index; } } |
|
|||||
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Вот мой вариант.
Работает как часы. 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"], " "); } } } |
|
|||||
ну не сложно дописать для каждого угла поворота как брать стороны из массива..
|
Часовой пояс GMT +4, время: 20:27. |
|
« Предыдущая тема | Следующая тема » |
|
|