vue-pixijs Directives

## Directives

import { RendererElement, App } from "vue";
import { InteractionEvent,DisplayObject } from "pixi.js";

function getDirectives(app: App<RendererElement>): void{
    app.directive('pointerdown', {
        mounted(el: DisplayObject, binding: any) {
            el.interactive = true;
            el.buttonMode = true;
            el.on(
                "pointerdown",
                () => {
                    binding.value(el)
                }
            );
        }
    })
    app.directive('drag', {
        mounted(el: DisplayObject) {
            el.interactive = true;
            el.buttonMode = true;
            let dragFlag = false;
            let startPoint: any;
            el.on("mousedown", (event: InteractionEvent) => {
                dragFlag = true
                startPoint = { x: event.data.global.x, y: event.data.global.y }
            })
            el.on("mousemove", (event: InteractionEvent) => {
                if (dragFlag) {
                    const dx = event.data.global.x - startPoint.x;
                    const dy = event.data.global.y - startPoint.y;
                    el.x += dx;
                    el.y += dy;
                    startPoint = { x: event.data.global.x, y: event.data.global.y }
                }
            })
            el.on("mouseup", () => {
                dragFlag = false
            })
        }
    })
    app.directive('pointRotate', {
        mounted(el: DisplayObject, binding: any) {
            const pivotX = binding.value.pivotX
            const pivotY = binding.value.pivotY
            const x = binding.value.x | el.x
            const y = binding.value.y | el.y
            const radius = binding.value.radius
            el.x = (x - pivotX) * Math.cos(radius) -
                (y - pivotY) * Math.sin(radius) +
                pivotX
            el.y = (x - pivotX) * Math.sin(radius) +
                (y - pivotY) * Math.cos(radius) +
                pivotY
        }
    })
    app.directive('mounted', {
        mounted(el: DisplayObject, binding: any) {
            if(typeof binding.value === "object"){
                Object.values(binding.value).forEach((action:any)=>{
                    action(el)
                })
            }
            if (typeof binding.value === "function"){
                binding.value(el)
            }
        }
    })
}

export default getDirectives
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值