我一整天都在试图为我的游戏构建一个改变级别的机制。基本上我有一个世界地图,用户通过点击地图加载不同的级别。但是必须存在范围问题,因为我无法成功加载级别。
这是我的代码:
<body onload="start(world001map);"> <!--start the game with the worldmap -->
</body>
function start(whichLevel) {
whichLevel();
};
function world001map(){ //world001map contains everything needed to build the map
document.getElementById('click_to_start_area')
.addEventListener("click", //trying start level001
function(){
start(level001);//white screen
//if I do alert(level001) it shows me the content of the level001 function
})
}
function level001(){
//bunch of staff for level001
}
你能发现薄弱环节吗?处理从其他游戏关卡中加载不同游戏关卡的更好方法是什么?
编辑:
听起来愚蠢的风险(仍然是这样的新手)是否有任何机会在level001的所有代码都循环之后,我们将其“结果”返回给事件调用者?我们只是返回它的“结果”而不是保持在“水平”中,这可能是问题所在?这有什么意义吗?
EDIT2:
这可能会有所帮助:如果我只是在onload =“start(level001);”
之类的onload语句中插入level001然后level001正确加载。那么为什么从click函数内部调用时它不能正确加载?
EDIT3: 经过更多调试后,我有以下想法: 直接从body onload调用时为什么一切正常工作的最佳解释可能不是函数调用的范围,而是当我直接从body onload加载一个级别时,该页面还没有其他任何操作。我现在开始认为前一级别的“垃圾”不知何故阻止了下一级别的工作。我的主要嫌疑人是画布元素。事实上,当我从world001map中删除与canvas相关的所有内容时,level001将加载(尽管它的运行速度非常慢)。
答案 0 :(得分:0)
处理从其他游戏关卡中加载不同游戏关卡的更好方法是什么?
您可以使用包含所有不同级别的方法的对象。
var levels = {
'world001map': function () { //world001map contains everything needed to build the map
document.getElementById('click_to_start_area').addEventListener("click", this.level001)
},
'level001': function () {
//bunch of staff for level001
}
};
// you may call it using a string
levels['level001']();
将javascript置于html调用之上
<body onload="levels.world001map();">