Просмотр полной версии : узнать грань игральной кости
Приветствую!
Есть игральная кость на 2д плоскости. И стрелки управления: вверх, вниз, влево, вправо. При клике на стрелку кость перекручивается в соответствующую сторону. Как узнать какую грань показывать?
Зачем спрашивать вещи, которые с легкостью находится на просторах интернета?
Википедия (http://ru.wikipedia.org/wiki/%D0%98%D0%B3%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BA%D0%BE%D1%81%D1%82%D1%8C) в помощь же.
я бы сделал так :)
кубик у меня такой
[5]
[4][1][2]
[3]
[6]
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));
}
Насколько я помню, у кубика сумма противоположных граней должна равняться 7. Т.е будет вот так:
[5]
[4][1][3]
[2]
[6]
MoHaX, а ничего, что кубик поворачивается? Что под клавишу Up может попасть любая из четырех прилегающих сторон?
mikhailk
16.04.2013, 18:09
Хранить текущее состояние кубика?
Делаю так.
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;
}
}
Но в один прекрасный момент кубик начинает переворачиватся на ту же грань. То есть не менять положение. Не могу понять в чём причина.
mikhailk
16.04.2013, 19:13
Вот мой вариант. :)
Работает как часы.
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"], " ");
}
}
}
MoHaX, а ничего, что кубик поворачивается? Что под клавишу Up может попасть любая из четырех прилегающих сторон?
ну не сложно дописать для каждого угла поворота как брать стороны из массива..
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.