resetGame & core.init

This commit is contained in:
ckcz123 2019-03-17 18:00:00 +08:00
parent e945a81ccd
commit 147da1b443
8 changed files with 176 additions and 255 deletions

View File

@ -90,7 +90,7 @@ editor.prototype.init = function (callback) {
editor.file = editor_file;
editor_mode = editor_mode(editor);
editor.mode = editor_mode;
core.resetStatus(core.firstData.hero, null, core.firstData.floorId, null, core.initStatus.maps);
core.resetGame(core.firstData.hero, null, core.firstData.floorId, core.initStatus.maps);
core.changeFloor(core.status.floorId, null, core.firstData.hero.loc, null, function () {
afterCoreReset();
}, true);

View File

@ -4,14 +4,13 @@ var functions_comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
"_type": "object",
"_data": {
"events": {
"_type": "object",
"_data": {
"initGame": {
"resetGame": {
"_leaf": true,
"_type": "textarea",
"_lint": true,
"_data": "游戏开始前的一些初始化操作"
"_data": "重置整个游戏"
},
"setInitData": {
"_leaf": true,

View File

@ -25,6 +25,8 @@ control.prototype._init = function () {
this.registerAnimationFrame("_checkConsoleOpened", true, this._animationFrame_checkConsoleOpened);
}
// ------ requestAnimationFrame 相关 ------ //
////// 注册一个 animationFrame //////
// name名称可用来作为注销使用needPlaying是否只在游戏运行时才执行在标题界面不执行
// func要执行的函数或插件中的函数名可接受timestamp从页面加载完毕到当前所经过的时间作为参数
@ -286,9 +288,19 @@ control.prototype._animationFrame_checkConsoleOpened = function (timestamp) {
if (core.consoleOpened()) core.setFlag('__consoleOpened__', true);
}
// ------ 标题界面的处理 ------ //
////// 显示游戏开始界面 //////
control.prototype.showStartAnimate = function (noAnimate, callback) {
this._showStartAnimate_resetDom();
if (core.flags.startUsingCanvas || noAnimate)
return this._showStartAnimate_finished(core.flags.startUsingCanvas, callback);
core.hide(core.dom.startTop, 20, function () {
core.control._showStartAnimate_finished(false, callback);
});
}
control.prototype._showStartAnimate_resetDom = function () {
core.dom.startPanel.style.opacity=1;
core.dom.startPanel.style.display="block";
core.dom.startTop.style.opacity=1;
@ -300,59 +312,21 @@ control.prototype.showStartAnimate = function (noAnimate, callback) {
core.clearStatus();
core.clearMap('all');
core.deleteAllCanvas();
core.dom.musicBtn.style.display = 'block';
// 重置音量
core.events.setVolume(1, 0);
}
if (core.flags.startUsingCanvas) {
control.prototype._showStartAnimate_finished = function (start, callback) {
core.dom.startTop.style.display = 'none';
core.dom.startButtonGroup.style.display = 'block';
core.events.startGame('');
if (core.isset(callback)) callback();
return;
}
if(noAnimate) {
core.dom.startTop.style.display = 'none';
// core.playGame();
core.dom.startButtonGroup.style.display = 'block';
if (core.isset(callback)) callback();
}
else {
var opacityVal = 1;
var startAnimate = window.setInterval(function () {
opacityVal -= 0.03;
if (opacityVal < 0) {
clearInterval(startAnimate);
core.dom.startTop.style.display = 'none';
// core.playGame();
core.dom.startButtonGroup.style.display = 'block';
if (core.isset(callback)) callback();
}
core.dom.startTop.style.opacity = opacityVal;
}, 20);
}
}
control.prototype._showStartAnimate_resetDom = function () {
if (start) core.startGame();
if (callback) callback();
}
////// 隐藏游戏开始界面 //////
control.prototype.hideStartAnimate = function (callback) {
var opacityVal = 1;
var startAnimate = window.setInterval(function () {
opacityVal -= 0.03;
if (opacityVal < 0) {
clearInterval(startAnimate);
core.dom.startPanel.style.display = 'none';
if (core.isset(callback)) callback();
}
core.dom.startPanel.style.opacity = opacityVal;
}, 20);
core.hide(core.dom.startPanel, 20, callback);
}
////// 游戏是否已经开始 //////
@ -381,31 +355,9 @@ control.prototype.clearStatus = function() {
core.clearStatusBar();
core.deleteAllCanvas();
core.status.played = false;
core.events.setHeroIcon('hero.png', true);
}
////// 重置游戏状态和初始数据 //////
control.prototype.resetStatus = function(hero, hard, floorId, route, maps, values) {
var totalTime = core.animateFrame.totalTime;
// 清除游戏数据
core.clearStatus();
// 初始化status
core.status = core.clone(core.initStatus);
core.status.played = true;
// 初始化maps
core.status.floorId = floorId;
core.status.maps = core.clone(maps);
// 初始化怪物
core.material.enemys = core.enemys.getEnemys();
core.material.items = core.items.getItems();
// 初始化人物属性
core.status.hero = core.clone(hero);
// 初始化人物图标
core.events.setHeroIcon(core.getFlag('heroIcon', 'hero.png'), true);
// 统计数据
control.prototype._initStatistics = function (totalTime) {
if (!core.isset(core.status.hero.statistics))
core.status.hero.statistics = {
'totalTime': totalTime,
@ -420,29 +372,6 @@ control.prototype.resetStatus = function(hero, hard, floorId, route, maps, value
'moveDirectly': 0,
'ignoreSteps': 0,
}
core.status.hero.statistics.totalTime = core.animateFrame.totalTime =
Math.max(core.status.hero.statistics.totalTime, core.animateFrame.totalTime);
core.status.hero.statistics.start = null;
core.status.hard = hard;
// 初始化路线
if (core.isset(route))
core.status.route = route;
if (core.isset(values))
core.values = core.clone(values);
else core.values = core.clone(core.data.values);
core.flags = core.clone(core.data.flags);
var systemFlags = core.getFlag("globalFlags", {});
for (var key in systemFlags)
core.flags[key] = systemFlags[key];
core.events.initGame();
core.resize();
this.updateGlobalAttribute(Object.keys(core.status.globalAttribute));
this.triggerStatusBar(core.getFlag('hideStatusBar', false)?'hide':'show', core.getFlag("showToolbox"));
core.dom.musicBtn.style.display = 'none';
}
@ -2466,8 +2395,8 @@ control.prototype.saveData = function() {
////// 从本地读档 //////
control.prototype.loadData = function (data, callback) {
core.resetStatus(data.hero, data.hard, data.floorId, core.decodeRoute(data.route), core.maps.loadMap(data.maps),
data.values);
core.resetGame(data.hero, data.hard, data.floorId, core.maps.loadMap(data.maps), data.values);
core.status.route = core.decodeRoute(data.route);
// load shop times
for (var shop in core.status.shops) {

View File

@ -216,37 +216,47 @@ function core() {
////// 初始化 //////
core.prototype.init = function (coreData, callback) {
this._forwardFuncs();
for (var key in coreData) {
for (var key in coreData)
core[key] = coreData[key];
this._init_flags();
this._init_platform();
this._init_others();
core.loader._load(function () {
core._afterLoadResources(callback);
});
}
core.prototype._init_flags = function () {
core.flags = core.clone(core.data.flags);
core.values = core.clone(core.data.values);
core.firstData = core.data.getFirstData();
core.firstData = core.clone(core.data.firstData);
if (!core.flags.enableExperience)
core.flags.enableLevelUp = false;
if (!core.flags.enableLevelUp)
core.flags.levelUpLeftMode = false;
if (core.firstData.shops) {
core.firstData.shops.forEach(function (t) {
core.initStatus.shops[t.id] = t;
})
}
core.maps._setFloorSize();
if (!core.flags.enableExperience) core.flags.enableLevelUp = false;
if (!core.flags.enableLevelUp) core.flags.levelUpLeftMode = false;
if (core.flags.equipboxButton) core.flags.equipment = true;
core.flags.displayEnemyDamage = core.getLocalStorage('enemyDamage', core.flags.displayEnemyDamage);
core.flags.displayCritical = core.getLocalStorage('critical', core.flags.displayCritical);
core.flags.displayExtraDamage = core.getLocalStorage('extraDamage', core.flags.displayExtraDamage);
core.dom.versionLabel.innerHTML = core.firstData.version;
core.dom.logoLabel.innerHTML = core.firstData.title;
document.title = core.firstData.title + " - HTML5魔塔";
document.getElementById("startLogo").innerHTML = core.firstData.title;
core.material.items = core.items.getItems();
(core.firstData.shops||[]).forEach(function (t) { core.initStatus.shops[t.id] = t; });
core.maps._setFloorSize();
// 初始化地图
core.initStatus.maps = core.maps.initMaps(core.floorIds);
// 初始化怪物、道具等
core.material.enemys = core.enemys.getEnemys();
core.material.items = core.items.getItems();
core.items._resetItems();
core.material.icons = core.icons.getIcons();
}
core.prototype._init_platform = function () {
core.platform.isOnline = location.protocol.indexOf("http") == 0;
if (core.platform.isOnline) {
if (!core.platform.isOnline) alert("请勿直接打开html文件使用启动服务或者APP进行离线游戏。");
window.AudioContext = window.AudioContext || window.webkitAudioContext || window.mozAudioContext || window.msAudioContext;
try {
core.musicStatus.audioContext = new window.AudioContext();
@ -256,8 +266,8 @@ core.prototype.init = function (coreData, callback) {
console.log("该浏览器不支持AudioContext");
core.musicStatus.audioContext = null;
}
}
core.musicStatus.bgmStatus = core.getLocalStorage('bgmStatus', true);
core.musicStatus.soundStatus = core.getLocalStorage('soundStatus', true);
["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"].forEach(function (t) {
if (navigator.userAgent.indexOf(t) >= 0) {
if (t == 'iPhone' || t == 'iPad' || t == 'iPod') core.platform.isIOS = true;
@ -265,21 +275,32 @@ core.prototype.init = function (coreData, callback) {
core.platform.isPC = false;
}
});
try {
core.platform.supportCopy = document.queryCommandSupported("copy");
}
catch (e) {
core.platform.supportCopy = false;
}
core.platform.supportCopy = document.queryCommandSupported || document.queryCommandSupported("copy");
var chrome = /Chrome\/(\d+)\./i.exec(navigator.userAgent);
if (chrome && parseInt(chrome[1]) >= 50)
core.platform.isChrome = true;
if (chrome && parseInt(chrome[1]) >= 50) core.platform.isChrome = true;
core.platform.isSafari = /Safari/i.test(navigator.userAgent) && !/Chrome/i.test(navigator.userAgent);
core.platform.isQQ = /QQ/i.test(navigator.userAgent);
core.platform.isWeChat = /MicroMessenger/i.test(navigator.userAgent);
this._init_checkLocalForage();
core.platform.extendKeyboard = core.getLocalStorage("extendKeyboard", false);
if (window.FileReader) {
core.platform.fileReader = new FileReader();
core.platform.fileReader.onload = function () {
core.readFileContent(core.platform.fileReader.result);
};
core.platform.fileReader.onerror = function () {
if (core.platform.errorCallback)
core.platform.errorCallback();
}
}
}
core.prototype._init_checkLocalForage = function () {
core.platform.useLocalForage = core.getLocalStorage('useLocalForage', !core.platform.isIOS);
var _error = function (e) {
main.log(e);
core.platform.useLocalForage = false;
};
if (core.platform.useLocalForage) {
try {
core.setLocalForage("__test__", lzw_encode("__test__"), function () {
@ -291,106 +312,43 @@ core.prototype.init = function (coreData, callback) {
core.platform.useLocalForage = false;
}
else {
console.log("localForage supported!")
console.log("localForage supported!");
core.removeLocalForage("__test__");
}
}
catch (e) {
main.log(e);
core.platform.useLocalForage = false;
catch (e) {_error(e);}
}, _error)
}
}, function (e) {
main.log(e);
core.platform.useLocalForage = false;
})
catch (e) {_error(e);}
}, _error)
}
catch (e) {
main.log(e);
core.platform.useLocalForage = false;
}
}, function (e) {
main.log(e);
core.platform.useLocalForage = false;
})
}
catch (e) {
main.log(e);
core.platform.useLocalForage = false;
catch (e) {_error(e);}
}
}
core.platform.extendKeyboard = core.getLocalStorage("extendKeyboard", false);
if (window.FileReader) {
core.platform.fileReader = new FileReader();
core.platform.fileReader.onload = function () {
core.readFileContent(core.platform.fileReader.result);
};
core.platform.fileReader.onerror = function () {
if (core.platform.errorCallback)
core.platform.errorCallback();
}
}
// 先从存储中读取BGM状态
core.musicStatus.bgmStatus = core.getLocalStorage('bgmStatus', true);
if (!core.platform.isPC && (navigator.connection || {}).type != 'wifi')
core.musicStatus.bgmStatus = false;
core.musicStatus.soundStatus = core.getLocalStorage('soundStatus', true);
// switchs
core.flags.displayEnemyDamage = core.getLocalStorage('enemyDamage', core.flags.displayEnemyDamage);
core.flags.displayCritical = core.getLocalStorage('critical', core.flags.displayCritical);
core.flags.displayExtraDamage = core.getLocalStorage('extraDamage', core.flags.displayExtraDamage);
core.prototype._init_others = function () {
// 一些额外的东西
core.material.groundCanvas = document.createElement('canvas').getContext('2d');
core.material.groundCanvas.canvas.width = core.material.groundCanvas.canvas.height = 32;
core.material.groundPattern = core.material.groundCanvas.createPattern(core.material.groundCanvas.canvas, 'repeat');
core.animateFrame.weather.fog = new Image();
core.animateFrame.weather.fog.onerror = function () {
core.animateFrame.weather.fog = null;
}
core.animateFrame.weather.fog.src = "project/images/fog.png";
core.material.images.keyboard = new Image();
core.material.images.keyboard.onerror = function () {
core.material.images.keyboard = null;
}
core.material.images.keyboard.src = "project/images/keyboard.png";
core.bigmap.tempCanvas = document.createElement('canvas').getContext('2d');
////// 记录所有的存档编号!!! //////
core.loadImage('fog', function (name, img) { core.animateFrame.weather.fog = img; });
core.loadImage('keyboard', function (name, img) {core.material.images.keyboard = img; });
// 记录存档编号
core.saves.saveIndex = core.getLocalStorage('saveIndex', 1);
core.control.getSaveIndexes(function (indexes) {
core.saves.ids = indexes;
});
core.control.getSaveIndexes(function (indexes) { core.saves.ids = indexes; });
}
core.loader._load(function () {
// 设置勇士高度
core.material.icons.hero.height = core.material.images.hero.height / 4;
// 行走图
core.control.updateHeroIcon();
core.initStatus.maps = core.maps.initMaps(core.floorIds);
core.prototype._afterLoadResources = function (callback) {
core.control._setRequestAnimationFrame();
if (main.mode == 'play')
core.events.initGame();
if (functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.plugins) {
core.plugin = new function () {};
core.plugin.__init__ = functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a.plugins.plugin;
core.plugin.__init__();
core._forwardFunc("plugin");
}
core.showStartAnimate();
if (callback) callback();
});
}
core.prototype._forwardFuncs = function () {

View File

@ -10,7 +10,3 @@ data.prototype._init = function () {
this.flags = data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.flags;
//delete(data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d);
}
data.prototype.getFirstData = function () {
return core.clone(this.firstData);
}

View File

@ -15,14 +15,15 @@ events.prototype._init = function () {
// ------ 初始化,开始和结束 ------ //
/// 初始化游戏
events.prototype.initGame = function () {
return this.eventdata.initGame();
events.prototype.resetGame = function (hero, hard, floorId, maps, values) {
return this.eventdata.resetGame(hero, hard, floorId, maps, values);
}
////// 游戏开始事件 //////
events.prototype.startGame = function (hard, seed, route, callback) {
main.dom.levelChooseButtons.style.display = 'none';
main.dom.startButtonGroup.style.display = 'none';
hard = hard || "";
if (main.mode != 'play') return;
@ -40,7 +41,7 @@ events.prototype.startGame = function (hard, seed, route, callback) {
events.prototype._startGame_start = function (hard, seed, route, callback) {
console.log('开始游戏');
core.resetStatus(core.firstData.hero, hard, null, null, core.initStatus.maps);
core.resetGame(core.firstData.hero, hard, null, core.initStatus.maps);
var nowLoc = core.clone(core.getHeroLoc());
core.setHeroLoc('x', -1);
core.setHeroLoc('y', -1);

View File

@ -21,6 +21,35 @@ items.prototype.getItems = function () {
return core.clone(this.items);
}
items.prototype._resetItems = function () {
// 只有运行时才能执行此函数!
if (main.mode != 'play') return;
// 根据flag来对道具进行修改
if (core.flags.bigKeyIsBox) {
core.material.items.bigKey.cls = 'items';
core.material.items.bigKey.name = '钥匙盒';
}
if (core.flags.pickaxeFourDirections)
core.material.items.pickaxe.text = "可以破坏勇士四周的墙";
if (core.flags.bombFourDirections)
core.material.items.bomb.text = "可以炸掉勇士四周的怪物";
if (core.flags.snowFourDirections)
core.material.items.bomb.text = "可以将四周的熔岩变成平地";
if (core.flags.equipment) {
core.material.items.sword1.cls = 'equips';
core.material.items.sword2.cls = 'equips';
core.material.items.sword3.cls = 'equips';
core.material.items.sword4.cls = 'equips';
core.material.items.sword5.cls = 'equips';
core.material.items.shield1.cls = 'equips';
core.material.items.shield2.cls = 'equips';
core.material.items.shield3.cls = 'equips';
core.material.items.shield4.cls = 'equips';
core.material.items.shield5.cls = 'equips';
}
}
////// “即捡即用类”道具的使用效果 //////
items.prototype.getItemEffect = function (itemId, itemNum) {
var itemCls = core.material.items[itemId].cls;

View File

@ -1,36 +1,45 @@
var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
{
"events": {
"initGame": function() {
// 游戏开始前的一些初始化操作
"resetGame": function (hero, hard, floorId, maps, values) {
// 重置整个游戏;此函数将在游戏开始时,或者每次读档时最先被调用
// hero勇士信息hard难度floorId当前楼层IDmaps地图信息values全局数值信息
// 根据flag来对道具进行修改
if (core.flags.bigKeyIsBox)
core.material.items.bigKey = {'cls': 'items', 'name': '钥匙盒'};
// 面前的墙?四周的墙?
if (core.flags.pickaxeFourDirections)
core.material.items.pickaxe.text = "可以破坏勇士四周的墙";
if (core.flags.bombFourDirections)
core.material.items.bomb.text = "可以炸掉勇士四周的怪物";
if (core.flags.snowFourDirections)
core.material.items.bomb.text = "可以将四周的熔岩变成平地";
// 是否启用装备栏
if (core.flags.equipboxButton) {
core.statusBar.image.fly.src = core.statusBar.icons.equipbox.src;
core.flags.equipment = true;
}
if (core.flags.equipment) {
core.material.items.sword1.cls = 'equips';
core.material.items.sword2.cls = 'equips';
core.material.items.sword3.cls = 'equips';
core.material.items.sword4.cls = 'equips';
core.material.items.sword5.cls = 'equips';
core.material.items.shield1.cls = 'equips';
core.material.items.shield2.cls = 'equips';
core.material.items.shield3.cls = 'equips';
core.material.items.shield4.cls = 'equips';
core.material.items.shield5.cls = 'equips';
}
// 清除游戏数据
core.clearStatus();
// 初始化status
core.status = core.clone(core.initStatus);
core.status.played = true;
// 初始化人物,图标,统计信息
core.status.hero = core.clone(hero);
core.events.setHeroIcon(core.getFlag('heroIcon', 'hero.png'), true);
core.control._initStatistics(core.animateFrame.totalTime);
core.status.hero.statistics.totalTime = core.animateFrame.totalTime =
Math.max(core.status.hero.statistics.totalTime, core.animateFrame.totalTime);
core.status.hero.statistics.start = null;
// 初始难度
core.status.hard = hard || "";
// 初始化地图
core.status.floorId = floorId;
core.status.maps = core.clone(maps);
// 初始化怪物和道具
core.material.enemys = core.enemys.getEnemys();
core.material.items = core.items.getItems();
core.items._resetItems();
// 初始化全局数值和全局开关
core.values = core.clone(core.data.values);
for (var key in values || {})
core.values[key] = values[key];
core.flags = core.clone(core.data.flags);
var globalFlags = core.getFlag("globalFlags", {});
for (var key in globalFlags)
core.flags[key] = globalFlags[key];
// 初始化界面,状态栏等
core.resize();
core.updateGlobalAttribute(Object.keys(core.status.globalAttribute));
core.triggerStatusBar(core.hasFlag('hideStatusBar') ? 'hide' : 'show', core.hasFlag('showToolbox'));
// 隐藏右下角的音乐按钮
core.dom.musicBtn.style.display = 'none';
},
"setInitData": function () {
// 不同难度分别设置初始属性