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 ...
随机推荐
- 本地自建KMS服务器
本地自建KMS服务器 本地自建KMS服务器 一.前期准备 下载安装以下软件.文件: VMware Github中的开源项目:vlmcsd 二.在VMware下部署KMS服务器 解压vlmcsd项目中r ...
- c 语言学习第六天
数组 语法: 类型 数组名[元素个数]; int a[6]; // 4*6 字节 char b[24]; // 1*24 字节 double c[2]; // 2*8 字节 访问数组中的元素 语法: ...
- c 语言学习第五天
break 语句 在循环体中使用 break,可以跳出循环 打印 10 以内的数. #include<stdio.h> int main(){ int i,j = 20; for(i = ...
- LabVIEW之项目文件结构透析
代码的管理非常重要,LabVIEW本身自带很多代码管理工具.下面来剖析一个相对标准的小项目:
- FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址
<FFmpeg开发实战:从零基础到短视频上线>一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流.不过MediaMTX的功能 ...
- 疑难杂症(已解决) | 为什么出现python中tkinter创建界面需要一闪而过才进入主窗口?
一.具体问题 如图所示,我编写了一个主窗口的程序(如下所示,有兴趣的可以自己复制后运行),发现需要先进入第一个窗口再进入主界面,这不符合逻辑. 代码区域(完整代码): from tkinter imp ...
- Django __init__ 方法用于初始化
使用面向对象的方法来创建一个栈板信息的模型,比如使用 Python 的类来表示栈板信息.以下是一个简单的示例: class Pallet: def __init__(self, number, nam ...
- oeasy教您玩转vim - 62 - # 缓冲buffer
编辑过程 回忆上次 我们这次了解了编辑过程 默认有一个替换文件swap 修改的内容会保存到一个swap文件 如果swp已经存在 会有个swo文件 以此类推 替换文件可以进行对源文件的修复 没保存到 ...
- oeasy教您玩转vim - 61- # 编辑过程
编辑过程 回忆上次 vi可以加各种参数 vi +4 oeasy.txt vi +/shiyanlou vi +%s/shiyanlou/oeasy/g oeasy.txt vi可以接收stdin的 ...
- 2023HACSP-J补测
都快忘了自己还打过这个比赛了,所以来补一下. 完整题目在这里查看. Day0 来到郑州,寻找考场.幸好提前来了,因为考场大门就 5m 宽(HA用不用这么穷啊喂,来JZYZ不好么),开车转了 20min ...