threejs实现一个三维户外山上滑雪运动游戏代码
代码语言:html
所属分类:游戏
代码描述:threejs实现一个三维户外山上滑雪运动游戏代码,键盘左右键操作方向避开石头和树木。
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
@import url('https://fonts.googleapis.com/css?family=Ranchers');
html, body {
height: 100%;
width: 100%;
padding: 0;
margin: 0;
overflow: hidden;
font-family: 'Ranchers', sans-serif;
}
body {
background-image: url('//repo.bfw.wiki/bfwrepo/images/ski/snowmountain.jpg');
background-size: cover;
background-position: center;
}
canvas {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
div {
user-select: none;
}
.label-death {
display: none;
z-index: 10;
position: absolute;
top: 25%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 10rem;
color: white;
&.active {
display: block;
}
}
.label-death-bg {
content: " ";
z-index: 9;
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 20rem;
transform: translate(-50%, -50%);
transition: all 2s ease;
background-color: black;
opacity: 0.7;
&.active {
top: 50%;
width: 100%;
height: 100%;
}
}
.label-score {
z-index: 10;
position: absolute;
left: 5vw;
bottom: 5vh;
font-size: 10rem;
transition: all 500ms ease;
color: black;
&.stopped {
top: 50%;
left: 50%;
bottom: auto;
font-size: 15rem;
transform: translate(-50%, -50%);
color: white;
}
}
.label-restart {
display: none;
z-index: 100;
position: absolute;
padding: 1rem 2rem;
top: 75%;
left: 50%;
width: 100%;
text-align: center;
font-size: 5rem;
color: white;
transform: translate(-50%, -50%);
&.active {
display: block;
}
}
</style>
</head>
<body >
<div class="label-death">REKT</div>
<div class="label-death-bg"></div>
<div class="label-score"></div>
<div class="label-restart">PRESS ENTER TO PLAY AGAIN</div>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.92.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/mountain.plugins.js"></script>
<script >
class World {
constructor(wnd) {
this.window = wnd;
this.clock = new THREE.Clock();
this.isLoading = true;
this.loader = THREE.DefaultLoadingManager;
this.onLoadedCallbacks = [];
this.loader.onLoad = () => {
this.isLoading = false;
this.onLoadedCallbacks.forEach(cb => cb());
};
this.loader.onError = url => console.error(`There was an error loading ${url}`);
this.setupRenderer();
this.setupScene();
this.setupLighting();
// Auto resize engine
wnd.addEventListener('resize', () => {
this.renderer.setSize(wnd.innerWidth, wnd.innerHeight);
});
this.onRenderCallbacks = [];
this.animationMixers = [];
this.loadedFbx = {};
}
drawGridQuadrant(signX, signZ) {
const GRID_SIZE = 10;
const GRID_N = 20;
const sX = signX > 0 ? 1 : -1;
const sZ = signZ > 0 ? 1 : -1;
for (let i = 0; i < GRID_N; i++) {
for (let j = 0; j < GRID_N; j++) {
const offX = i * GRID_SIZE * sX;
const offZ = j * GRID_SIZE * sZ;
const geo = new THREE.BufferGeometry();
const verts = new Float32Array([
offX, 0, offZ,
offX, 0, offZ + GRID_SIZE,
offX + GRID_SIZE, 0, offZ + GRID_SIZE,
offX + GRID_SIZE, 0, offZ,
offX, 0, offZ]);
geo.addAttribute('position', new THREE.BufferAttribute(verts, 3));
const mat = new THREE.LineBasicMaterial({ color: 0 });
const line = new THREE.Line(geo, mat);
this.scene.add(line);
}
}
}
setupRenderer() {
const renderer = new THREE.WebGLRenderer({ alpha: true });
renderer.setSize(this.window.innerWidth, this.window.innerHeight);
this.renderer = renderer;
this.window.document.body.appendChild(r.........完整代码请登录后点击上方下载按钮下载查看
网友评论0