纯Java游戏引擎JME3入门

2018-11-26 07:57:41来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

学安全方面久了,有点无聊,今天闲来无事

查了下除了Unity以外还有什么好用的游戏引擎,我尤其关注了Java写的游戏引擎

果然有,jMonkeyEngine,于是打算看看

 

JME简介:

jMonkeyEngine是一款适合冒险的Java开发人员的3D游戏引擎。
它是开源的,跨平台的,前沿的。
3.2.0是jMonkeyEngine 3 SDK的最新稳定版本,是完整的游戏开发套件。
该引擎由几个商业游戏工作室和计算机科学课程使用。
该引擎采用纯Java编写
 
下面,开始基本的学习:
下载JME:从Github上面选择对应操作系统下载即可
 
第一个Demo:
显示一个小正方体
package mygame;

import com.jme3.app.SimpleApplication;
import com.jme3.light.DirectionalLight;
import com.jme3.scene.Mesh;
import com.jme3.scene.shape.Box;
import com.jme3.material.Material;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;

public class Main extends SimpleApplication {

    public static void main(String[] args) {
        Main app = new Main();
        app.start();
    }

    @Override
    public void simpleInitApp() {
        Mesh box=new Box(1,1,1);
        Material mat=new Material(assetManager,"Common/MatDefs/Light/Lighting.j3md");
        Geometry geom = new Geometry("Box");
        geom.setMesh(box);
        geom.setMaterial(mat);
        
        DirectionalLight sun =new DirectionalLight();
        sun.setDirection(new Vector3f(-1,-2,-3));
        
        rootNode.attachChild(geom);
        rootNode.addLight(sun);
        
    }
}

 

 父类SimpleApplication自带一个第一人称控制器,WASD直接操作:
 
 
或者在init中直接初始化相机坐标和旋转参数:
        cam.setLocation(new Vector3f(4.4114223f, 3.3620508f, 7.5415998f));
        cam.setRotation(new Quaternion(-0.046265673f, 0.9518722f, -0.1815604f, -0.2425582f));

 

可以提前设置好各种参数,直接启动游戏,跳过开始界面:
    public static void main(String[] args) {
        AppSettings settings = new AppSettings(true);
        settings.setTitle("一个正方体");
        settings.setResolution(1280, 1024);

        Main app = new Main();
        app.setSettings(settings);
        app.setShowSettings(false);
        app.start();
    }

 

 
第二个Demo:
让这个正方体自己旋转
package mygame;

import com.jme3.app.SimpleApplication;
import com.jme3.light.DirectionalLight;
import com.jme3.scene.Mesh;
import com.jme3.scene.shape.Box;
import com.jme3.material.Material;
import com.jme3.math.FastMath;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.system.AppSettings;

public class Main extends SimpleApplication {

    private Geometry geom;

    public static void main(String[] args) {
        AppSettings settings = new AppSettings(true);
        settings.setTitle("一个正方体");
        settings.setResolution(1280, 1024);

        Main app = new Main();
        app.setSettings(settings);
        app.setShowSettings(false);
        app.start();
    }

    @Override
    public void simpleInitApp() {
        Mesh box = new Box(1, 1, 1);
        Material mat = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
        geom = new Geometry("Box");
        geom.setMesh(box);
        geom.setMaterial(mat);

        DirectionalLight sun = new DirectionalLight();
        sun.setDirection(new Vector3f(-1, -2, -3));

        rootNode.attachChild(geom);
        rootNode.addLight(sun);

        cam.setLocation(new Vector3f(4.4114223f, 3.3620508f, 7.5415998f));
        cam.setRotation(new Quaternion(-0.046265673f, 0.9518722f, -0.1815604f, -0.2425582f));
    }

    @Override
    public void simpleUpdate(float deltaTime) {
        float speed = FastMath.TWO_PI;
        geom.rotate(0, deltaTime * speed, 0);
    }
}

 

 只是方块没有意思,我想办法搞到了诺手的模型,下载好导入:
 导入后的结果是这样,不是很满意,因为没有贴图:
package mygame;

import com.jme3.app.SimpleApplication;
import com.jme3.light.AmbientLight;
import com.jme3.light.DirectionalLight;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.Spatial;
import com.jme3.system.AppSettings;

public class Main extends SimpleApplication {

    private Geometry geom;

    public static void main(String[] args) {
        AppSettings settings = new AppSettings(true);
        settings.setTitle("诺手");
        settings.setResolution(1280, 1024);

        Main app = new Main();
        app.setSettings(settings);
        app.setShowSettings(false);
        app.start();
    }

    @Override
    public void simpleInitApp() {
        cam.setLocation(new Vector3f(0.41600543f, 3.2057908f, 6.6927643f));
        cam.setRotation(new Quaternion(-0.00414816f, 0.9817784f, -0.18875499f, -0.021575727f));
        flyCam.setMoveSpeed(10);
        viewPort.setBackgroundColor(ColorRGBA.LightGray);
        Spatial model = assetManager.loadModel("Models/demo/Darius.obj");
        model.scale(0.03f);
        model.center();

        //定向光
        DirectionalLight sun = new DirectionalLight();
        sun.setDirection(new Vector3f(-1, -2, -3));

        //环境光
        AmbientLight ambient = new AmbientLight();
        //调整光照亮度
        ColorRGBA lightColor = new ColorRGBA();
        sun.setColor(lightColor.mult(0.6f));
        ambient.setColor(lightColor.mult(0.4f));

        rootNode.attachChild(model);
        rootNode.addLight(sun);
        rootNode.addLight(ambient);
    }
}

 

只有模型,没有贴图,可能是我没有导入吧。。。

 

 

无所谓了,我不是专业搞游戏的,今天只是想到了,随便看看

 

继续我的Kali学习之路。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Web服务器的反向代理nginx

下一篇:day75_淘淘商城项目_08_同步索引库问题分析 + ActiveMQ介绍/安装