当前位置: 移动技术网 > IT编程>开发语言>Java > 纯Java游戏引擎JME3入门

纯Java游戏引擎JME3入门

2018年11月26日  | 移动技术网IT编程  | 我要评论

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

查了下除了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学习之路。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网