2014-09-05 8 views
9

मैं कुछ बड़ी छवियों है कि मैं वास्तविक खेल में नीचे पैमाने पर करने के लिए चाहते हैं का उपयोग कर Phaser में एक खेल बना रही हूँ:मैं अपनी स्थिति बदलने के बिना फ़ेज़र/पिक्सीजेएस में एक स्प्राइट के आकार को कैसे स्केल कर सकता हूं?

create() { 
    //Create the sprite group and scale it down to 30% 
    this.pieces = this.add.group(undefined, "pieces", true); 
    this.pieces.scale.x = 0.3; 
    this.pieces.scale.y = 0.3; 

    //Add the players to the middle of the stage and add them to the 'pieces' group 
    var middle = new Phaser.Point(game.stage.width/2, game.stage.height/2); 
    var player_two = this.add.sprite(middle.x - 50, middle.y, 'image1', undefined, this.pieces); 
    var player_one = this.add.sprite(middle.x, middle.y-50, 'image2', undefined, this.pieces); 
} 

हालांकि क्योंकि स्प्राइट आकार में कर दिया जाता है, उनके शुरुआती स्थान भी मापा जाता है, इसलिए मंच के बीच में दिखाई देने के बजाय, वे बीच में केवल 30% दूरी दिखाई देते हैं।

मैं स्प्राइट छवि को उनके स्थान को प्रभावित किए बिना स्केल कैसे करूं?

(कोड टाइपप्रति में संयोग से है, लेकिन मुझे लगता है कि इस विशेष नमूना भी जावास्क्रिप्ट है ताकि शायद अप्रासंगिक है) 0.5 तो भौतिक विज्ञान शरीर स्प्राइट पर केंद्रित है करने के लिए

उत्तर

7

सेट Sprite.anchor, बिना स्प्राइट छवि को मापना यह उनके स्थान को प्रभावित करता है।

this.image.anchor.setTo(0.5, 0.5); 
5

अगर मैं इस तरह के उदाहरण के लिए स्प्राइट पैमाने:

var scaleX = 2; 
    var scaleY = 2;  
    sprite.scale.set(scaleX , scaleY); 

तो मैं इस पैमाने कारक की जरूरत पो गणना करने के लिए स्प्राइट का शेर:

var positionX = 100; 
var positionY = 100; 

sprite.x = positionX/scaleX; 
sprite.y = positionY/scaleY; 

इस तरह आप स्प्राइट स्थिति (100,100) में होंगे। समस्या यह है कि sprite.x स्वचालित रूप से आपके स्केलएक्स द्वारा गुणा किया जाता है।

के लिए खेद मेरी अंग्रेजी :)

1

Phaser के बारे में, मैं जोड़ने के लिए है कि weapon.bullets या अन्य समूहों, आपके द्वारा बनाए आप करने जा रहे हैं के बजाय इसे इस तरह करने के लिए की विशिष्ट मामले में करना चाहते हैं :

weapon.bullets.setAll('scale.x', 0.5); 
weapon.bullets.setAll('scale.y', 0.5); 

मैं इस पर अटक और इस सूत्र है, जो बंद कर दिया है, लेकिन मेरे मामले मैं सिर्फ क्या नहीं जरूरत में समाप्त हो गया हो गया। अन्य उम्मीद है कि इसका कुछ उपयोग होगा :)

संबंधित मुद्दे

 संबंधित मुद्दे