cocos creator | 用摄像机实现残影幻影拖尾效果

超级幻影了解一下?

640?wx_fmt=png

基本原理

利用摄像机拍摄角色,然后投影到多个显示画布,给画布节点设置不同的透明度,最后让画布节点跟随角色移动。
640?wx_fmt=png

创建角色和摄像机

创建一个新的typescript项目。
创建一个角色节点,并添加分组 role

640?wx_fmt=png

接着在角色节点里添加一个摄像机,并将摄像机的拍摄分组选为role

640?wx_fmt=png

创建显示画布

在场景中添加多个sprite用于这个摄像机显示的画布。 因为用摄像机会上下反转,要修改 scaleY-1 。 并将它放在角色节点的下一层级,大小调整为角色节点大小,位置和角色节点一样。 将画布的透明度设置为不同的数值。
640?wx_fmt=png

绑定摄像机到显示画布

修改 Helloworld.ts 里的代码,添加摄像机 camera ,角色节点和画布数组 sprite 的声明。 绑定 cameratargetTexture 到显示画布 spriteFrame 。 参考代码如下:
//Helloworld.ts
const { ccclass, property } = cc._decorator;
@ccclass
export default class Helloworld extends cc.Component {
    @property(cc.Camera)
    camera: cc.Camera = null;
    @property([cc.Sprite])
    sp_cameras: cc.Sprite[] = [];
    @property(cc.Node)
    node_icon: cc.Node = null;
    onLoad() {
        const texture = new cc.RenderTexture();
        texture.initWithSize(this.sp_cameras[0].node.width, this.sp_cameras[0].node.height);
        const spriteFrame = new cc.SpriteFrame();
        spriteFrame.setTexture(texture);
        this.camera.targetTexture = texture;
        this.sp_cameras.forEach((v) => {
            v.spriteFrame = spriteFrame
        })
    }
}

将摄影机,角色节点和画布绑定脚本上:

640?wx_fmt=png

显示画布的跟随

可以监听node节点  cc.Node.EventType.TOUCH_MOVE  事件控制角色节点移动。 参考代码:
onLoad() {
        //...
        this.node.on(cc.Node.EventType.TOUCH_MOVE, this.onNodeIconTouchMove, this);
}
private onNodeIconTouchMove(evt: cc.Event.EventTouch) {
        this.node_icon.x += evt.getDeltaX();
        this.node_icon.y += evt.getDeltaY();
}
设置一个定时器,让画布节点跟随角色节点运动。 参考代码:
onLoad() {
    //...
    this.schedule(this.shadowFollow, 0.1, cc.macro.REPEAT_FOREVER);
}
private shadowFollow() {
    this.sp_cameras.forEach((v, i) => {
        const dis = this.node.position.sub(v.node.position).mag();
        if (dis > 0) {
            v.node.stopAllActions();
            v.node.runAction(cc.moveTo(i * 0.05 + 0.02, this.node_icon.x, this.node_icon.y));
        }
    })
}

效果预览

640?wx_fmt=gif
点击【阅读原文】获取项目代码


你可能还喜欢




关注【白玉无冰】每天进步一点点
640?wx_fmt=gif

640?wx_fmt=jpeg

640?
640?wx_fmt=png

Creator星球游戏开发社区

长按二维码,关注我们!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值