npc48 animate & loadBgm

This commit is contained in:
oc 2019-03-10 13:50:55 +08:00
parent 9739612132
commit 622f5eb8be
9 changed files with 50 additions and 43 deletions

View File

@ -1316,13 +1316,11 @@ async可选如果为true则会异步执行即不等待当前事件执行
### pauseBgm暂停背景音乐
使用`{"type": "pauseBgm"}`可以暂停背景音乐的播放。
<!--
### resumeBgm恢复背景音乐
使用`{"type": "resumeBgm"}`可以恢复背景音乐的播放。
**从V2.5.4开始不再支持此事件,请通过设置音量来达到此效果。**
-->
### loadBgm预加载一个背景音乐
使用loadBgm可以预加载一个背景音乐。

View File

@ -5,7 +5,7 @@ grammar MotaAction;
//事件 事件编辑器入口之一
event_m
: '事件' BGNL? Newline '覆盖触发器' Bool '启用' Bool '通行状态' B_0_List '动画' Bool '显伤' Bool BGNL? Newline action+ BEND
: '事件' BGNL? Newline '覆盖触发器' Bool '启用' Bool '通行状态' B_0_List '显伤' Bool BGNL? Newline action+ BEND
/* event_m
@ -17,11 +17,10 @@ var code = {
'trigger': Bool_0?'action':null,
'enable': Bool_1,
'noPass': B_0_List_0,
'animate': Bool_2,
'displayDamage': Bool_3,
'displayDamage': Bool_2,
'data': 'data_asdfefw'
}
if (!Bool_0 && Bool_1 && (B_0_List_0===null) && Bool_2 && Bool_3) code = 'data_asdfefw';
if (!Bool_0 && Bool_1 && (B_0_List_0===null) && Bool_2) code = 'data_asdfefw';
code=JSON.stringify(code,null,2).split('"data_asdfefw"').join('[\n'+action_0+']\n');
return code;
*/;
@ -1994,7 +1993,7 @@ ActionParser.prototype.parse = function (obj,type) {
if(typeof(obj)===typeof('')) obj={'data':[obj]};
if(obj instanceof Array) obj={'data':obj};
return MotaActionBlocks['event_m'].xmlText([
obj.trigger==='action',obj.enable,obj.noPass,obj.animate,obj.displayDamage,this.parseList(obj.data)
obj.trigger==='action',obj.enable,obj.noPass,obj.displayDamage,this.parseList(obj.data)
]);
case 'changeFloor':

View File

@ -263,6 +263,12 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc =
"_range": "thiseval==null||(thiseval instanceof Array)",
"_data": "该图块的不可入方向\n可以在这里定义不能朝哪个方向进入该图块可以达到悬崖之类的效果\n例如 [\"down\"] 代表不能从该图块的上方点朝向下进入此图块\n此值对背景层、事件层、前景层上的图块均有效"
},
"animate": {
"_leaf": true,
"_type": "textarea",
"_range": "thiseval==~~thiseval||thiseval==null",
"_data": "该图块的全局动画帧数。\n如果此项为null则对于除了npc48外使用素材默认帧数npc48默认是1帧即静止。"
},
"faceIds": {
"_leaf": true,
"_type": "textarea",

View File

@ -2639,7 +2639,7 @@ control.prototype.unLockControl = function () {
}
////// 播放背景音乐 //////
control.prototype.playBgm = function (bgm) {
control.prototype.playBgm = function (bgm, startTime) {
if (main.mode!='play')return;
// 音频不存在
if (!core.isset(core.material.bgms[bgm])) return;
@ -2657,14 +2657,6 @@ control.prototype.playBgm = function (bgm) {
}
this.setMusicBtn();
/*
// 延迟播放
if (core.material.bgms[bgm] == 'loading') {
core.material.bgms[bgm] = 'starting';
return;
}
*/
try {
// 缓存BGM
core.loader.loadBgm(bgm);
@ -2678,7 +2670,7 @@ control.prototype.playBgm = function (bgm) {
}
// 播放当前BGM
core.material.bgms[bgm].volume = core.musicStatus.volume;
core.material.bgms[bgm].currentTime = 0;
core.material.bgms[bgm].currentTime = startTime || 0;
core.material.bgms[bgm].play();
core.musicStatus.playingBgm = bgm;
core.musicStatus.lastBgm = bgm;

View File

@ -962,8 +962,7 @@ events.prototype.doAction = function() {
this.doAction();
break
case "loadBgm":
if (core.platform.isPC)
core.loadBgm(data.name);
core.loadBgm(data.name);
this.doAction();
break;
case "freeBgm":

View File

@ -64,6 +64,7 @@ items.prototype.getItemEffectTip = function(itemId) {
items.prototype._useItemEffect = function (itemId) {
if (itemId in this.useItemEffect) {
try {
var ratio = parseInt(core.status.thisMap.item_ratio) || 1;
eval(this.useItemEffect[itemId]);
}
catch (e) {
@ -171,7 +172,7 @@ items.prototype.setItem = function (itemId, itemNum) {
////// 删除某个物品 //////
items.prototype.removeItem = function (itemId, itemNum) {
if (!core.isset(core.status.hero)) return null;
itemNum = itemNum || 1;
if (!core.isset(itemNum)) itemNum = 1;
if (!core.hasItem(itemId)) return false;
var itemCls = core.material.items[itemId].cls;
core.status.hero.items[itemCls][itemId]-=itemNum;
@ -186,7 +187,7 @@ items.prototype.removeItem = function (itemId, itemNum) {
////// 增加某个物品的个数 //////
items.prototype.addItem = function (itemId, itemNum) {
if (!core.isset(core.status.hero)) return null;
itemNum = itemNum || 1;
if (!core.isset(itemNum)) itemNum = 1;
var itemData = core.material.items[itemId];
var itemCls = itemData.cls;
if (itemCls == 'items') return;

View File

@ -254,6 +254,11 @@ loader.prototype.freeBgm = function (name) {
}, 3000);
}
loader.prototype._preloadBgm = function (bgm) {
bgm.volume = 0;
bgm.play();
}
loader.prototype.loadBgm = function (name) {
if (!core.isset(core.material.bgms[name])) return;
// 如果没开启音乐,则不预加载
@ -265,7 +270,8 @@ loader.prototype.loadBgm = function (name) {
}
else {
// 预加载BGM
core.material.bgms[name].load();
this._preloadBgm(core.material.bgms[name]);
// core.material.bgms[name].load();
// 清理尾巴
if (core.musicStatus.cachedBgms.length == core.musicStatus.cachedBgmCount) {
this.freeBgm(core.musicStatus.cachedBgms.pop());

View File

@ -98,6 +98,19 @@ maps.prototype.initBlock = function (x, y, id) {
return tmp;
}
maps.prototype._getAnimateFrames = function (cls, useOriginValue) {
if (cls=='enemys' || cls=='npcs') {
return 2;
}
if (cls == 'animates' || cls == 'enemy48') {
return 4;
}
if (cls == 'npc48') {
return useOriginValue? 4 : 1;
}
return 1;
}
////// 添加一些信息到block上 //////
maps.prototype.addInfo = function (block) {
if (core.isset(block.event)) {
@ -113,12 +126,7 @@ maps.prototype.addInfo = function (block) {
}
}
if (!core.isset(block.event.animate)) {
if (block.event.cls=='enemys' || block.event.cls=='npcs') {
block.event.animate = 2;
}
if (block.event.cls == 'animates' || block.event.cls == 'enemy48' || block.event.cls == 'npc48') {
block.event.animate = 4;
}
block.event.animate = this._getAnimateFrames(block.event.cls, false);
}
block.event.height = 32;
if (block.event.cls == 'enemy48' || block.event.cls == 'npc48')
@ -1057,7 +1065,7 @@ maps.prototype.moveBlock = function(x,y,steps,time,keep,callback) {
destY += core.utils.scan[t].y;
});
var animateValue = block.event.animate || 1, animateCurrent = isTileset?bx:0, animateTime = 0;
var animateValue = this._getAnimateFrames(block.event.cls, true), animateCurrent = isTileset?bx:0, animateTime = 0;
var blockCanvas = this.__initBlockCanvas(block, height, x, y);
var headCanvas = blockCanvas.headCanvas, bodyCanvas = blockCanvas.bodyCanvas, damageCanvas = blockCanvas.damageCanvas;
var opacity = 1;

View File

@ -349,20 +349,18 @@ ui.prototype.getTitleAndIcon = function (content) {
var id=null, name=null, image=null, icon=null, iconHeight=32, animate=null;
var getInfo = function (v) {
["enemy48", "enemys", "npc48", "npcs"].forEach(function (x) {
if (core.isset(core.material.icons[x][v])) {
image = core.material.images[x];
icon = core.material.icons[x][v];
if (x.indexOf("48")>=0) {
iconHeight = 48;
animate = 4;
}
else {
iconHeight = 32;
animate = 2;
}
var number = core.maps.getNumberById(v);
if (number>0) {
var block = core.maps.initBlock(0,0,number);
core.maps.addInfo(block);
if (core.isset(block.event)) {
var cls = block.event.cls;
image = core.material.images[cls];
icon = core.material.icons[cls][v];
iconHeight = block.event.height;
animate = block.event.animate;
}
});
}
};
if (content.indexOf("\t[")==0 || content.indexOf("\\t[")==0) {