我有一个带有Lime / Corona JSON物理文件的圆形精灵(弹球)(从PhysicsEditor导出)。此文件的目的是使hitbox实际上是循环的。
它工作正常(对于那些不熟悉coffeescript的人,@
只是意味着this
)
# in preload
@load.physics 'ball_physics', @Assets.ball_physics
# in create
@ball = @add_p2_sprite @ball_start_x, @ball_start_y, 'ball'
@ball.body.clearShapes()
@ball.body.loadPolygon 'ball_physics', 'ball'
问题在于我无法在不弄乱命中箱的情况下缩放或调整球的大小。它似乎总是与原始尺寸有关。有没有办法动态更新?
例如,这里使用的是未调整大小的精灵:
这里有一个sprite缩放到0.5,0.5:
除了为精灵创建新的png和JSON文件之外,还有什么办法吗?
这是对评论的回复,打开debugMode,所以我看到了在应用物理文件之前勾勒出的击球盒并缩放球:
@ball = @add.sprite @ball_start_x, @ball_start_y, 'ball'
@ball.scale.x = 2
@ball.scale.y = 2
@physics.p2.enable @ball, true
@add_physics_file(@ball, 'ball_physics', 'ball')
@collide_world_bounds(@ball)
hitbox没有重新缩放:
答案 0 :(得分:1)
我找到了一个megmut用户代码,我尝试了它并且效果很好,你可以尝试一下:
function resizePolygon(originalPhysicsKey, newPhysicsKey, shapeKey, scale){
var newData = [];
var data = this.game.cache.getPhysicsData(originalPhysicsKey, shapeKey);
for (var i = 0; i < data.length; i++) {
var vertices = [];
for (var j = 0; j < data[i].shape.length; j += 2) {
vertices[j] = data[i].shape[j] * scale;
vertices[j+1] = data[i].shape[j+1] * scale;
}
newData.push({shape : vertices});
}
var item = {};
item[shapeKey] = newData;
game.load.physics(newPhysicsKey, '', item);
}
只需使用:
function preload() {
game.load.image('contra2', 'contra2.png');
game.load.physics('physicsData', 'sprites.json');
}
function create() {
game.physics.startSystem(Phaser.Physics.P2JS);
var scale = 1.5;
resizePolygon('physicsData', 'robot', 'contra2', scale)
contra = game.add.sprite(400, 300, 'contra2');
contra.scale.setTo(scale, scale);
game.physics.p2.enable(contra, true);
contra.body.clearShapes();
contra.body.loadPolygon('robot', 'contra2');
}