![](/img/trans.png)
[英]Phaser P2 physics. How to kill a bullet(sprite) in a group on collision with another collision group
[英]Resizing a sprite that has a custom physics file? (P2/Phaser)
我有一个带有Lime / Corona JSON物理文件(从PhysicsEditor导出)的圆形精灵(弹球)。 此文件的目的是使命中框实际上是圆形的。
它工作正常(对于不熟悉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'
问题是我无法在不打乱击打盒的情况下缩放或调整球的大小。 似乎总能在原始尺寸下工作。 有什么办法可以动态更新吗?
例如,这里使用的是未调整大小的子画面:
这是一个比例为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)
匹配框尚未重新缩放:
我找到了一个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');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.