drawAnimate alignWindow

This commit is contained in:
ckcz123 2020-05-05 15:15:59 +08:00
parent 16ed7a03ef
commit 3b50761098
8 changed files with 19 additions and 13 deletions

View File

@ -1625,7 +1625,7 @@ core.drawBoxAnimate()
绘制UI层的box动画如怪物手册和对话框中的帧动画等。
core.drawAnimate(name, x, y, callback)
core.drawAnimate(name, x, y, alignWindow, callback)
绘制一个动画。name为动画名x和y为绘制的基准坐标callback为绘制完毕的回调函数。
此函数将播放动画音效,并异步开始绘制该动画。
此函数会返回一个动画id可以通过core.stopAnimate()立刻停止该动画的播放。

View File

@ -489,7 +489,7 @@ core.maps.removeBlockByIds(floorId, ids)
根据索引删除或禁用若干块。
core.maps.drawAnimate(name, x, y, callback)
core.maps.drawAnimate(name, x, y, alignWindow, callback)
播放一段动画name为动画名需在全塔属性注册x和y为坐标0-12之间callback可选为播放完毕的回调函数。
播放过程是异步的如需等待播放完毕请使用insertAction插入一条type:waitAsync事件。
此函数将随机返回一个数字id为此异步动画的唯一标识符。

View File

@ -1624,7 +1624,7 @@ core.drawBoxAnimate()
绘制UI层的box动画如怪物手册和对话框中的帧动画等。
core.drawAnimate(name, x, y, callback)
core.drawAnimate(name, x, y, alignWindow, callback)
绘制一个动画。name为动画名x和y为绘制的基准坐标callback为绘制完毕的回调函数。
此函数将播放动画音效,并异步开始绘制该动画。
此函数会返回一个动画id可以通过core.stopAnimate()立刻停止该动画的播放。

View File

@ -1355,7 +1355,7 @@ return code;
*/;
animate_s
: '显示动画' IdString '位置' EvalString? '不等待执行完毕' Bool Newline
: '显示动画' IdString '位置' EvalString? '相对窗口坐标' Bool '不等待执行完毕' Bool Newline
/* animate_s
@ -1374,8 +1374,9 @@ if (EvalString_0) {
throw new Error('此处只能填hero或者1,2形式的位置,或者不填代表当前事件点');
}
}
var async = Bool_0?', "async": true':'';
var code = '{"type": "animate", "name": "'+IdString_0+'"'+EvalString_0+async+'},\n';
Bool_0 = Bool_0?', "alignWindow": true':'';
var async = Bool_1?', "async": true':'';
var code = '{"type": "animate", "name": "'+IdString_0+'"'+EvalString_0+Bool_0+async+'},\n';
return code;
*/;
@ -3282,7 +3283,7 @@ ActionParser.prototype.parseAction = function() {
var animate_loc = data.loc||'';
if(animate_loc && animate_loc!=='hero')animate_loc = animate_loc[0]+','+animate_loc[1];
this.next = MotaActionBlocks['animate_s'].xmlText([
data.name,animate_loc,data.async||false,this.next]);
data.name,animate_loc,data.alignWindow||false,data.async||false,this.next]);
break;
case "setViewport": // 设置视角
data.loc = data.loc||['',''];

View File

@ -1333,7 +1333,7 @@ events.prototype._action_animate = function (data, x, y, prefix) {
this.__action_doAsyncFunc(data.async, core.drawHeroAnimate, data.name);
} else {
data.loc = this.__action_getLoc(data.loc, x, y, prefix);
this.__action_doAsyncFunc(data.async, core.drawAnimate, data.name, data.loc[0], data.loc[1]);
this.__action_doAsyncFunc(data.async, core.drawAnimate, data.name, data.loc[0], data.loc[1], data.alignWindow);
}
}

View File

