2015-01-24 2 views
2

Извинения за многочисленные вопросы Pixi JS; В настоящее время я получаю мою голову вокруг него all.I есть спрайт с текстурой, определяемой следующим образом:Pixi JS - «Спрайте из текстуры», не принимающий полигон Hit Area

// Create sprite 
      spriteObj = new PIXI.Sprite(tileTexture); 
      spriteObj.interactive = true; 

      spriteObj.anchor = new PIXI.Point(0,0.5); 

      spriteObj.click = function(mouseData){ 
      alert("Clicked Me!"); 
      }; 

Я затем создать хитовый область, используя многоугольник следующим образом:

polyCords = new PIXI.Polygon([ 
          new PIXI.Point(xPos,yPos), 
          new PIXI.Point(xPos + (tileWidth/2), yPos + (tileHeight/2)), 
          new PIXI.Point(xPos + tileWidth, tyPos), 
          new PIXI.Point(xPos + tileWidth/2, this.yPos - (tileHeight/2)), 
        ]); 

Поручаю полигон в качестве области щелчка спрайта:

spriteObj.hitArea = polyCords; 

, а затем добавить спрайт на сцену:

stage.addChild(spriteObj); 

Пока все хорошо. Однако область попадания неверна. Для того, чтобы проверить координаты хит области правильны, я использую графический объект, чтобы нарисовать цветную форму, представляющую многоугольник следующим образом:

testTile = new PIXI.Graphics(); 
testTile.beginFill(0x21B837); 
       testTile.drawShape(polyCords); 
testTile.endFill(); 
stage.addChild(testTile); 

Форма рисует (отлично), хит область, я но реальная область попадания не соответствует форме, которую я нарисовал!

Любые идеи, что здесь происходит?

Заранее спасибо.

ответ

1

Следующая машинопись отлично работает с Pixi 3.0.3

SpriteFromPoints(graphics, points /*PIXI.Point[]*/, bounds /*{x, y, width, height}*/, isInteractive) { 
    var polygon = graphics.drawPolygon(points); 
    var zoneSprite = new PIXI.Sprite(polygon.generateTexture(1, (<any>PIXI).SCALE_MODES.DEFAULT));// no d.ts yet for v3 
    zoneSprite.position.x = bounds.x; 
    zoneSprite.position.y = bounds.y; 
    zoneSprite.interactive = isInteractive || false; 
    if (zoneSprite.interactive) { 
     // can't assign the polygon from above for whatever reason 
     // seems to be a different type and doesn't have the contains method 
     zoneSprite.hitArea = new PIXI.Polygon(points); 
    } 
    return zoneSprite; 
} 

Добавление спрайта вернулся, хит район, что я ожидал.