如何正确缩放 Phaser 精灵?
How can I properly scale Phaser sprites?
我在 sprite 缩放方面遇到了一些问题,但似乎对其他人来说效果很好。
所以,这是我的游戏:
如您所见,存在 2 个大问题:图像像素化和纹理渗色。
这是我的配置:
var config = {
type: Phaser.AUTO,
parent: 'phaser-example',
width: '100%',
height: '100%',
mode: Phaser.Scale.RESIZE,
autoCenter:Phaser.Scale.CENTER_BOTH,
physics: {
default: 'arcade',
arcade: {
debug: true,
},
pixelArt:true,
render:{
antialias: false,
}
},
scene: {
preload: preload,
create: create,
update: update,
}
};
这是我预加载资产的方式:
function preload(){
this.load.image("tiles", "assets/turtle_wars_tiles.png");
this.load.tilemapTiledJSON("tutorial_map", "assets/tutorial_map.json");
//preloading player
this.load.spritesheet("player", "assets/characters.png", {
frameWidth: 26,
frameHeight: 36,
});
}
这就是我创建 tilemap 的方式:
const map = this.make.tilemap({ key: "tutorial_map", tileWidth:48,tileHeight:48 });
const tileset = map.addTilesetImage("turtle_wars_tiles", "tiles");
for (let i = 0; i < map.layers.length; i++) {
const layer = map.createStaticLayer(i, tileset,0,0)
layer.setDepth(i);
layer.setScale(5)
layer.setCollisionByProperty({ collides: true });
this.physics.add.collider(this.player.collider, layer).collideCallback = () =>{
this.player.collide()
};
}
我尝试挤压我的 16x16 瓷砖集,但它弄乱了我的整个地图,它只解决了纹理渗色问题。
知道如何解决这个问题吗?
我刚刚在一个小型演示项目上尝试过,我认为解决方案只是将您的游戏 - config
编辑为 (检查下面的代码)。
信息: 您添加了正确的属性,但只添加到 physics
- 对象 中。我属于高一级。
像这样它应该可以工作:
var config = {
type: Phaser.AUTO,
parent: 'phaser-example',
width: '100%',
height: '100%',
mode: Phaser.Scale.RESIZE,
autoCenter: Phaser.Scale.CENTER_BOTH,
physics: {
default: 'arcade',
arcade: {
debug: true,
},
},
pixelArt: false,
render: {
antialias: false,
}
...
};
我在 sprite 缩放方面遇到了一些问题,但似乎对其他人来说效果很好。
所以,这是我的游戏:
如您所见,存在 2 个大问题:图像像素化和纹理渗色。
这是我的配置:
var config = {
type: Phaser.AUTO,
parent: 'phaser-example',
width: '100%',
height: '100%',
mode: Phaser.Scale.RESIZE,
autoCenter:Phaser.Scale.CENTER_BOTH,
physics: {
default: 'arcade',
arcade: {
debug: true,
},
pixelArt:true,
render:{
antialias: false,
}
},
scene: {
preload: preload,
create: create,
update: update,
}
};
这是我预加载资产的方式:
function preload(){
this.load.image("tiles", "assets/turtle_wars_tiles.png");
this.load.tilemapTiledJSON("tutorial_map", "assets/tutorial_map.json");
//preloading player
this.load.spritesheet("player", "assets/characters.png", {
frameWidth: 26,
frameHeight: 36,
});
}
这就是我创建 tilemap 的方式:
const map = this.make.tilemap({ key: "tutorial_map", tileWidth:48,tileHeight:48 });
const tileset = map.addTilesetImage("turtle_wars_tiles", "tiles");
for (let i = 0; i < map.layers.length; i++) {
const layer = map.createStaticLayer(i, tileset,0,0)
layer.setDepth(i);
layer.setScale(5)
layer.setCollisionByProperty({ collides: true });
this.physics.add.collider(this.player.collider, layer).collideCallback = () =>{
this.player.collide()
};
}
我尝试挤压我的 16x16 瓷砖集,但它弄乱了我的整个地图,它只解决了纹理渗色问题。
知道如何解决这个问题吗?
我刚刚在一个小型演示项目上尝试过,我认为解决方案只是将您的游戏 - config
编辑为 (检查下面的代码)。
信息: 您添加了正确的属性,但只添加到 physics
- 对象 中。我属于高一级。
像这样它应该可以工作:
var config = {
type: Phaser.AUTO,
parent: 'phaser-example',
width: '100%',
height: '100%',
mode: Phaser.Scale.RESIZE,
autoCenter: Phaser.Scale.CENTER_BOTH,
physics: {
default: 'arcade',
arcade: {
debug: true,
},
},
pixelArt: false,
render: {
antialias: false,
}
...
};