【问题标题】:How to detect click on the images in phaser3如何检测对phaser3中图像的点击
【发布时间】:2020-09-14 09:33:12
【问题描述】:

我是 Phaser 的新手,我正在尝试检测对 Phaser3 中几个图像的点击。这对我来说已经成为一个两部分的问题。 首先是检测对象的点击,但即使我点击屏幕上的其他任何地方,点击处理程序也会触发。

第二部分是我在场景中有相同和多个图像,我只想在单个函数中检测对每个图像的点击,并检测点击了哪个图像。

这是我的代码:

<!DOCTYPE html>
<html>
<head>
    <script src="https://cdn.jsdelivr.net/npm/phaser@3.24.1/dist/phaser-arcade-physics.min.js"></script>
    <style media="screen">
      canvas {   display : block;   margin : auto;}
    </style>
</head>
<body>

    <script>
    var config = {
        type: Phaser.CANVAS,
        scale: {
            mode: Phaser.Scale.ScaleModes.FIT,
            parent: 'phaser-example',
            autoCenter: Phaser.Scale.CENTER_BOTH,
            width: 400,
            height: 640
        },
        // width: 400,
        // height: 640,
        physics: {
            default: 'arcade',
            arcade: {
                gravity: { y: 10 }
            }
        },
        scene: {
            preload: preload,
            create: create,
            update: update
        }
    };

    var game = new Phaser.Game(config);
    var Bimages;

    function preload ()
    {
        this.load.setBaseURL('http://localhost:3000');
            
        this.load.image('sky', 'assets/skies/deepblue.png');
        this.load.image('tube1', 'assets/myassets/ballSort/tube.png');
        this.load.image('tube2', 'assets/myassets/ballSort/tube.png');
    }

    var numOfTestTubes = 5;

    var storeTubes = [];

    function create ()
    {
        ctx = this;
        this.add.image(400, 300, 'sky').scaleY = 1.2;
        var t1 = ctx.add.image(150, 300, 'tube1');
        t1.scaleY = 0.5;
        t1.scaleX = 0.5;
        var t2 = ctx.add.image(220, 300, 'tube2');
        t2.scaleY = 0.5;
        t2.scaleX = 0.5;

        t1.setInteractive();
        t2.setInteractive();

        t1.on('pointerdown', handleclick);
    }

    function update(){
    }

    function handleclick(pointer, targets){
      console.log("clicked0",pointer);
    }
    </script>
</body>
</html>

谁能帮帮我?

【问题讨论】:

    标签: javascript phaser-framework


    【解决方案1】:

    游戏对象上的 pointerdown 事件侦听器与全局输入管理器上的 pointerdown 事件侦听器不同。如果您改为使用this.input.on('pointerdown', ...),您将收到一个带有指针的回调,还有一个被点击的游戏对象数组,如果没有点击游戏对象,则为一个空数组。如果您需要注册对彼此重叠的输入对象的点击,您可以使用#setTopOnly 更改此行为。您可以检查对象是否相等或根据某些预期的属性,例如对象的名称或纹理键。我将 stackblitz 与矩形相关联,但要知道它们的行为与图像的 hitbox 相同。

    https://stackblitz.com/edit/phaser-so-global-input-manager?file=index.ts

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多