• JMonkeyEngine3 Android 旋转 、放大、缩小一个方块 demo 版本3.5.2stable


    1. Class,里面是旋转的逻辑,很简陋,可以自己优化

    import android.util.Log;
    import com.jme3.app.SimpleApplication;
    import com.jme3.input.RawInputListener;
    import com.jme3.input.event.JoyAxisEvent;
    import com.jme3.input.event.JoyButtonEvent;
    import com.jme3.input.event.KeyInputEvent;
    import com.jme3.input.event.MouseButtonEvent;
    import com.jme3.input.event.MouseMotionEvent;
    import com.jme3.input.event.TouchEvent;
    import com.jme3.light.DirectionalLight;
    import com.jme3.material.Material;
    import com.jme3.math.FastMath;
    import com.jme3.math.Vector3f;
    import com.jme3.scene.Geometry;
    import com.jme3.scene.Mesh;
    import com.jme3.scene.shape.Box;
    import static com.jme3.input.event.TouchEvent.Type.MOVE;
    import static com.jme3.input.event.TouchEvent.Type.SCALE_MOVE;
    
    /**
     *  移动端 旋转、缩放的jME3 demo
     * @author uoky
     */
    public class HelloJME3 extends SimpleApplication {
    	private Geometry geom;
    
    	/**
    	 * 初始化3D场景,显示一个方块。
    	 */
    	@Override
    	public void simpleInitApp() {
    
    		// #1 创建一个方块形状的网格
    		Mesh box = new Box(1, 1, 1);
    
    		// #2 加载一个感光材质
    		Material mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
    
    		// #3 创建一个几何体,应用刚才和网格和材质。
    		geom = new Geometry("Box");
    		geom.setMesh(box);
    		geom.setMaterial(mat);
    
    		// #4 创建一束定向光,并让它斜向下照射,好使我们能够看清那个方块。
    		DirectionalLight sun = new DirectionalLight();
    		sun.setDirection(new Vector3f(-1, -2, -3));
    
    		// #5 将方块和光源都添加到场景图中
    		rootNode.attachChild(geom);
    		rootNode.addLight(sun);
    		inputManager.addRawInputListener(new HelloJME3.MyRawInputListener());
    	}
    	// 原始输入监听器
    	class MyRawInputListener implements RawInputListener {
    
    		/**
    		 * 键盘输入事件
    		 */
    		@Override
    		public void onKeyEvent(KeyInputEvent evt) {
    			Log.v("ceshi","onKeyEvent");
    		}
    
    		/**
    		 * 鼠标输入事件
    		 */
    		@Override
    		public void onMouseMotionEvent(MouseMotionEvent evt) {
    			int x = evt.getX();
    			int y = evt.getY();
    			// 打印鼠标的坐标
    			Log.v("ceshi"," x=" + x + " y=" + y);
    		}
    
    		@Override
    		public void onMouseButtonEvent(MouseButtonEvent evt) {
    			Log.w("ceshi",evt.toString());
    			if (evt.isReleased()) {
    				int x = evt.getX();
    				int y = evt.getY();
    				if (x > y) {
    					float speed = FastMath.TWO_PI;
    					float time = 0.01f;
    					geom.rotate(0, -time * speed, 0);
    				} else {
    					float speed = FastMath.TWO_PI;
    					float time = 0.01f;
    					geom.rotate(0, time * speed, 0);
    				}
    			}
    			Log.w("ceshi", "onMouseButtonEvent 点击事件 ----------- isPressed:" +
    					evt.isPressed() + " isReleased : " + evt.isReleased() + "; X : " + evt.getX() +" Y : " + evt.getY());
    
    		}
    
    		@Override
    		public void beginInput() {
    			Log.v("ceshi"," beginInput");
    		}
    
    		@Override
    		public void endInput() {
    			Log.v("ceshi"," endInput");
    		}
    
    		@Override
    		public void onJoyAxisEvent(JoyAxisEvent evt) {
    			Log.v("ceshi"," onJoyAxisEvent");
    		}
    
    		@Override
    		public void onJoyButtonEvent(JoyButtonEvent evt) {
    			Log.v("ceshi"," JoyButtonEvent");
    		}
    
    		@Override
    		public void onTouchEvent(TouchEvent evt) {
    			Log.i("ceshi",evt.toString());
    			if (evt.getType() == MOVE) {
    				// 单指 滑动屏幕 向左右,上下旋转
    				float time = 0.01f;
    				float speed = FastMath.TWO_PI;
    				geom.rotate(Math.abs(evt.getDeltaY()) > 3 ? (evt.getDeltaY() > 0 ? -1 : 1 ) * time * speed : 0,  (evt.getDeltaX() > 0 ? 1 : -1 ) * time * speed, 0);
    				Log.i("ceshi", "左边旋转15");
    			}
    			if (evt.getType() == SCALE_MOVE) {
    				// 双指 > 0 放大  < 0 缩小
    				geom.scale(evt.getDeltaScaleSpan() > 0 ? 1.02f : 0.98f);
    			}
    		}
    	}
    
    	public static void main(String[] args) {
    		// 启动jME3程序
    		HelloJME3 app = new HelloJME3();
    		app.start();
    	}
    }
    

      

    2. Activity

    import com.jme3.app.AndroidHarness;
    
    public class MainActivity extends AndroidHarness  {
        public MainActivity() {
            this.appClass = "com.uoky.jmtest.jmk.HelloJME3";
        }
    }
    

    3. build.gradle 的 dependencies

    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'androidx.appcompat:appcompat:1.0.2'
        implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
        testImplementation 'junit:junit:4.12'
        def jme3 = [g:'org.jmonkeyengine', v:'3.5.2-stable']
        implementation "$jme3.g:jme3-core:$jme3.v"
        implementation "$jme3.g:jme3-android:$jme3.v"
        implementation "$jme3.g:jme3-android-native:$jme3.v"
    }
    

      

  • 相关阅读:
    不同长度的数据进行位运算
    Linux的sleep()和usleep()的使用和区别
    linux inode已满解决方法
    Debian 系统修改语言设置成英文
    IIS设置问题
    Ajax实现跨域访问的三种方法
    HTML--备忘点
    C#基础---值类型和引用类型
    dapper.net框架使用随笔
    WebService的搭建,部署,简单应用和实体类结合使用
  • 原文地址:https://www.cnblogs.com/uoky/p/16301682.html
Copyright © 2020-2023  润新知