@ -2055,7 +2055,7 @@ maps.prototype.drawBoxAnimate = function () {
}
////// 绘制动画 //////
maps.prototype.drawAnimate = function (name, x, y, callback) {
maps.prototype.drawAnimate = function (name, x, y, alignWindow, callback) {
name = core.getMappedName(name);
// 正在播放录像:不显示动画
@ -2066,6 +2066,10 @@ maps.prototype.drawAnimate = function (name, x, y, callback) {
// 开始绘制
var animate = core.material.animates[name], centerX = 32 * x + 16, centerY = 32 * y + 16;
if (alignWindow) {
centerX += core.bigmap.offsetX;
centerY += core.bigmap.offsetY;
}
// 播放音效
core.playSound(animate.se);

2
runtime.d.ts vendored
View File

@ -1203,7 +1203,7 @@ declare class maps {
* @param callback
* @returns core.stopAnimate()
*/
drawAnimate(name: string, x: number, y: number, callback?: () => void): number
drawAnimate(name: string, x: number, y: number, alignWindow: boolean, callback?: () => void): number
}
/** @file items.js 主要负责一切和道具相关的内容。 */

View File

@ -1,9 +1,10 @@
(已完成!) 1.(来自鹿神)门和像三种基础墙一样的墙应当提供一个“需要消耗多少把哪种钥匙、开关门分别播放什么音效”的属性,如[{"yellowKey": 2, "blueKey": 1}, "door.mp3", "close.mp3"],多种钥匙之间的关系可以为&&或||
(已完成!) 2.来自小艾请求修复瞬移判定无视图块属性script项的bug
3. 请求修复如果还没修复core.drawTip()不能使用系统图标和clear参数的bug建议增加一个参数来表示多帧图块绘制第几帧“UI绘制”类事件中的“绘制图标”同理增加另一个参数来表示32×48图块绘制哪2/3手册同理目前统一绘制最上面2/3
4. 建议显示文章的\b[]提供top和bottom这两种新写法来实现在顶部或底部显示对话框目前只有startText、firstArrive、eachArrive、useItemEvent和公共事件等没有当前点的事件中才能用up和down来临时实现这种效果否则就得设置剧情文本的属性这在频繁来回切换时是致命的就像《无上之光》RMXP版地上40层一样
(已完成!) 3. 请求修复如果还没修复core.drawTip()不能使用系统图标和clear参数的bug建议增加一个参数来表示多帧图块绘制第几帧
3.1 “UI绘制”类事件中的“绘制图标”同理
(已完成!\b[up,null]可实现此效果) 4. 建议显示文章的\b[]提供top和bottom这两种新写法来实现在顶部或底部显示对话框目前只有startText、firstArrive、eachArrive、useItemEvent和公共事件等没有当前点的事件中才能用up和down来临时实现这种效果否则就得设置剧情文本的属性这在频繁来回切换时是致命的就像《无上之光》RMXP版地上40层一样
5. 建议优化core.splitLines()来避免把单词打断和触犯标点禁则,如点号和右标号禁止用于行首,左标号禁止用于行尾
6. core.drawAnimate()和对应的事件建议增加一个boolean型参数来表示坐标是绝对坐标即当前的实现还是在视野中的相对坐标以13*13为例相对坐标总是在0~12之间以实现形如“在视野正中心播放某某动画”的需求小地图可以写6,6大地图怎么办
(已完成!) 6. core.drawAnimate()和对应的事件建议增加一个boolean型参数来表示坐标是绝对坐标即当前的实现还是在视野中的相对坐标以13*13为例相对坐标总是在0~12之间以实现形如“在视野正中心播放某某动画”的需求小地图可以写6,6大地图怎么办
7. 建议把core.playBgm(bgm, startTime)的startTime参数在事件中也提供出来以用于一些演出比如适当的剧情处直接从高潮开始。同理可以让“暂停背景音乐”记录下当前播放到了第几秒并在“恢复背景音乐”中自动从这个秒数恢复。作者还可以手动配合音量渐变效果
8. 系统设置菜单中“音量”和“步时”的点击区并不是根据文本长度自动适配的,这导致作者修改文本(包括但不限于翻译)后玩家难以找到准确的点击区,建议优化
9. 建议给“显示选择项”、“显示确认框”、“等待用户操作”这三个事件添加一个“若多少毫秒内不响应则触发的分支”用来实现一些如新新2的QTE录像中可以记录“choice: timeout”、“confirm: timeout”和“wait: timeout”来表示触发了超时分支