Saya membuat game dengan framework Phaser 3, dan memiliki banyak animasi. Dalam kode saya, saya sudah memiliki animasi yang diputar (atau dilanjutkan) setelah animasi apa pun diputar, itu bagus. Kodenya adalah

 //This keeps the rolling animation going once the push animation is done
    skater.on('animationcomplete', () => {
        skater.anims.play('roll');
    });

Tetapi untuk sisa permainan, saya perlu tindakan khusus untuk terjadi setelah animasi yang sesuai selesai. Apakah ada fungsi yang mirip dengan yang di atas, di mana saya dapat meneruskan kunci atau nama animasi sebagai parameter?

Saat ini saya adalah contoh yang saya lihat di papan diskusi Phaser 3. Ini semua dalam fungsi create().

    //Animation key
    const shuvKey = 'shuv'
    //Shuvit animation
    var shuvFrameNames = this.anims.generateFrameNames(
        'sheet', {start: 9, end: 12, zeroPad: 4,
        prefix: 'shuv/'}
    );
    this.anims.create({
        key: shuvKey, frames: shuvFrameNames, frameRate: 32, repeat: 0 
    });
    skater.once(game.Animations.Events.SPRITE_ANIMATION_KEY_COMPLETE + shuvKey, function(animation, frame) {
        score += 3;         
        }, this);

Tapi saya mendapatkan "Uncaught TypeError: Cannot read property 'Events' of undefined". Saya tidak yakin apakah itu ada hubungannya dengan konfigurasi game saya, jadi saya akan mempostingnya di bawah.

Konfigurasi

//Configurations for the physics engine
var physicsConfig = {
    default: 'matter',
    matter : {
        gravity: {
            x: 0,
            y: 2.5, // <--This is the only way I could get the skater to roll up the ramp.
        },
        debug: true //CHANGE THIS TO TRUE TO SEE LINES
    }   
}

//Variables for height and width
var gameHeight = 750;
var gameWidth = 3000;

//Game configurations
var config = {
    type: Phaser.AUTO,
    width: 1500, //<-- this is the width of what we will see at one time
    height: gameHeight,
    physics: physicsConfig,
    scene: {
        preload: preload,
        create: create,
        update: update
    }   
}

/* This variable will be used to make sure the skater 
cannot ollie while he is already in the air */
let skaterTouchingGround;

//Start the game
var game = new Phaser.Game(config);

Saya harus dapat melewati fungsi yang melakukan akan melakukan hal berikut ketika animasi yang diberikan selesai, bukan hanya ketika animasi apa pun selesai.

3
Robert Smith 28 Oktober 2019, 17:45

1 menjawab

Jawaban Terbaik

Anda dapat menggunakan acara animationcomplete untuk menjalankan fungsi panggilan balik setelah animasi selesai:

skater.on('animationcomplete', doSomething);

doSomething = () => {
   alert('Animation finished!');
}

EDIT:

OP bertanya bagaimana cara memanggil fungsi yang berbeda sebagai panggilan balik, salah satu cara untuk melakukannya adalah seperti ini:

skater.on('animationcomplete', doSomething);

skater.on('animationcomplete', doSomethingAgain);

doSomething = () => {
   alert('Animation finished!');
}

doSomethingAgain = () => {
   alert('Animation finished again!')
}
2
Manuel Abascal 28 Oktober 2019, 18:41