魔方Y/Z轴旋转动画异常求助(附代码与演示视频)
魔方面旋转动画Y/Z轴旋转异常问题
我开发的魔方面旋转动画程序出现异常,涉及Y轴和Z轴的旋转功能无法正常工作,我录制了视频直观展示问题。
以下是相关代码,rotateX/Y/Z函数仅用于更新每个小方块的rotation结构体,因此未附上该部分代码。我已尝试所有能想到的方法仍无法解决。
private async void L(int n) //此功能可正常运行 { for (int i = 0; i < 15 * n; i++) { cube[0].rotateX(6 *DEGREE); cube[1].rotateX(6 * DEGREE); //将魔方左面向X轴旋转90度 cube[2].rotateX(6 * DEGREE); cube[9].rotateX(6 * DEGREE); cube[10].rotateX(6 * DEGREE); cube[11].rotateX(6 * DEGREE); cube[17].rotateX(6 * DEGREE); cube[18].rotateX(6 * DEGREE); cube[19].rotateX(6 * DEGREE); Invalidate(rec); await Task.Delay(1); } cube[0].rotateX(-90 * DEGREE); //此处将方块快速旋转回初始状态 cube[1].rotateX(-90 * DEGREE); cube[2].rotateX(-90 * DEGREE); cube[9].rotateX(-90 * DEGREE); cube[10].rotateX(-90 * DEGREE); cube[11].rotateX(-90 * DEGREE); cube[17].rotateX(-90 * DEGREE); cube[18].rotateX(-90 * DEGREE); cube[19].rotateX(-90 * DEGREE); CubeFaces = Rotations.L(1, CubeFaces); //此方法修改左面色块并更新显示 Invalidate(rec); //使魔方看起来完成了旋转 } private async void R(int n) //此功能同样可正常运行 { for (int i = 0; i < 15 * n; i++) { cube[6].rotateX(-6 * DEGREE); cube[7].rotateX(-6 * DEGREE); cube[8].rotateX(-6 * DEGREE); cube[14].rotateX(-6 * DEGREE); cube[15].rotateX(-6 * DEGREE); cube[16].rotateX(-6 * DEGREE); cube[23].rotateX(-6 * DEGREE); cube[24].rotateX(-6 * DEGREE); cube[25].rotateX(-6 * DEGREE); await Task.Delay(1); Invalidate(rec); } cube[6].rotateX(90 * DEGREE); cube[7].rotateX(90 * DEGREE); cube[8].rotateX(90 * DEGREE); cube[14].rotateX(90 * DEGREE); cube[15].rotateX(90 * DEGREE); cube[16].rotateX(90 * DEGREE); cube[23].rotateX(90 * DEGREE); cube[24].rotateX(90 * DEGREE); cube[25].rotateX(90 * DEGREE); CubeFaces = Rotations.R(1, CubeFaces); Invalidate(rec); } private async void U(int n) //此功能无法正常运行,运行后即可看到问题 { for (int i = 0; i < 15 * n; i++) { cube[0].rotateY(6 * DEGREE); cube[3].rotateY(6 * DEGREE); cube[6].rotateY(6 * DEGREE); cube[9].rotateY(6 * DEGREE); cube[12].rotateY(6 * DEGREE); cube[14].rotateY(6 * DEGREE); cube[17].rotateY(6 * DEGREE); cube[20].rotateY(6 * DEGREE); cube[23].rotateY(6 * DEGREE); //cube[0].rotateX(cube[0].GetRotation().z); //cube[3].rotateX(-rotation.x); //cube[6].rotateX(-rotation.x); //cube[9].rotateX(-rotation.x); //cube[12].rotateX(-rotation.x); //cube[14].rotateX(-rotation.x); //cube[17].rotateX(-rotation.x); //cube[20].rotateX(-rotation.x); //cube[23].rotateX(-rotation.x); await Task.Delay(1); Invalidate(); } } private async void F(int n) //此功能同样无法正常运行,运行后即可看到问题 { for (int i = 0; i < 15 * n; i++) { cube[0].rotateZ(6 * DEGREE); //X轴旋转功能正常,但Y轴和Z轴旋转异常 cube[1].rotateZ(6 * DEGREE); cube[2].rotateZ(6 * DEGREE); cube[3].rotateZ(6 * DEGREE); cube[4].rotateZ(6 * DEGREE); cube[5].rotateZ(6 * DEGREE); cube[6].rotateZ(6 * DEGREE); cube[7].rotateZ(6 * DEGREE); cube[8].rotateZ(6 * DEGREE); await Task.Delay(1); Invalidate(); } //cube[0].rotateZ(-90 * DEGREE); //cube[1].rotateZ(-90 * DEGREE); //cube[2].rotateZ(-90 * DEGREE); //cube[3].rotateZ(-90 * DEGREE); //cube[4].rotateZ(-90 * DEGREE); //cube[5].rotateZ(-90 * DEGREE); //cube[6].rotateZ(-90 * DEGREE); //cube[7].rotateZ(-90 * DEGREE); //cube[8].rotateZ(-90 * DEGREE); //CubeFaces = Rotations.F(1, CubeFaces); }
我尝试过U函数中注释掉的代码,原本以为可以抵消魔方的异常旋转,但结果反而更糟。
内容的提问来源于stack exchange,提问作者Alex Morris
相关产品推荐
相关产品推荐

