一.简介
3D贪吃蛇是贪吃蛇游戏的3D版本。通过摄取食物,累积数量来通关,随着摄取食物的增加,蛇身体会慢慢变长变肥大。游戏开放了许多快捷键,方便玩家操作。游戏一共七个关卡,一关比一关难。最后一关的随机障碍物更加是玩家的噩梦。为了获取更好的游戏体验,推荐使用谷歌浏览器或者枫树浏览器。
二.游戏框架和开发团队
这个游戏是使用Jscex作为动画引擎,使用Three.js框架作为3D引擎开发的HTML5游戏.
使用到的HTML5特性主要包括Canvas, CSS3 (按钮),没有使用WebGL。后期打算加入localStorage存储关卡信息。
在游戏中, 控制小蛇躲避前方的障碍物, 同时去吃前方的食物。与传统的贪吃蛇区别是:蛇吃完食物后身体会长大,而不仅仅是变长。
通过该游戏的开发,让团队对HTML5的未来更加充满信心.
- 团队名称:砖家队
- 作品名称:《3D Anakonda》
- 团队成员:张磊、方方莹
队长+主程:张磊
策划:张磊、方方莹
测试:张磊、方方莹
美工:张磊
程序:张磊
三.游戏指南
a. 上下左右控制蛇的运动方向
b. SHIFT切换速度模式
c. 按住Ctrl加速,放开不加速
d. L打开或者关闭光影开关,关闭光影的效果如下:
e. V切换到推荐视角
f. 按住鼠标旋转视角
四.核心代码
见2D贪吃蛇http://www.cnblogs.com/iamzhanglei/archive/2011/10/08/2200858.html
光影开关:
// Lights
if (scene.lights.length == 0) {
var ambientLight = new THREE.AmbientLight(0x555555);
scene.addLight(ambientLight);
var directionalLight = new THREE.DirectionalLight(0xffffff);
directionalLight.position.x = -0.5;
directionalLight.position.y = -0.5;
directionalLight.position.z = 0.005;
directionalLight.position.normalize();
scene.addLight(directionalLight);
var directionalLight = new THREE.DirectionalLight(0x808080);
directionalLight.position.x = -0.1;
directionalLight.position.y = 0.3;
directionalLight.position.z = 0.5;
directionalLight.position.normalize();
scene.addLight(directionalLight);
} else {
scene.lights.length = 0;
}
加速和减速控制:
var moveAsync = eval(Jscex.compile("async", function () {
while (true) {
......
......
......
$await(Jscex.Async.sleep(speed));
}
}));
相当于通过键盘事件来控制speed就可以了。
文字旋转以及移动特效:
var wordMoveAsync = eval(Jscex.compile("async", function () {
while (playParent.position.x > -500) {
$await(Jscex.Async.sleep(1));
playParent.position.x -= 30;
render();
}
}))
var logoMoveAsync = eval(Jscex.compile("async", function () {
while (true) {
$await(Jscex.Async.sleep(1));
logoParent.position.z -= 30;
if (logoParent.position.z < -450) {
initSnakeBody();
moveAsync().start();
break;
}
}
}))
var wordMoveBackAsync = eval(Jscex.compile("async", function () {
while (playParent.position.x < 0) {
$await(Jscex.Async.sleep(1));
//-100
playParent.position.x += 30;
render();
}
}))
var logoMoveBackAsync = eval(Jscex.compile("async", function () {
while (true) {
$await(Jscex.Async.sleep(1));
logoParent.position.z += 30;
if (logoParent.position.z > 300) {
if (gameOverTextParent) {
scene.removeChild(gameOverTextParent);
}
if (completeTextParent) {
scene.removeChild(completeTextParent);
}
for (var i = 1; i < mission + 1; i++) {
document.getElementById("Button" + i).disabled = ""
}
break;
}
}
}))
var rotationLogoAsync = eval(Jscex.compile("async", function () {
while (true) {
$await(Jscex.Async.sleep(50))
logoParent.rotation.y += 0.1;
render();
}
}))
rotationLogoAsync().start();
五.总结
本游戏由两人团队完成,还有很多不足,本想增加一些可玩性,比如加入一些变速食物和中毒的食物,比如蛇大到一定程度可以吃障碍物,但是由于时间关系,最终没抽出时间去实现。
同步
本文已同步更新至: