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 ...
随机推荐
- 梁培利DeFi去中心化金融课程笔记2024版
课程链接:https://space.bilibili.com/220951871/channel/collectiondetail?sid=2824381&ctype=0 讲义仓库:http ...
- python 转换PDF 到 EPS
from win32com.client.dynamic import ERRORS_BAD_CONTEXT as ebc from win32com.client import DispatchEx ...
- Kubernetes(K8S)基本概念
前言 有公司用 java 或 go , vue 或 react , linux 或 win ,但所有的大厂都在用k8s,没有或,而且是全世界.一个熟悉k8s的开发,薪资可以轻松上25的 base . ...
- Docker的使用和常用命令
部署项目前基础服务准备 第一步:安装Docker环境 第二步:开启Docker远程带证书访问(可选) 第三步:拉取mysql,redis,nginx等等所需镜像 第四步:运行(创建)容器 # 本地远程 ...
- AI Agent技术的最新进展与改变世界的典型项目巡礼
AI Agent技术的最新进展与改变世界的典型项目巡礼 1. AI Agent 技术发展以及典型项目 1.0 前 AI Agent 时代 在学术探索的浩瀚星空中,机器人技术领域的璀璨明珠莫过于Agen ...
- Java FastJson解析json字符串
json转map Map<String, 实体类> titleMap=JSON.parseObject(JSON字符串, new TypeReference<HashMap<S ...
- 9. 嵌套的 CMake
9. 嵌套的 CMake 如果项目很大,或者项目中有很多的源码目录,在通过 CMake 管理项目的时候如果只使用一个 CMakeLists.txt ,那么这个文件相对会比较复杂,有一种化繁为简的方式就 ...
- EasyDesktop 浏览器书签管理从未如此简单
作为一名软件开发从业人员, 每天80%的时间都在与浏览器打交道, 一半的时间在用浏览器开发调试, 另一半时间则是在互联网上搜寻各种知识和资源. 为此, 我的浏览器书签栏存储和很多非常棒的链接, 多到2 ...
- Odoo 菜单定义和修改学习总结
odoo菜单定义和修改学习总结 环境 odoo-14.0.post20221212.tar 定义菜单 方式1: <?xml version="1.0"?> <od ...
- python selenium 判断元素是否存在,实现:找到元素,执行对应的代码;找不到元素,继续执行其他代码
selenium因为找不到元素会抛出异常,导致执行结束 可以考虑使用driver.find_elements(),找不到元素时就会返回空列表,使用if-else语句,判断列表是否为空,非空,则正常找到 ...