本站文章均为 李华明Himi 原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/j2me-kjava/262.html
- private int XYZ;//标识当前操作的轴
- private finale int STATE_ROATE=0,STATE_SCALE,STATE_TRANSLATE;
- private int state
- public void keyPressed(int key) {
- if (key == KEY_NUM7)//按键7代表改变当前操作的X?Y?Z?轴
- XYZ++;
- if (XYZ > 2)
- XYZ = 0;
- else if (key == KEY_NUM9)
- XYZ--;
- if (XYZ < 0)
- XYZ = 2;
- if (key == KEY_NUM1) //按键1表示当前对其进行哪种操作(旋转、缩放还是平移)
- state++;
- if (state > 2)
- state = 0;
- else if (key == KEY_NUM3)
- state--;
- if (state < 0)
- state = 2;
- float angle = 0;//角度;
- if (key == -1 || key == -2 || key == -3 || key == -4) {
- switch (state) {
- case STATE_ROATE://旋转操作下,angle=负数则为逆时针方向旋转,正数反之
- if (key == -1 || key == -3)
- angle = -10;
- else if (key == -2 || key == -4)
- angle = 10;
- if (XYZ == 0)
- tf_m.postRotate(angle, 1, 0, 0);
- else if (XYZ == 1)
- tf_m.postRotate(angle, 0, 1, 0);
- else if (XYZ == 2)
- tf_m.postRotate(angle, 0, 0, 1);
- break;
- case STATE_SCALE://缩放操作下,angle>1 标识方法 ,<1 则标识缩小
- if (key == -1 || key == -3)
- angle = 0.8f;
- else if (key == -2 || key == -4)
- angle = 1.2f;
- if (XYZ == 0)
- tf_m.postScale(angle, 1, 1);
- else if (XYZ == 1)
- tf_m.postScale(1, angle, 1);
- else if (XYZ == 2)
- tf_m.postScale(1, 1, angle);
- break;
- case STATE_TRANSLATE://平移操作下,angle=负数则为逆时针方向平移,正数反之
- if (key == -1 || key == -3)
- angle = -1;
- else if (key == -2 || key == -4)
- angle = 1;
- if (XYZ == 0)
- tf_m.postTranslate(angle, 0, 0);
- else if (XYZ == 1)
- tf_m.postTranslate(0, angle, 0);
- else if (XYZ == 2)
- tf_m.postTranslate(0, 0, angle);
- break;
- }
- }
- }
代码很简单,也很容易理解。
这里为了让一些同学更好的理解,那么我来代表性的详细说下 备注1 ;
我们对立方体进行变化操作,那么第一步:知道以哪个轴来做操作,所以按键处理先对 定义的 XYZ 进行判断,XYZ=1代表X轴 依次类推;
第二步:经过第一步确定了以哪个轴来做操作后,开始判定我们要对其进行什么操作,备注1 在 STATE_ROATE状态下,那肯定是做旋转的操作。接下来第三步:操作对应的值参数 angle 进行赋值;备注1这里angle =10;意思是旋转角度是10,大家看到赋值之前对按键也进行了判定,当 -1 -3(对应模拟器的上方向与左方向),做逆时针旋转;当 -2 -4(对应模拟器的下方向与右方向),做顺时针旋转;其实也就是旋转角度10前面到底是“+”号还是“-”号!第四步:变化操作的方法postRotate()第一个参数为角度,第二到四参数也表示的以哪个轴来旋转 ;这里 传入的是 1,0,0 ,也对应了XYZ =1 ,以X轴为旋转轴来操作!
当然可能我描述的也是以我理解的来讲述的,如果还是不理解,那么把代码放入项目中运行,自己手工修改angle,变化操作参数值等等来看运行效果就会很容易理解啦。
(推荐大家订阅本博客,因为咱的更新速度可是很快的~娃哈哈)