2012-08-10 7 views
11

मैं एक हरे रंग की रेखा के बाईं ओर एक लाल रेखा खींचने के लिए एचटीएमएल 5 कैनवास का उपयोग करने की कोशिश कर रहा हूं। यहां मेरा जावास्क्रिप्ट है:मैं अपने HTML5 कैनवास में अलग-अलग रंगों की दो पंक्तियां क्यों नहीं खींच सकता?

var canvas = document.createElement('canvas'); 
canvas.height = 150; 
canvas.width = 150; 
var canvasContext = canvas.getContext('2d'); 
canvasContext.beginPath(); 

// Draw the red line. 
canvasContext.strokeStyle = '#f00'; 
canvasContext.moveTo(10, 0); 
canvasContext.lineTo(10, 100); 
canvasContext.stroke(); 

// Draw the green line. 
canvasContext.moveTo(50, 0); 
canvasContext.strokeStyle = '#0f0'; 
canvasContext.lineTo(50, 100); 
canvasContext.stroke(); 

document.body.appendChild(canvas);​ 

हालांकि, Google क्रोम में, मुझे हल्के हरे रंग की रेखा के बाईं ओर एक गहरा हरा रेखा मिलती है। क्यूं कर? मैंने स्ट्रोक को दो बार सही कहा? इसलिए, मेरा पहला स्ट्रोक क्यों मेरे दूसरे को प्रभावित करेगा?

Here एक जेएसफ़िल्ड है जो मेरा मतलब बताता है।

उत्तर

17

जब आप अपनी दूसरी पंक्ति खींचना शुरू करते हैं तो आप canvasContext.beginPath(); पर कॉल नहीं कर रहे हैं।

ड्राइंग वर्गों और अधिक स्वतंत्र बनाने के लिए, मैं खाली स्थान के कहा:

var canvas = document.createElement('canvas'); 
canvas.height = 150; 
canvas.width = 150; 

var canvasContext = canvas.getContext('2d'); 

// Draw the red line. 
canvasContext.beginPath(); 
canvasContext.strokeStyle = '#f00'; 
canvasContext.moveTo(10, 0); 
canvasContext.lineTo(10, 100); 
canvasContext.stroke(); 

// Draw the green line. 
canvasContext.beginPath(); 
canvasContext.moveTo(50, 0); 
canvasContext.strokeStyle = '#0f0'; 
canvasContext.lineTo(50, 100); 
canvasContext.stroke(); 

document.body.appendChild(canvas); 

डेमो: http://jsfiddle.net/AhdJr/2/

+0

धन्यवाद, अगर ऐसा है, तो मेरा दूसरा प्रश्न है: बायीं ओर की रेखा दूसरी की तुलना में गहरा क्यों है? मैंने किसी भी लाइन के लिए अस्पष्टता मूल्य निर्धारित नहीं किया है, तो कैनवास रंगों को क्यों मिश्रित करता है? – dangerChihuahua007

+0

मुझे ईमानदारी से कोई जानकारी नहीं है। [प्रलेखन] (http://dev.w3.org/html5/2dcontext/#dom-context-2d-beginpath) को देखकर, ऐसा लगता है कि 'startPath()' subpaths को साफ़ करता है, इसलिए संभवतः दूसरी पंक्ति है (किसी भी तरह) पिछले एक और वर्तमान का संयोजन। – Blender

+0

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

3

बहुत ही दिलचस्प जहाँ तक मैं जिस तरह से WebGL बता सकते हैं या ओपन काम एक बड़े राज्य मशीन है, जहां आप एक राज्य को परिभाषित,, आकर्षित अद्यतन राज्य फिर से आकर्षित, और इतने पर ...

हालांकि की तरह है मुझे यकीन नहीं है कि कैनवास एक ही सिद्धांतों का पालन करता है भले ही इसका मतलब सरल 2 डी प्रस्तुतिकरणों के लिए हो।

मैं इसे एक नया रास्ता शुरू करने के लिए काम करने में कामयाब रहा।

var canvas = document.createElement('canvas'); 
canvas.height = 150; 
canvas.width = 150; 
var canvasContext = canvas.getContext('2d'); 
canvasContext.beginPath(); 

// Draw the red line. 

canvasContext.moveTo(10, 0); 
canvasContext.lineTo(10, 100); 
canvasContext.strokeStyle = '#FF0000'; 
canvasContext.stroke(); 

canvasContext.beginPath(); // begin new path 
// Draw the green line. 
canvasContext.moveTo(50, 0); 
canvasContext.strokeStyle = '#00FF00'; 
canvasContext.lineTo(50, 100); 
canvasContext.stroke(); 

document.body.appendChild(canvas);​ 

मेरे पास वेबग्लू के साथ सीमित अनुभव है, इसलिए यदि मैं गलत हूं तो कृपया मुझे सही करें।

+0

मैं यकीन है कि कैनवास तत्व और WebGL अलग बातें हैं हूँ। – Blender

+0

@ ब्लेंडर हाँ, मुझे लगता है कि उनका कार्यान्वयन अलग-अलग है। मुझे यकीन नहीं है कि कैनवास उसी सिद्धांत का पालन करता है जो * ग्लो का पालन करता है, यह ओपनग्ल की तुलना में उदाहरण कोड से दिखता है, आप जानते हैं कि संदर्भ रंग और इस तरह की सेटिंग प्राप्त करने जैसा है, मैं वास्तव में बहुत यकीन नहीं कर सकता, धन्यवाद। –

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