我正在参加掘金社区游戏创意投稿大赛个人赛,详情请看:游戏创意投稿大赛
声明:本文涉及图文和模型素材仅用于个人学习、研究和欣赏,请勿二次修改、非法传播、转载、出版、商用、及进行其他获利行为。
在线预览:
设计
本游戏是一个打字游戏,使用键盘敲出对应字母,就可以将木头人压下去,同时会出现一个新的木头人。每打掉5个木头人,将会有一个特效。
实现
首先设置场景
renderer.setClearColor(new THREE.Color(0x001a31));
// 地面纹理
const texture = loader.load("./grass.png");
texture.wrapS = texture.wrapT = THREE.RepeatWrapping;
这个颜色是整个环境的背景色,代表这是晚上的天空。
同时也可以用scene的background设置,这个可以设置更加复杂的场景,不过本游戏的场景没有那么复杂。
地面纹理则使用了贴地板砖的方式,由于本人使用的花生壳穿透,速度较慢,不得不将纹理图片裁切小。
更新3d世界中各物体的状态
Ground.update();
Light.update();
Camera.update();
Bottle.update();
update方法屏蔽了接口的具体实现,以便可以进行很好的扩展。
木头人
const basicMaterial = new THREE.MeshPhongMaterial({
color: cryMaterial,
});
const head = new THREE.SphereGeometry(5, 32, 32);
const body = new THREE.SphereGeometry(8, 32, 32);
const headMesh = new THREE.Mesh(head, smileMaterial);
const bodyMesh = new THREE.Mesh(body, basicMaterial);
headMesh.position.y = 12;
headMesh.rotation.y = 3.2;
headMesh.name = "bottle";
木头人采用两个球体实现,使用了一个笑脸贴图,勾勒面部轮廓。 头部应该在上面,所有y值对应有所提高,这个需要调参。
分数
<div
style={{
position: "fixed",
top: 10,
zIndex: 99,
left: 10,
width: 200,
color: "#1650af",
}}
>
{this.state.count}
</div>
左上角有一个分数显示。
监听
const keyMap = {
65: "A",
66: "B",
67: "C",
68: "D",
69: "E",
70: "F",
71: "G",
72: "H",
73: "I",
74: "J",
75: "K",
76: "L",
77: "M",
78: "N",
79: "O",
80: "P",
81: "Q",
82: "R",
83: "S",
84: "T",
85: "U",
86: "V",
87: "W",
88: "X",
89: "Y",
90: "Z",
};
本游戏监听了26各英文字母,当按下按键时,如果和随机生成的编码匹配,则会调用木头人的showUp
方法。
showup(x, y, z) {
this.obj.visible = true;
this.obj.position.z = z;
customAnimation.to(this.obj.position, { y: -20 }, { y: 5 }, null, 1000);
this.scene.remove(this.textMesh);
this.genText(x, y, z);
}
最后是粒子动画
this.particles.scale.set(1, 1, 1);
customAnimation.to(
this.particles.position,
{ y: 30 },
{ y: 60 },
"Linear",
1000
);
customAnimation.to(
this.particles.scale,
{ x: 0, y: 0, z: 0 },
{ x: 1, y: 1, z: 1 },
"Linear",
1000
);
customAnimation.to(
this.particles.scale,
{ x: 1, y: 1, z: 1 },
{ x: 0, y: 0, z: 0 },
null,
2000
);
这些粒子都是使用random()胡乱生成的,位置由地面升到天空,30到60,体积大小在第一秒由0到1,在第2秒则在0和1之间做钟摆运动,最后消失。
感谢阅读,欢迎体验点赞。【网速较慢】