对于我的一个学校项目,我必须用Javascript创建一个游戏。我的Javascript体验非常小,因此我真的不知道如何在我的游戏中创建多个级别。使用JSON,我为Mario加载块以便继续:
createBlocks: function () {
console.log('game -> createBlocks');
$.getJSON('js/boxes.json', function (data) {
data.boxes.level1.forEach(function (blockData) {
this.stage.removeChild(this.block.el);
var block = new Block(blockData);
this.block.push(block);
this.stage.addChild(block.el);
}.bind(this));
}.bind(this));
}
使用“createStars”功能,游戏会加载另一个JSON。我的目标是让游戏切换到另一个级别,每收集5颗星。用JSON创建它的最佳方法是什么?
我的块的JSON文件创建如下:
{
"boxes": {
"level1": [
{
"x": 0,
"y": 115,
"width": 25,
"height": 25
},
{
"x": 25,
"y": 115,
"width": 25,
"height": 25
}
],
"level2": [
{
"x": 0,
"y": 95,
"width": 25,
"height": 25
}
]
}
}
如果您需要我的完整代码来回答我的问题,请告诉我们?我还可以提供目前在我自己的网站上托管的游戏链接:http://school.carlavanloon.com/cp/
此外,我希望游戏能够在收集到20颗星之后停止游戏。这将是游戏用户的结束时间。
非常感谢您的回复。如果我需要提供任何其他信息,请告诉我。
答案 0 :(得分:3)
不要将json文件放在“盒子”周围,而应该将json结构自上而下设计, 首先加载游戏json,它包含级别对象 - 包含框数组等。像这样的东西
var json = {
"game_data": {
"some_global_settings" : {"game_speed": 30, "theme": "dark"},
"level1": {
"boxes": [
{
"x": 0,
"y": 115,
"width": 25,
"height": 25
},
{
"x": 25,
"y": 115,
"width": 25,
"height": 25
}
],
"stars": [
{
"x": 0,
"y": 50,
"width": 25,
"height": 25
},
{
"x": 125,
"y": 120,
"width": 25,
"height": 25
}
],
"player_position" : {"x": 0,"y": 50},
"victory_condition" : {"stars_required" : 5, "time_limit" : "10min"}
},
"level2": {"same structure as above with different data" : 1}
}
}
然后创建一个级别构建器函数,它选择一个级别对象并在其中创建所有内容。要重新加载新级别,请检查剩余的星数,如果为0,则使用n + 1调用createLevel(gamelevel)以构建下一级别。
下面是伪代码示例。
每次用户收集星号时,您都会检查它是否是最后一颗星星,如果是,则增加水平计数器和调用级别构建器功能,这可能是这样的
function buildLevel( levelNr ) {
var gdata = json.game_data["level"+levelNr];
//check if next level exists in game_data object
if (!gdata) {
finishGame();
return false;
}
//next level data exists, so build whats in it
//clear level from previous stuff
clearLevel();//perhaps replace canvas with new one
createBoxes( gdata.boxes);
createStars( gdata.stars);
createPlayer( gdata.player_position);
//everything is ready, add listeners / timers etc, and start the game
}