繁体   English   中英

调整具有自定义物理文件的精灵的大小? (P2 / Phaser)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM