Flash 如何在Rubik';s立方体?

Flash 如何在Rubik';s立方体?,flash,3d,papervision3d,rubiks-cube,Flash,3d,Papervision3d,Rubiks Cube,我试图在Flash&Papervision中创建一个魔方,我真的被困在这里了。我已经到了可以旋转任何一个立方体平面一次的地步了,但是在那之后…一切都乱七八糟,因为所有的局部坐标系都是乱七八糟的 我真的不知道该怎么办,有人能给我一些建议吗?我不是在寻找“阅读转换矩阵”,我知道我应该(我正在这么做),但我真的不确定要寻找什么。我的想法是,在每次旋转之后,我应该再次修复每个立方体的每个坐标系,但我不知道如何修复。任何关于我想要达到的目标(用文字)和原因的提示,我都非常感激 (使用cursorkeys+

我试图在Flash&Papervision中创建一个魔方,我真的被困在这里了。我已经到了可以旋转任何一个立方体平面一次的地步了,但是在那之后…一切都乱七八糟,因为所有的局部坐标系都是乱七八糟的

我真的不知道该怎么办,有人能给我一些建议吗?我不是在寻找“阅读转换矩阵”,我知道我应该(我正在这么做),但我真的不确定要寻找什么。我的想法是,在每次旋转之后,我应该再次修复每个立方体的每个坐标系,但我不知道如何修复。任何关于我想要达到的目标(用文字)和原因的提示,我都非常感激


(使用cursorkeys+A&D)

也许您可以存储构成魔方的26个立方体中每个立方体的位置和方向,并在需要显示时计算坐标和颜色

例如,前面(无论您如何定义前面)的位置为(0,0,0)到(2,2,0)。我使用x,y和z;其中x从左到右,y从上到下,z在立方体中移动

方向为0-5,对应于每个小立方体表面的颜色

绘制魔方时,必须考虑用户相对于正面的位置


我不确定这会使旋转方法更简单,但至少你的立方体方向是正确的。

也许你可以存储组成魔方的26个立方体中每个立方体的位置和方向,并在需要显示时计算坐标和颜色

例如,前面(无论您如何定义前面)的位置为(0,0,0)到(2,2,0)。我使用x,y和z;其中x从左到右,y从上到下,z在立方体中移动

方向为0-5,对应于每个小立方体表面的颜色

绘制魔方时,必须考虑用户相对于正面的位置


我不确定这会使旋转方法更简单,但至少你的立方体方向是正确的。

我不想这么说,但矩阵很方便:

代码也被很好地注释了

另一件事会浮现在脑海中,如果矩阵是过度杀伤力 正在动态分组/重新租用DisplayObject3D实例

假设你有这样一些基本的东西:

var cubes:DisplayObject3D = new DisplayObject3D();
            cubes.name = 'cubes';
            for(var i:int = 0 ; i < boxDivisions ; i++){
                var zBoxes:DisplayObject3D = new DisplayObject3D();
                zBoxes.name = 'zBoxes_'+i;
                for(var j:int = 0 ; j < boxDivisions; j++){
                    var yBoxes:DisplayObject3D = new DisplayObject3D();
                    for(var k:int = 0 ; k < boxDivisions ; k++){
                        var box:Cube = new Cube(materials,boxSize,boxSize,boxSize);
                        box.material = box.material.clone();
                        box.material.fillColor = Math.random() * 0xFFFFFF;
                        box.x = ((boxDivisions-1) - (k+1)) * (boxSize + boxSpacing);
                        box.name = 'box_'+i+''+j+''+k;
                        yBoxes.addChild(box,'box_'+i+''+j+''+k);
                    }
                    yBoxes.y = ((boxDivisions-1) - (j+1)) * (boxSize+boxSpacing);
                    yBoxes.name = 'yBoxes_'+j;
                    zBoxes.addChild(yBoxes);
                }
                zBoxes.z = ((boxDivisions-1) - (i+1)) * (boxSize+boxSpacing);
                cubes.addChild(zBoxes);
            }
            basicView.scene.addChild(cubes);
var cubes:DisplayObject3D=newdisplayObject3D();
cubes.name='cubes';
对于(变量i:int=0;i
这些小组只会在少数情况下提供帮助,但不是所有情况,需要记住的是 您可以命名和分组DO3D

假设您单击并拖动一个小立方体:

  • 弄清楚它在地图上的位置 当前活动面(曲面的集合) 3X3盒)
  • 基于此,你知道它属于哪一组3,因此,什么 一组3x1立方体,以旋转为一个 团体
  • 根据当前鼠标位置减去上一个鼠标位置,您可以 知道旋转的方向 朝向
  • 嗯,,
    乔治

    不想这么说,但矩阵很方便:

    代码也被很好地注释了

    另一件事会浮现在脑海中,如果矩阵是过度杀伤力 正在动态分组/重新租用DisplayObject3D实例

    假设你有这样一些基本的东西:

    var cubes:DisplayObject3D = new DisplayObject3D();
                cubes.name = 'cubes';
                for(var i:int = 0 ; i < boxDivisions ; i++){
                    var zBoxes:DisplayObject3D = new DisplayObject3D();
                    zBoxes.name = 'zBoxes_'+i;
                    for(var j:int = 0 ; j < boxDivisions; j++){
                        var yBoxes:DisplayObject3D = new DisplayObject3D();
                        for(var k:int = 0 ; k < boxDivisions ; k++){
                            var box:Cube = new Cube(materials,boxSize,boxSize,boxSize);
                            box.material = box.material.clone();
                            box.material.fillColor = Math.random() * 0xFFFFFF;
                            box.x = ((boxDivisions-1) - (k+1)) * (boxSize + boxSpacing);
                            box.name = 'box_'+i+''+j+''+k;
                            yBoxes.addChild(box,'box_'+i+''+j+''+k);
                        }
                        yBoxes.y = ((boxDivisions-1) - (j+1)) * (boxSize+boxSpacing);
                        yBoxes.name = 'yBoxes_'+j;
                        zBoxes.addChild(yBoxes);
                    }
                    zBoxes.z = ((boxDivisions-1) - (i+1)) * (boxSize+boxSpacing);
                    cubes.addChild(zBoxes);
                }
                basicView.scene.addChild(cubes);
    
    var cubes:DisplayObject3D=newdisplayObject3D();
    cubes.name='cubes';
    对于(变量i:int=0;i
    这些小组只会在少数情况下提供帮助,但不是所有情况,需要记住的是 您可以命名和分组DO3D