2015-04-28 3 views
0

У меня есть массив с телами. Для каждого из них я хочу поставить ярлык с некоторой информацией. Мне удалось это сделать, но когда я верну их, ярлык тоже поворачивается.Этикетка над телом в Phaser

// Main body 
players[id] = game.add.sprite(game.world.randomX, 200, sprite, sprite_ini); 
game.physics.p2.enable(players[id]); 

players[id].animations.add('walk', [1,2,3,4], 10, true); 
players[id].animations.add('stand', [0], 0, true); 
players[id].animations.add('jump', [5], 0, true); 

// Add weapon 
bazuca = game.add.sprite(0, 0, 'bazuca'); 
players[id].addChild(bazuca); 

// Labels 
players[id].body.label_nome = game.add.text(
     -35, 
     -55, 
     "Info", 
     { font: "bold 14px Arial", fill: color}); 
players[id].addChild(players[id].body.label_nome); 

И они удалились с

players[id].scale.x = -1; 

анимация поворачивается и работает отлично, оружие также оказывается и остается на месте, но ярлык также поворачивается. Как я могу избежать этого? Метка должна перемещаться с телом, но не поворачиваться.

+0

Группы предназначены для масштабирования, поворота и перемещения, как если бы вы имели дело с одним спрайтом. Я бы попробовал три вещи: первый вариант - повернуть группу так, как вы сейчас делаете, а затем снова повернуть текст; второй вариант - повернуть каждого ребенка (но текст) самостоятельно; в-третьих - введите текст вне группы и обновите его положение вручную. –

+0

Мне понравился третий, лучше ли мне обновлять позицию в функции обновления или с помощью какого-либо обратного вызова? обратный вызов кажется лучше, но есть ли обратный вызов изменения позиции тела? –

ответ

0

Я вижу два решения:

  • Камне Минков один, то есть сохраняя этикетки из групп и обновить свою позицию по каждому кадру (there doesn't seem to be сигнал «OnMove» или что-то).
  • Поскольку вы используете P2, вы можете физически включить метки, установить для них «body.fixedRotation = true» и создать ограничение между каждой меткой и каждым спрайтом, чтобы метки соответствовали спрайтам.

Второе решение кажется более элегантным и ремонтопригодным, но с точки зрения производительности первое, вероятно, лучше.

0

Если вы установили метку как то же значение x, что и элемент, который она маркирует, а значение y метки меньше, чем у объекта. Вот пример код:

//in create(): 
label.anchor.setTo(.5, .5); /*sets positioning to center. 
You need to make sure that arcade physics are applied to label*/ 

//in update(): 
label.x = object.x; 
label.y = object.y - 60; 
//change the 60 to whatever looks good to you when running. 

Чтобы применить физику аркадной:

//in create(): 
game.physics.startSystem(Phaser.Physics.ARCADE); // do this once 
game.physics.enable(label/*change this to what you want the physics to apply to*/, Phaser.Physics.ARCADE); 

Надеется, что это помогает.

Смежные вопросы