可以先定义一下想要的点击特效是什么样的,然后看看使用UI是否可以实现。
例如,点击按钮时,会有一个蓝色的光圈从按钮的大小,迅速逐渐扩大并消失。这个效果再细致的描述一下就是:按钮点击时,在0.3秒内,蓝色光圈的图片从按钮大小,变化到按钮大小的2.5倍。蓝色光圈的透明度从0变化到1。
这样,就达到了下面的这个效果。
那么这个效果怎样用代码来实现呢?
可以使用tween动画来对蓝色光圈的变化进行插值,从而连续的设置蓝色光圈图片的属性。例如下面这一段代码:
/**
* 按钮点击特效
* @param btn
*/
public clickEffect(btn: Button | MaskButton | StaleButton) {
if (!mw.UIService.getUI(FlyView).visible) {
mw.UIService.show(FlyView);
}
// 初始化位置
let startPos = new mw.Vector2();
mw.localToViewport(btn.tickSpaceGeometry, mw.Vector2.zero, mw.Vector2.zero, startPos);
// 开始动画
let view = mw.UIService.getUI(FlyView).rootCanvas;
let go = this.flyUiPool.get();
go.rootCanvas.visibility = SlateVisibility.SelfHitTestInvisible;
const startSize = btn.size.clone();
go.init("181559", 1);
view.addChild(go.uiObject);
let animWidget = go.uiObject;
animWidget.position = startPos.clone();
go.mIcon.size = startSize;
const endSize = startSize.clone().multiply(2.2);
const offsetX = (endSize.x - startSize.x) / 2;
const offsetY = (endSize.y - startSize.y) / 2;
const endPos = startPos.clone().add(new mw.Vector2(-offsetX, -offsetY));
let tween = new Tween({ pos: startPos, size: startSize, tp: 1 }).to({ pos: endPos, size: endSize, tp: 0 }, 300)
.onUpdate((data: { pos: mw.Vector2, size: mw.Vector2, tp: number }) => {
animWidget.position = data.pos;
go.mIcon.size = data.size;
go.mIcon.renderOpacity = data.tp;
}).onComplete(() => {
go.mIcon.renderOpacity = 1;
this.flyUiPool.hide(go);
}).easing(mw.TweenUtil.Easing.Sinusoidal.InOut).start();
}
此外这还有一个示例项目实现了这个效果,可以把相关的UI和代码拷贝出来,自己魔改WW。
ButtonTest.rar
(80.26 KB, 下载次数: 43)
|