基于Voxel.js搭建网页方块世界游戏

Voxel.js,是用于呈现在浏览器上的方块游戏的构建工具包

📑引用

“an open source voxel game building toolkit for modern web browsers”

——Voxel 官网

image-20211121214832826

⭐推荐

基于 Voxel 搭建的方块世界样例可以试玩

http://shama.github.io/voxel-drone/

http://maxogden.github.io/slides/nodepdx/index.html


💬相关

Voxel 官网

http://www.voxeljs.com/

Voxel 系列项目
https://github.com/maxogden?tab=repositories&q=voxel

构建项目

其需要先在服务器上安装 Node.js,再根据自己需求找到 Voxel 相应的模块包用 npm 进行安装

💬相关

Node.js 安装教程

https://www.runoob.com/nodejs/nodejs-install-setup.html

Voxel 的模块包有很多,其中voxel-engine是核心模块,不可缺少

还有很多模块包,如玩家角色模块包 voxel-player,材质模块包 voxel-textures,光照投影模块包 voxel-highlight,碎片模块包 voxel-debris等等

在这里给出用 npm 安装模块包的命令例子

npm install voxel-engine
npm install voxel-player
npm install voxel-highlight

其后还要安装 browserify

npm install browserify -g

新建一个 js 文件index.js并在里面写上初始化的代码

//此处代码学习自YiDaoDo博客 https://blog.csdn.net/lmmmmmnb/article/details/115193123

var createGame =require('voxel-engine');//引入包
var Highlight = require('voxel-highlight')//引入包
var game=createGame(       //以该函数为基础创造世界 
    { 
    generate: function(x,y,z) {   //generate里面的函数为初始的地图创建函数  
    if (y==0){  
        return x*x+z*z <=55*55? 1:0 
        }else if(y==8&&x==0&&z==0){ 
        return 1    
        } 
    }, 
    texturePath:'textures/',      //引入纹理包。纹理包里面的图片都可以在voxel-engine包里面找到     
    materials: ["grass"]   //添加初始纹理(都是纹理包里面的)

      }
 );

var createPlayer=require('voxel-player')(game);   //引入包

game.appendTo(document.body);       //获得全屏

var substack=createPlayer('skin/shama.png');  //创建你的小人

substack.possess();      //小人获得移动视角

substack.yaw.position.set(3,30,0);    //小人初始位置

随后执行下述指令,利用 browserify 根据初始化代码生成相应的运行方块世界的完整代码

browserify index.js -o world.js

如果想要游戏屏幕中央带有红色准心,那就新建一个 CSS 文件 style.css,里面写入下述代码并在 HTML 文件中引入

body {
  margin: 0px;
  font-family: Arial, sans-serif;
  font-size: 80%;
}
#container {
  -moz-user-select: none;
  -webkit-user-select: none;
  user-select: none;
}
#crosshair {
  position: fixed;
  top: 50%;
  left: 50%;
  margin: -2px 0 0 -2px;
  width: 4px;
  height: 4px;
  background-color: #d00;
  opacity: 0.5;
}

最后新建一个 HTML 文件 index.html,在其中引入 style.css 和新生成的 world.js,即大功告成

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
        <title>方块世界</title>
        <link rel="stylesheet" href="style.css" />		
	</head>
	<body>
        <div id="container"></div>
        <div id="crosshair"></div>
	    <script src="world.js"></script>
	</body>
</html>

最后项目的文件大致是这样的

Voxel/
├── node_modules/        ::Voxel若干模块包
├── textures/       ::材质
├── skin/       ::人物皮肤
├── index.html
├── style.css
├── index.js
├── world.js
└── package-lock.json

💬相关

Voxel.js 文档

https://blog.csdn.net/lmmmmmnb/article/details/115193123

voxel-texture

voxel-texture 是材质模块包,可以让你的方块 6 个面都拥有各自的材质

方块材质传入一个数组 materials(数组大小 1-6 均可),每个元素对应方块某个面材质的名称

面名称中英释义

  • 顶面 top
  • 底面 bottom
  • 前面 front
  • 背面 back
  • 左面 left
  • 右面 right
  • 侧面 side(包含前、背、左、右四个面)
  • 全部面 all(包含六个面)

面方向与坐标值的关系

  • front 方向前进 z 值减小
  • left 方向前进 x 值减小
  • top 方向前进 y 值增大(y 是纵坐标值)

不同大小数组参数下每个元素代表的含义

根据数组参数大小的不同,其每个元素对应的方块面也不同。

[all]//数组大小为1
[top and bottom,side]//数组大小为2
[top,bottom,side]//数组大小为3
[top,bottom,front and back,left and right]
//不能以大小为5的数组作为参数,否则右面会缺失材质
[front,back,top,bottom,left,right]//数组大小为6

其他包

⭐推荐

模组包 voxel-enginevoxel-playervoxel-highlight 都可以查看博客《Voxel.js文档——用js实现“我的世界”》

https://blog.csdn.net/lmmmmmnb/article/details/115193123

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值