Phaser 3 - 自定义动画光标不工作
Phaser 3 - Custom animated cursor not working
我尝试实现自定义动画光标。我使用了行 gameState.idle.setInteractive({cursor: 'url("assets/pet.cur"), pointer'});
。当光标没有动画时,同一行工作,但一旦我将其设为动画光标,它只会加载指针光标。
有什么方法可以使用动画自定义光标吗?
这不是 phaser 问题,这是浏览器的问题。据我所知,浏览器不支持动画光标。有一些解决方法,但所有方法都是 hacky,在高负载下可能无法正常工作。
但是如果你真的想这样做,这里有一篇文章描述了一个可能的 solution/approach https://jordaneldredge.com/blog/rendering-animated-ani-cursors-in-the-browser/。
一种不同的方法是将 Sprite 移动到鼠标位置,并隐藏真正的 MousePointer。
这是一个可能的移相器解决方案:
var config = {
type: Phaser.AUTO,
width: 400,
height: 200,
scene: {
preload: preload,
create: create,
update
}
};
let cody
var game = new Phaser.Game(config);
function preload ()
{
this.load.spritesheet('brawler', 'https://labs.phaser.io/assets/animations/brawler48x48.png', { frameWidth: 48, frameHeight: 48 });
}
function create() {
this.input.setDefaultCursor('none');
// some animation
this.anims.create({
key: 'walk',
frames: this.anims.generateFrameNumbers('brawler', { frames: [ 0, 1, 2, 3 ] }),
frameRate: 8,
repeat: -1
});
cody = this.add.sprite(0, 0, 'brawler').setOrigin(.5);
cody.play('walk');
this.input.on('pointerdown', _ => console.info(_))
}
function update(){
// update the position
cody.x = game.input.mousePointer.x;
cody.y = game.input.mousePointer.y;
}
<script src="https://cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.js"></script>
我尝试实现自定义动画光标。我使用了行 gameState.idle.setInteractive({cursor: 'url("assets/pet.cur"), pointer'});
。当光标没有动画时,同一行工作,但一旦我将其设为动画光标,它只会加载指针光标。
有什么方法可以使用动画自定义光标吗?
这不是 phaser 问题,这是浏览器的问题。据我所知,浏览器不支持动画光标。有一些解决方法,但所有方法都是 hacky,在高负载下可能无法正常工作。
但是如果你真的想这样做,这里有一篇文章描述了一个可能的 solution/approach https://jordaneldredge.com/blog/rendering-animated-ani-cursors-in-the-browser/。
一种不同的方法是将 Sprite 移动到鼠标位置,并隐藏真正的 MousePointer。
这是一个可能的移相器解决方案:
var config = {
type: Phaser.AUTO,
width: 400,
height: 200,
scene: {
preload: preload,
create: create,
update
}
};
let cody
var game = new Phaser.Game(config);
function preload ()
{
this.load.spritesheet('brawler', 'https://labs.phaser.io/assets/animations/brawler48x48.png', { frameWidth: 48, frameHeight: 48 });
}
function create() {
this.input.setDefaultCursor('none');
// some animation
this.anims.create({
key: 'walk',
frames: this.anims.generateFrameNumbers('brawler', { frames: [ 0, 1, 2, 3 ] }),
frameRate: 8,
repeat: -1
});
cody = this.add.sprite(0, 0, 'brawler').setOrigin(.5);
cody.play('walk');
this.input.on('pointerdown', _ => console.info(_))
}
function update(){
// update the position
cody.x = game.input.mousePointer.x;
cody.y = game.input.mousePointer.y;
}
<script src="https://cdn.jsdelivr.net/npm/phaser@3.55.2/dist/phaser.js"></script>