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

浙公网安备 33010602011771号