JMonkeyEngine3 Android 旋转 、放大、缩小一个方块 demo 版本3.5.2-stable
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的更多相关文章
- CABasicAnimation的基本使用方法(移动·旋转·放大·缩小)
出处:http://blog.csdn.net/iosevanhuang/article/details/14488239 CABasicAnimation类的使用方式就是基本的关键帧动画. 所谓关键 ...
- Android DIY之路 (一) 指定区域多图片合成 放大 缩小 镜像 旋转 等(转)
惯例先看效果图 // 注意做类似这种模板功能时候 方位由后台数据提供,这里我们用假数据 4个点 或者xy 加区域来做示例 //一开始我们公司用的是透明盖住 操作图片 但发现 局限性较大.后来直接限定区 ...
- imageView图片放大缩小及旋转
imageView图片放大缩小及旋转 一.简介 二.方法 1)设置图片放大缩小效果 第一步:将<ImageView>标签中的android:scaleType设置为"fitCen ...
- 制作一个顶部图片可以拉伸放大缩小效果的tableViewHeader
最近负责公司项目个人中心的项目模块研发,首页是一个头部图片可以拉伸放大缩小效果的tableViewHeader,今天这个demo和教程我增加了模糊效果和头像缩小效果.具体效果如图: 如果这个效果是想要 ...
- Android 手势滑动,多点触摸放大缩小图片
效果展示: 基本思路: <1>首先写一个图片控制类ImageControl,实现对图片控制的的基本操作,我们的图片控制类ImageControl是继承自ImageView自定义的视图: & ...
- Android实现图片放大缩小
package com.min.Test_Gallery; import android.app.Activity; import android.graphics.Bitmap; import an ...
- WPF多点触摸放大缩小旋转
原文:WPF多点触摸放大缩小旋转 版权声明:本文为博主原创文章,需要转载尽管转载. https://blog.csdn.net/z5976749/article/details/40118437 如果 ...
- Android 本地/网路下载图片实现放大缩小
Android 本地加载/网路下载图片实现放大缩小拖拉效果,自定义控件. package com.example.ImageViewCustom; import android.app.Activi ...
- Android基于mAppWidget实现手绘地图(十五)–如何控制放大缩小
一般来说,可以使用以下几种方式来控制地图的放大/缩小 : 1. 使用控件底部的缩放按钮 2.双击控件 3.pinch手势 4.物理按键 :I键标识缩小 :O键表示放大.(只有设备具有物理按键才行) ...
- Android 图片的放大缩小拖拉
package com.example.ImageView; import android.annotation.SuppressLint; import android.content.Contex ...
随机推荐
- UG 2406 python 二次开发环境配置
UG 2406 python 二次开发环境配置 项目地址 https://gitee.com/unm001/nx2406.git 安装python 安装 python 3.10.11 D:\prog\ ...
- ELK日志缺失问题排查-多行日志聚合Logstash配置问题
1. 背景 推荐系统的推荐请求追踪日志,通过ELK收集,方便遇到问题时,可以通过唯一标识sid来复现推荐过程 最近在碰到了几个bad case,需要通过sid来查询推荐日志,但发现部分无法在kiban ...
- python 自动化神器 多平台纯代码RPA办公自动化python框架
Pyaibote是一款专注于纯代码RPA(机器人流程自动化)的强大工具,支持Android.Browser和Windows三大主流平台.无论您需要自动化安卓应用.浏览器操作还是Windows应用程 ...
- 在该serializer中使用source参数指定序列化时使用的字段的choices选项
在序列化中获取time_unit字段的中文名称,你可以使用choices选项中定义的第二个值,即元组中的第二个元素.你可以通过定义一个serializer,然后在该serializer中使用sourc ...
- es6高级~promise
1.Promise对象 Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值.其作用是为了解决回调地狱 回调地狱:回调函数的结果作为下一个回调函数的参数时,产生回调链,也称之为回调 ...
- Django model 层之聚合查询总结
Django model 层之聚合查询总结 by:授客 QQ:1033553122 实践环境 Python版本:python-3.4.0.amd64 下载地址:https://www.python.o ...
- [UE源码] 关于使用UE待改进的一些尝试
UE从自己做了一款游戏后,发现了蓝图以及UE引擎本身的一些优缺点: 1.蓝图在一些简单的逻辑上书写方便,直观,而且编译速度快,但是也有一些其他问题: 结构体赋值后,无法二次修改 只有3种容器Array ...
- 同时使用mp和mybatis,我的type-aliases-package失效了
mybatis: #mapper配置文件 mapper-locations: classpath:mapper/*.xml type-aliases-package: com.sky.entity c ...
- 从C++看C#托管内存与非托管内存
进程的内存 一个exe文件,在没有运行时,其磁盘存储空间格式为函数代码段+全局变量段.加载为内存后,其进程内存模式增加为函数代码段+全局变量段+函数调用栈+堆区.我们重点讨论堆区. 进程内存 函数代码 ...
- 【Java】IDEA普通JavaEE项目实现SSM整合
一.需要的组件 首先是解决组件问题,非Maven项目构建的jar包 [Servlet & JSP & JSTL] 虽然不是Maven项目,但是JSTL的组件是需要引入的 这里就按照Ma ...