各位大侠:  我想问一个关于控制物体移动的问题,如下:  
  新建了2个CLASS,一个叫做 Keysetting, 另一个叫做keysetting2. 而且目前我一共画了2个cube。又添加了2个 radiobutton. 一个叫做 radiobutton1, 另一个叫做radiobutton2. 我现在要做的是,当点击radiobutton1的时候,只控制cube1, 通过keysetting. 点击radiobutton2 的时候,只控制cube2, 通过 keysetting2.cube1 保持原状不动。  目前我自己写的关于控制着两个cube的程序:        private void radioButton1_KeyPress(object sender, KeyPressEventArgs e) 
        { 
            keysetting.key(sender, e); 
            this.Refresh(); 
        }         private void radioButton2_KeyPress(object sender, KeyPressEventArgs e) 
        { 
            keysetting2.key(sender, e); 
            this.Refresh(); 
        }   在keysetting.key中的代码是:
   
 class KeySetting 
    {      
        public void key(object sender, KeyPressEventArgs e) 
        { 
          
            if (e.KeyChar == (char)Keys.O) 
            { 
                const float viewAngle = 30.0f; 
                Gl.glRotatef(viewAngle, 1.0f, 0.0f, 0.0f); 
                cube.Control(RotX, RotY, RotZ, X, Y, Z); 
                axes.Draw(); 
            } 
     
            if (e.KeyChar == (char)Keys.X) 
            { 
                RotX += 2.0f;            
                Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); 
                Gl.glPushMatrix(); 
                Gl.glRotatef(RotX, 1.0f, 0.0f, 0.0f); 
                Gl.glRotatef(RotY, 0.0f, 1.0f, 0.0f); 
                Gl.glRotatef(RotZ, 0.0f, 0.0f, 1.0f); 
                Gl.glTranslatef(X, Y, Z); 
                cube.Draw(); 
                Gl.glLoadIdentity(); 
                Gl.glPopMatrix();  
                axes.Draw(); 
           ..............................
           ..............................还有很多关于键盘的设置的code我没有贴上来,但是大意就是用不同的键,例如 x, y, o, L 之类的 控制我画的cube 做旋转,移动等动作目前我的程序可以运行。 但是有一个问题不知道怎么解决,假如我选择了radiobutton1 (只能控制cube1),刚刚让cube1 沿着 x 轴移动了 10.0f, 现在我想让他呆在那里不动,开始操作cube2,不知怎么实现? 
因为我现在一旦操作了cube1,然后再选择radiobutton2, 操作cube2的时候,cube1 就自己跑回他原来的初始位置了很恶心 烦请各位兄弟们指教了 万分感谢!!!

解决方案 »

  1.   


        class KeySetting 
        {  
         private int cubeX,cubeY,cubeZ; //增加一些成员变量保存cube的当前位置坐标      public void key(object sender, KeyPressEventArgs e) 
            { 
              
                if (e.KeyChar == (char)Keys.O) 
                { 
                    const float viewAngle = 30.0f; 
                    Gl.glRotatef(viewAngle, 1.0f, 0.0f, 0.0f); 
                    cube.Control(RotX, RotY, RotZ, cubeX, cubeY, cubeZ); //改动
                    axes.Draw(); 
                } 
           ...