2012-09-25 12 views
8

जैसा कि प्रश्न के निचले भाग में स्क्रीनशॉट में देखा जा सकता है या directly to the game पर जाकर। टेक्स्ट ब्राउज़र पर अलग-अलग निर्भर है (फ़ायरफ़ॉक्स 15.0.1 आईई 9.9 और क्रोम 21 अलग-अलग प्रस्तुत करता है)।filltext() कैनवास टेक्स्ट स्थिति विसंगतियों ब्राउज़र के बीच

context.fillText(this.wlines[i], this.xcoord, this.ycoord + y + (t) * this.sizey); 

वस्तु के निर्माता:

function textItem(text, xcoord, ycoord, sizex, sizey,style, context) { 
this.wlines = []; 
this.text = text; 
this.xcoord = xcoord; 
this.ycoord = ycoord; 
this.sizex = sizex; 
this.sizey = sizey; 
this.style = style; 

if (text == null) { 
    text = ""; 
} 
var lines = text.split("~"); 
// this is first line text 
context.save(); 
if (this.style < 3) { 
    context.shadowOffsetY = 2; 
    context.font = 'bold 18px "palatino linotype"'; 
} else if (this.style == 4) { 
    this.font = '16px "palatino linotype"'; 
    this.shadowOffsetX = 2; 
    this.shadowOffsetY = 1; 
    this.shadowColor = "rgba(255,255,255,1)"; 
} 
if (this.style == 5) { 
    this.wlines.push(text); 
} else { 
    for (j = 0; j < lines.length; j += 1) { 
     var words = lines[j].split(" "); 
     var lastLine = ""; 
     var l = sizex; 
     var measure = 0; 
     for (i = 0; i < words.length; i += 1) { 
      var w = words[i]; 
      measure = context.measureText(lastLine + w).width; 
      if (measure < l) { 
       lastLine += (w + " "); 
      } else { 
       //this is body text 
       if (this.style == 6) { 
        lastLine += "..."; 
       } 
       this.wlines.push(lastLine); 
       lastLine = (w + " "); 
       if (this.style < 3) { 
        context.font = 'bold 14px "palatino linotype"'; 
       } 
      } 
      if (i == words.length - 1) { 
       this.wlines.push(lastLine); 
       break; 
      } 
     } 
    } 
} 
context.restore(); 
} 

पाठ, xcoorc, ycoord, xsize, ysize एक xml फ़ाइल से पार्स कर रहे हैं कॉल समारोह आकर्षित करने के लिए। इस उदाहरण में compond नाम:

<sizex>196</sizex> 
<sizey>20</sizey> 
<xcoord>383</xcoord> 
<ycoord>14</ycoord> 

शैली पाठ प्रभाव के आधार पर एक निर्धारित मान वांछित है और संदर्भ कैनवास के 2 डी संदर्भ (प्रभाव लेयरिंग के लिए) पर आकर्षित करने के लिए है।

जैसा कि दिखाया गया है कि सभी मान ब्राउज़र के बीच बिल्कुल समान हैं। ब्राउज़र के बीच मैं केवल एक ही चेक

<meta http-equiv="x-ua-compatible" content="ie=edge,chrome=1"/> 

HTML पृष्ठ के शीर्षलेख में है।

मुझे सच में नहीं पता कि रेखा ऊंचाई विसंगति कहां से आ रही है और इस मामले पर किसी भी मदद की सराहना की जाएगी।

लाइन ऊंचाई विसंगति पाठ के आधार पर बदलती है लेकिन इस तरह से नहीं कि मैंने अभी तक पता लगाया है। अगर ऐसी कोई जानकारी है जिसे मैंने छोड़ा है तो कृपया पूछने में संकोच न करें। एफएफ: ff screen http://www.sunshinecompound.com/images/firefoxscreen.png क्रोम: chrome screen http://www.sunshinecompound.com/images/googlescreen.png

अद्यतन मेरे कार्यक्रम के लिए समाधान कम से कम उपयोग के निर्माण के लिए एक ऑफसेट था। इसके अलावा मुझे टेक्स्ट ऑब्जेक्ट बनाकर और टेक्स्ट ऑब्जेक्ट को छवि के रूप में सहेजकर भारी प्रदर्शन बढ़ाया गया। एफएफ में जो सबसे बड़ी मंदी के साथ ब्राउज़र था, मैंने समग्र कार्यक्रम रन-टाइम में 5X की कमी से थोड़ा सा देखा। कार्यक्रम में गतिशील रूप से पाठ के हर बार टेक्स्ट ऑब्जेक्ट को फिर से बनाने के बावजूद यह है (मैं प्रति सेकंड गतिशील काउंटर बदलता हूं और प्रत्येक 200ms में माउस होवर प्रभाव डालता हूं लेकिन प्रदर्शन के साथ मैं वर्तमान में 100 एमएमएस में सुधार कर सकता हूं)।

+0

स्क्रीनशॉट/लिंक? – sq2

उत्तर

3

हाँ।

यह अलग-अलग स्केल किया गया है, अलग-अलग स्कैन किया गया है, अलग-अलग अलियाड किया गया है और यहां तक ​​कि अलग-अलग मापा गया है (जैसा कि measureText में) ब्राउज़र के बीच।

आप की जरूरत है अपने खेल के लिए पिक्सेल स्थिरता तो आपको पाठ के बजाय छवियों का उपयोग करने के लिए जा रहे हैं। माफ़ कीजिये। :(

measureText सुसंगत बनाने के लिए एक ही रास्ता It's must faster, anyway पूर्व गणना करने के लिए है।

fillText सुसंगत बनाने के लिए एक ही रास्ता पाठ के बजाय चित्रों का उपयोग करना है।।

इन दोनों अगर अस्थिर कर रहे हैं पाठ बेहद गतिशील है, लेकिन यदि आप केवल कभी भी लिखते हैं, तो आपके ऐप में टेक्स्ट के 100 से कम विभिन्न टुकड़े, छवियां शायद आपकी सबसे अच्छी शर्त हैं।

अन्यथा, आप किसी छवि से उत्पन्न पिक्सेल फ़ॉन्ट का उपयोग कर सकते हैं (प्रत्येक अक्षर या सामान्य शब्द के साथ drawImage का उपयोग करें) और लंबे प्रदर्शन, सामान्य तारों को कैश करने, ठीक प्रदर्शन के लिए आशा करते हैं।

+0

निश्चित रूप से आदर्श नहीं है (हालांकि मैंने मूल शोध करने के बाद क्या माना था)। हमारे पास पाठ और गतिशील पाठ की हजारों पंक्तियां हैं। हम टेक्स्ट प्रभावों का उपयोग करने में सक्षम होना पसंद करेंगे। ऐसा लगता है कि मुझे आईई और क्रोम के लिए ऑफ़सेट का उपयोग करना होगा (पूरी तरह से काम नहीं करेगा लेकिन पर्याप्त करीब हो सकता है) या छवि रूप में वर्णमाला के साथ आना होगा। आपकी प्रतिक्रिया के लिए धन्यवाद, यह पुष्टि करने के लिए कि मुझे निराशाजनक के रूप में क्या उम्मीद है। – Tyler

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