2011-01-03 30 views
5

द्वारा पाठ चरित्र ड्राइंग मैं पाठ से बना आकार के लिए प्रकाश प्रभाव जोड़ने के लिए चरित्र से तार चरित्र आकर्षित करने के लिए कोशिश कर रहा हूँ।रिक्ति समायोजन समस्याओं जब चरित्र

while (i != line.length()) { 
c = line.substring(i, i + 1); 

cWidth = g.getFontMetrics().stringWidth(c); 

g.drawString(c, xx += cWidth, yy); 
i++; 
} 

समस्या यह है, एक चरित्र की चौड़ाई वास्तविक दूरी यह एक और चरित्र से तैयार है जब उन दो अक्षर स्ट्रिंग के रूप मुद्रित कर रहे हैं नहीं है। क्या ग्राफिक्स 2 डी में सही दूरी पाने का कोई तरीका है?

उत्तर

0

मुझे यकीन है कि अगर मैं आपकी समस्या को सही ढंग से समझा नहीं गया हूँ। हालांकि, मैंने आपके कोड का परीक्षण किया है और वास्तव में कुछ स्ट्रिंग वर्ण एक-दूसरे को ओवरलैप करते हैं।

समस्या एक तरह से आप xx मूल्य (यदि आप एक चरित्र ड्राइंग से पहले यह incrementing रहे थे) incrementing रहे हैं में था।

अपने कोड के संस्करण को सही है:

public void myDrawString(Graphics g, String line, int xx, int yy) { 
    int i = 0; 
    while (i != line.length()) { 
     String c = line.substring(i, i + 1); 
     int cWidth = g.getFontMetrics().stringWidth(c); 
     g.drawString(c, xx, yy); 
     xx += cWidth; 
     //xx += 2; 
     i++; 
    } 
} 

टिप्पणी हटाएं और पात्रों के बीच की जगह को बढ़ाने के लिए xx += 2 लाइन समायोजित करें।

0
समस्या

कि कर्निंग जोड़े पत्र के की दूरी को परिभाषित करता है, और एक स्ट्रिंग चार-दर-चार से अधिक पुनरावृत्ति कर्निंग प्रणाली में किक करने के लिए कोई मौका देती है। मुझे लगता है कि आप एक निश्चित उपयोग करने के लिए या तो होगा है -width फ़ॉन्ट या अपने प्रकाश प्रभाव rework तो यह एकल वर्ण के बजाय पूर्ण तार के साथ काम करता है।

2

लुकास बरन द्वारा जवाब मुख्य समस्या यह है कि शायद अपने उत्पादन बुरा देखने के लिए पैदा कर रहा था को हल करती है। हालांकि, अधिक सूक्ष्म समस्या यह है कि आप इस तरह से कर्निंग को दोहराने नहीं कर सकता बनी हुई है। यह कितनी समस्या है आप जिस फ़ॉन्ट का उपयोग कर रहे हैं उस पर निर्भर हो सकती है। कर्निंग सही प्राप्त करने के लिए, भी, आप कुछ इस तरह कर सकता है:

while (i != line.length()) { 
    String c = line.substring(i, i + 1); 
    String d = line.substring(0, i + 1); 
    int cWidth = g.getFontMetrics().stringWidth(c); 
    int dWidth = g.getFontMetrics().stringWidth(d); 
    g.drawString(c, xx + dWidth - cWidth, yy); 
    i++; 
} 

कि हर किरदार जहां कर्निंग रखा है | रखना चाहिए।