2013-04-17 10 views
24

मैं अंगुलरजेएस के लिए बहुत हरा हूं। मैं सोच रहा हूं कि जब आपका दृश्य HTML5 कैनवास या वेबजीएल का उपयोग कर रहा है तो इसका उपयोग करना संभव है? यदि हां, तो क्या आप इस बारे में कोई अच्छा ट्यूटोरियल देखते हैं?वेबुलल/कैनवास 0 कोणीय जेएस बाध्यकारी

मैंने कई गेम देखा है कि वे AngularJS का उपयोग करके किए गए हैं, लेकिन मुझे नहीं पता कि यह उनके मेनू, लीडरबोर्ड और अन्य डैशबोर्ड तत्वों तक सीमित है या नहीं।

(मैं जरूरी एक खेल में MVC का उपयोग नहीं किया जाएगा, लेकिन स्पष्ट रूप से आप सिर्फ कैनवास और WebGL के साथ खेल की तुलना में अधिक कर सकते हैं।)

धन्यवाद!

उत्तर

27

संपादित करें: मैंने ऑब्जेक्ट का आकार बदलने या इसके भौतिक प्रकार को बदलने के लिए बाइंडिंग के साथ तीन.जेएस का उपयोग करके वेबजीएल निर्देश का एक पूर्ण उदाहरण बनाया है। इसके अलावा, इस तरह के खिड़की का आकार बदलने और माउस के रूप में की घटनाओं में ले जाया गया:


हाँ यह बहुत संभव है। मेनू, लीडरबोर्ड आदि से परे आप अपने canvas को निर्देश में भी लपेट सकते हैं।

  1. नियंत्रक सेटअप खेल राज्य
  2. पास इस राज्य, सर्वर और किसी भी अन्य डेटा से लोड डेटा आप निर्देश
  3. अंत में आप निर्देशों लिंक समारोह में कैनवास init करना पड़ सकता है जाएगा

मैंने स्कूल प्रोजेक्ट के साथ मेरी सहायता करने के लिए यह छोटा ऐप बनाया: http://callmethey.herokuapp.com/polygons

app.directive('polygon', function() { 
    return { 
    restrict: 'A', 
    scope: { 
     vertices: '=polygon', 
     color: '=color' 
    }, 
    link: function(scope, element, attrs) 
    { 
     var camera, scene, renderer; 
     var polygon; 
     var targetRotation = 0; 
     var targetYRotation = 0, targetXRotation = 0; 
     var targetYRotationOnMouseDown = 0, targetXRotationOnMouseDown = 0; 
     var mouseX = 0, mouseY = 0; 
     var mouseXOnMouseDown = 0, mouseYOnMouseDown = 0; 
     var width = $(element).width(); 
     var height = 200; 
     var widthHalfX = width/2; 
     var widthHalfY = height/2; 

     init(); 

     function init() { 
     // Setup scene 
     camera = new THREE.PerspectiveCamera(70, width/height, 1, 1000); 
     camera.position.x = 0; 
     camera.position.y = 0; 
     camera.position.z = 300; 
     scene = new THREE.Scene(); 
     // Build Polygon 
     var geometry = new THREE.Geometry(); 
     angular.forEach(scope.vertices, function (v) { 
      geometry.vertices.push(new THREE.Vector3(v.x, v.y, v.z)); 
     }); 
     geometry.faces.push(new THREE.Face3(0, 1, 2)); 
     THREE.GeometryUtils.center(geometry); 
     // Push polygon to scene 
     var material = new THREE.MeshBasicMaterial({ color: cols[scope.color], side: THREE.DoubleSide }); 
     polygon = new THREE.Mesh(geometry, material); 
     scene.add(polygon); 
     renderer = new THREE.WebGLRenderer(); 
     renderer.setSize(width, height); 
     } 

    // ..... rest of the code truncated for readability 
    }; 
}); 
+3

WebGL निर्देशों, इस होना करने के लिए भविष्य – jolySoft

+0

आपका उदाहरण न मैक पर क्रोम में काम किया है। इन त्रुटियों को फेंक दिया गया है: वेबजीएल संदर्भ बनाने में त्रुटि। three.min.js: 412 टाइपरर: शून्य – BuildingJarl

+1

की विधि 'getExtension' को कॉल नहीं कर सकता है कोरम ऑटो कभी-कभी अद्यतन पर WEBGL अक्षम करता है। यह पुरानी पीढ़ी के मैकबुक के लिए एक मुद्दा प्रतीत होता है। सुनिश्चित करें कि क्रोम: // झंडे/# अक्षम-वेबग्ल 'अक्षम' है और यह फिर से काम करना शुरू कर देगा। – winkerVSbecks

9

एक और तकनीक एक कारखाने के रूप में WebGL दृश्य संपुटित और लौट आए कारखाना एपीआई के माध्यम से मॉड्यूल के लिए 3 डी दृश्य के लिए उपयोग को बेनकाब करने के लिए है: यह निर्देश मैं (कैनवास भाग के लिए Three.js के साथ) का उपयोग है । इस दृष्टिकोण का एक फायदा यह है कि आप दृश्य को किसी भी अन्य नियंत्रक या निर्देश में इंजेक्ट कर सकते हैं। कोणीय में कारखाने सिंगलेट हैं इसलिए 3 डी दृश्य की केवल 1 प्रतिलिपि तैरती है।

यह encapsulation विधि आपको अपने एप्लिकेशन-तर्क से 3 डी दृश्य-तर्क दोनों को अलग करने की अनुमति भी देती है।

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

मैं दृश्य बातचीत परिभाषित करने के लिए कैनवास तत्व पर करने के लिए निर्देशों का इस्तेमाल किया। क्लिक करें, मार्की, कीप्रेस, घटनाएं।

Angular and Three.js architecture demo

+3

सहमत! यह निश्चित रूप से दृष्टिकोण होना चाहिए यदि आपके पास कई घटकों के साथ एक वेबजीएल संदर्भ है जिसे कोणीय द्वारा नियंत्रित और अद्यतन किया जा सकता है। – winkerVSbecks

+3

मैंने वास्तव में एकाधिक वेबजीएल संदर्भ बनाने के लिए इस दृष्टिकोण का उपयोग किया है। बस कई कारखानों को बनाएं और उन्हें उन सभी नियंत्रकों/निर्देशों में इंजेक्ट करें जिन्हें आप उन्हें कुशल बनाना चाहते हैं। यदि आप अनुरोध एनीमेशन फ़्रेम हुक का उपयोग करते हैं, तो ब्राउज़र एफपीएस का प्रबंधन करता है। – cubicleDowns