15

我正在使用一些我想在实际游戏中按比例缩小的大图像在 Phaser 中制作游戏:

create() {
    //Create the sprite group and scale it down to 30%
    this.pieces = this.add.group(undefined, "pieces", true);
    this.pieces.scale.x = 0.3;
    this.pieces.scale.y = 0.3;

    //Add the players to the middle of the stage and add them to the 'pieces' group
    var middle = new Phaser.Point( game.stage.width/2, game.stage.height/2);
    var player_two = this.add.sprite(middle.x - 50, middle.y, 'image1', undefined, this.pieces);
    var player_one = this.add.sprite(middle.x, middle.y-50, 'image2', undefined, this.pieces);
}

然而,由于精灵的大小是按比例缩放的,它们的起始位置也是按比例缩放的,所以它们出现在舞台中间,只出现在到中间距离的 30% 处。

如何缩放精灵图像而不影响它们的位置?

(代码顺便在 Typescript 中,但我认为这个特定的示例也是 javascript,所以这可能无关紧要)

4

3 回答 3

11

将 Sprite.anchor 设置为 0.5,使物理主体以 Sprite 为中心,缩放 sprite 图像而不影响它们的位置。

this.image.anchor.setTo(0.5, 0.5);
于 2014-09-08T07:38:10.857 回答
7

你可以像这样缩放你的精灵:

var scaleX = 2;
var scaleY = 2;    
sprite.scale.set(scaleX, scaleY);

然后计算精灵的位置:

 var positionX = 100;
 var positionY = 100;

 sprite.x = positionX / scaleX;
 sprite.y = positionY / scaleY;

现在您的精灵位于 (100, 100) 位置。问题是sprite.x乘以 with scaleX

于 2014-12-27T20:02:50.247 回答
1

关于 Phaser,我想补充一点,在您自己创建的 Weapon.bullets 或其他组的特定情况下,您将不得不这样做:

weapon.bullets.setAll('scale.x', 0.5);
weapon.bullets.setAll('scale.y', 0.5);

我被困在这个问题上并最终进入了这个线程,该线程已关闭,但就我而言,这不是我需要的。其他人希望能有一些用处:)

于 2017-04-25T23:28:26.740 回答