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"
}

  

JMonkeyEngine3 Android 旋转 、放大、缩小一个方块 demo 版本3.5.2-stable的更多相关文章

  1. CABasicAnimation的基本使用方法(移动·旋转·放大·缩小)

    出处:http://blog.csdn.net/iosevanhuang/article/details/14488239 CABasicAnimation类的使用方式就是基本的关键帧动画. 所谓关键 ...

  2. Android DIY之路 (一) 指定区域多图片合成 放大 缩小 镜像 旋转 等(转)

    惯例先看效果图 // 注意做类似这种模板功能时候 方位由后台数据提供,这里我们用假数据 4个点 或者xy 加区域来做示例 //一开始我们公司用的是透明盖住 操作图片 但发现 局限性较大.后来直接限定区 ...

  3. imageView图片放大缩小及旋转

    imageView图片放大缩小及旋转 一.简介 二.方法 1)设置图片放大缩小效果 第一步:将<ImageView>标签中的android:scaleType设置为"fitCen ...

  4. 制作一个顶部图片可以拉伸放大缩小效果的tableViewHeader

    最近负责公司项目个人中心的项目模块研发,首页是一个头部图片可以拉伸放大缩小效果的tableViewHeader,今天这个demo和教程我增加了模糊效果和头像缩小效果.具体效果如图: 如果这个效果是想要 ...

  5. Android 手势滑动,多点触摸放大缩小图片

    效果展示: 基本思路: <1>首先写一个图片控制类ImageControl,实现对图片控制的的基本操作,我们的图片控制类ImageControl是继承自ImageView自定义的视图: & ...

  6. Android实现图片放大缩小

    package com.min.Test_Gallery; import android.app.Activity; import android.graphics.Bitmap; import an ...

  7. WPF多点触摸放大缩小旋转

    原文:WPF多点触摸放大缩小旋转 版权声明:本文为博主原创文章,需要转载尽管转载. https://blog.csdn.net/z5976749/article/details/40118437 如果 ...

  8. Android 本地/网路下载图片实现放大缩小

     Android 本地加载/网路下载图片实现放大缩小拖拉效果,自定义控件. package com.example.ImageViewCustom; import android.app.Activi ...

  9. Android基于mAppWidget实现手绘地图(十五)–如何控制放大缩小

    一般来说,可以使用以下几种方式来控制地图的放大/缩小 : 1. 使用控件底部的缩放按钮 2.双击控件 3.pinch手势 4.物理按键 :I键标识缩小  :O键表示放大.(只有设备具有物理按键才行) ...

  10. Android 图片的放大缩小拖拉

    package com.example.ImageView; import android.annotation.SuppressLint; import android.content.Contex ...

随机推荐

  1. bing生成的汉服美女。。

  2. NEEPU Sec 2023 Misc 两题题记

    GoingOn 题目描述 Keep going on channel 1 ;D 考察的是 midi lsb隐写 MIDI文件概述 CSV文件概述 midi转csv工具 midicsv 将 MIDI 文 ...

  3. DASCTF X GFCTF 2024|四月开启第一局 [PWN]详解

    DASCTF X GFCTF 2024|四月开启第一局[PWN] wp(详解) 1.dynamic_but_static 题目保护情况 64位程序,没有开canary和pie保护,got表可改 64位 ...

  4. java dom4j解析xml

    jar包下载 官网地址:点我直达 将jar包导入工程 package com.cyb; import java.io.InputStream; import java.security.Message ...

  5. Java开发环境配置(IDEA系列)

    一.IDEA安装和破解,JDK1.8 以上或JDK 16 下一步下一步,安装jdk配置环境变量: 二.Maven安装 和IDEA集成Maven IDEA 配置 Maven 环境 1.选择 IDEA中 ...

  6. redis-sort排序

    sort命令可以对列表(lpush rpush).集合(sadd srem).有序集合(zadd)进行排序 1.复习一下三种数据结构(1)列表 lpush  key val1 val2 val3 .. ...

  7. 第二部分:关键技术领域的开源实践【Linux服务器自动化运维】

    Linux运维可能会遇到多种问题,这些问题可能源于技术挑战.资源配置.安全性.管理复杂性等多个方面.以下是一些常见的Linux运维问题: 技能要求: Linux系统通常需要较高的技术水平和经验来进行有 ...

  8. 可视化—gojs 超多超实用经验分享(三)

    目录 32.go.Palette 一排放两个 33.go.Palette 基本用法 34.创建自己指向自己的连线 35.设置不同的 groupTemplate 和 linkTemplate 36.监听 ...

  9. Pybind11和CMake构建python扩展模块环境搭建

    使用pybind11的CMake模板来创建拓展环境搭建 从Github上下载cmake_example的模板,切换分支,并升级pybind11子模块到最新版本 拉取pybind11使用cmake构建工 ...

  10. 使用.NET6实现动态API

    ApiLite是基于.NET6直接将Service层生成动态api路由,可以不用添加Controller,支持模块插件化,在项目开发中能够提高工作效率,降低代码量. 开发环境 .NET SDK 6.0 ...