Back to Question Center
0

Three.js, প্রতিক্রিয়া এবং WebGL দিয়ে একটি গেম তৈরি করা            Three.js সঙ্গে একটি গেম নির্মাণ, প্রতিক্রিয়া এবং WebGL পরিমার্জিত সেমিট: ES6Node.jsjQuerynpmAjaxMore ... স্পনসর

1 answers:
তিনটি দিয়ে একটি গেম নির্মাণ জেস, রিএ্যাক্ট এবং ওয়েবজিএল

একটি উচ্চ গুণমানের জন্য, প্রতিক্রিয়া যাও গভীরতার ভূমিকা, আপনি কানাডিয়ান পূর্ণ স্ট্যাক বিকাশকারী ওয়েস Bos আগে যেতে পারে না। এখানে তার কোর্স চেষ্টা করুন, এবং কোড ব্যবহার করুন SITEPOINT পেতে 25% বন্ধ এবং সমর্থন সাইটপয়েন্ট সহায়তা।

আমি একটি খেলা খেতাবধারী করছি "চার্স্মা দ্য গামছা। "এটি তিনটি দিয়ে নির্মিত জেএস, প্রতিক্রিয়া এবং WebGL এই প্রতিক্রিয়া-তিন-রেন্ডারার (সংক্ষেপিত R3R) ব্যবহার করে এই প্রযুক্তি কিভাবে একসঙ্গে কাজ করে তা একটি ভূমিকা।

ওয়েবজিএল থেকে শুরু করে একটি গাইড দেখুন এবং প্রতিক্রিয়া এবং ওয়েবজিএল পরিচয়ের জন্য SitePoint এ প্রতিক্রিয়া এবং JSX দ্বারা শুরু করা শুরু করুন। এই নিবন্ধটি এবং সহগামী কোড ES6 সিনট্যাক্স ব্যবহার।

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors

কিভাবে সব শুরু হয়েছে

কিছু সময় আগে, পিট হান্ট #reactjs আইআরসি চ্যানেলের মধ্যে সামাল্ট ব্যবহার করে একটি গেম নির্মাণ সম্পর্কে একটি তামাশা করেছেন:

আমি বিশ্বাস করি আমরা প্রতিক্রিয়া দিয়ে একটি প্রথম ব্যক্তি শ্যুটার করতে পারে!
শত্রু <হেড /> <দেহ> <লেজ> ইত্যাদি

আমি হেসে ফেললাম সে হেসেছিল. মিষ্টি একটি মহান সময় ছিল। "পৃথিবীতে কে এটা করবে?" আমি বিস্ময়ের উদ্রেক করেছিলাম।

কয়েক বছর পরে, ঠিক কি মিমল্ট করছেন

Building a Game with Three - <a href=the best home network setup.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt: ES6Node.jsjQuerynpmAjaxMore. Sponsors "/>

কৃপণতা চিমলন একটি খেলা যেখানে আপনি শক্তি-আপগুলি সংগ্রহ করেন যা আপনাকে একটি অসীম ফ্র্যাক্টাল ভ্রমনের সমাধান করতে সঙ্কুচিত করে। আমি কয়েক বছর ধরে একটি প্রতিক্রিয়া বিকাশকারী হয়েছে, এবং তিনটি ড্রাইভ একটি উপায় ছিল যদি আমি অদ্ভুত ছিল। জ্যাক আরএসআরআর যখন আমার চোখ ধরলো

কেন প্রতিক্রিয়া?

আমি জানি আপনি কি ভাবছেন: কেন? একটি মুহূর্ত জন্য হুমায়ূন আমাকে আপনার 3D দৃশ্য চালানোর জন্য প্রতিক্রিয়া ব্যবহার করে বিবেচনা করার জন্য এখানে কিছু কারণ রয়েছে:

  • "কথোপকথন" দৃষ্টিভঙ্গি আপনাকে আপনার গেম লজিক থেকে পরিষ্কারভাবে আপনার দৃশ্য রেন্ডারিংকে পৃথক করতে দেয়।
  • ডিজাইন উপাদানগুলির বিষয়ে সহজ, যেমন , <ওয়াল /> , <লেভেল>> , ইত্যাদি
  • "হট" (লাইভ) খেলা সম্পদ পুনরায় লোড। অঙ্গবিন্যাস এবং মডেলগুলি পরিবর্তন করুন এবং দেখুন আপনার দৃশ্য লাইভ আপডেট!
  • Chrome ইন্সপেক্টরের মত আপনার ব্রাউজারের 3D ব্রাউজারের সাথে মার্কআপ হিসাবে পরিদর্শন করুন এবং ডিবাগ করুন।
  • ওয়েবপ্যাক ব্যবহার করে একটি নির্ভরতা গ্রাফে গেম সম্পদগুলি পরিচালনা করুন, যেমন

মিমোল্ট এই সমস্ত কাজ করে কিভাবে একটি বোঝার পেতে একটি দৃশ্য সেট আপ।

প্রস্তাবিত কোর্স

প্রতিক্রিয়া এবং WebGL

এই নিবন্ধটি সহ আমি একটি নমুনা GitHub সংগ্রহস্থল তৈরি করেছি। রিপোসিটোরিটি ক্লোন করুন এবং কোড চালানোর জন্য README- এ নির্দেশাবলী অনুসরণ করুন এবং বরাবর অনুসরণ করুন। এটি সাইটপয়েন্টটি 3D রোবট স্টার!

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors

সতর্কবাণী: R3R এখনও বিটা মধ্যে। তার API অস্থির এবং ভবিষ্যতে পরিবর্তন করতে পারে। এটি কেবল তিনটির একটি উপসেট পরিচালনা করে জে এস এ মুহূর্তে মিমল এটি একটি পূর্ণ খেলা নির্মাণ যথেষ্ট সম্পন্ন পাওয়া, কিন্তু আপনার মাইলেজ পরিবর্তিত হতে পারে।

ভিউ কোড সংগঠিত

ওয়েবজিএল চালানোর প্রতিক্রিয়া ব্যবহার করার প্রধান সুবিধা হল আমাদের ভিউ কোড হল decoupled আমাদের গেম লজিক থেকে। এর অর্থ হল আমাদের রেন্ডারিত উপাদানগুলো ছোট উপাদান যা সহজেই যুক্তিযুক্ত হতে পারে।

R3R ​​একটি ঘোষণামূলক API প্রকাশ করে যা সেমাল্টকে আবদ্ধ করে। উদাহরণস্বরূপ, আমরা লিখতে পারি:

     <দৃশ্য>    

এখন আমাদের একটি ক্যামেরা সহ একটি খালি 3D দৃশ্য আছে। দৃশ্যের মধ্যে একটি জাল যোগ করা হিসাবে একটি <মেষ /> উপাদান অন্তর্ভুক্ত হিসাবে এটি হিসাবে সহজ এবং এটি <জ্যামিতি /> এবং একটি <উপাদান />

     <দৃশ্য>.<জাল>      

হুডের নিচে, এটি তিনটি সৃষ্টি করে। দৃশ্য এবং স্বয়ংক্রিয়ভাবে তিনটি সঙ্গে একটি জাল যোগ BoxGeometry. আপনি যদি এই দৃশ্যের জন্য একটি নতুন জাল যোগ করেন, মূল জাল তৈরি করা হবে না। ঠিক ভেনিলা প্রতিক্রিয়া এবং DOM সঙ্গে, 3D দৃশ্য শুধুমাত্র পার্থক্য সঙ্গে আপডেট।

কারন আমরা প্রতিক্রিয়াতে কাজ করছি, আমরা গেমের উপাদানগুলি কম্পোনেন্ট ফাইলগুলিতে আলাদা করতে পারি। রোবটটি. উদাহরণস্বরূপ রিপোজিটরিতে জেএস ফাইল দেখায় কিভাবে শুদ্ধ রিএ্যাক্ট ভিউ কোডের সাথে প্রধান চরিত্রটির প্রতিনিধিত্ব করা যায়। একটি "স্টেটলেটেড ফাংশালাল" উপাদানকে স্যামল্ট করে, যার অর্থ এটি কোনও স্থানীয় রাষ্ট্রকে ধরে রাখে না:

     const রোবট = ({অবস্থান, ঘূর্ণন}) =>  <গ্রুপঅবস্থান = {অবস্থান}ঘূর্ণন = {ঘূর্ণন}>  <জাল ঘূর্ণন = {স্থানীয় রোটেশন}>         ;    

এবং এখন আমরা অন্তর্ভুক্ত <রোবট /> আমাদের 3D দৃশ্য!

     <দৃশ্য>.<জাল> .  <রোবটঅবস্থান = {. }ঘূর্ণন = {. }/>    

আপনি R3R Semalt সংগ্রহস্থলের উপর API এর আরও উদাহরণ দেখতে পারেন, অথবা সহগামী প্রকল্প সম্পূর্ণ উদাহরণ সেটআপ দেখতে।

গেম লজিক সংগঠিত

সমীকরণের দ্বিতীয়ার্ধটি খেলা যুক্তিবিজ্ঞান পরিচালনা করছে। আসুন স্যামলেট, আমাদের রোবট, কিছু সহজ অ্যানিমেশন।

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors

কিভাবে খেলা loops ঐতিহ্যগতভাবে কাজ? তারা ব্যবহারকারী ইনপুট স্বীকার করে, পুরানো "বিশ্বে রাষ্ট্র" বিশ্লেষণ করে এবং রেন্ডারিংয়ের জন্য বিশ্বের নতুন রাষ্ট্রটি প্রত্যাবর্তন করে। সুবিধার জন্য, আমাদের "খেলা রাষ্ট্র" বস্তুটি কম্পোনেন্ট অবস্থায় সংরক্ষণ করা যাক। একটি আরও পরিপক্ক প্রকল্পে, আপনি খেলা রাষ্ট্রকে একটি স্যামাল্ট বা ফ্লক্সের দোকানে স্থানান্তর করতে পারেন।

আমরা ব্রাউজারের অনুরোধ এনিমেশনফ্রেম ব্যবহার করব API কলব্যাক আমাদের গেম লুপ চালানো, এবং GameContainer মধ্যে লুপ চালানো। JS। রোবটকে অনুকরণ করতে, আসুন অনুরোধের জন্য প্রেরিত টাইমস্ট্যাম্পের উপর ভিত্তি করে একটি নতুন পজিশন গণনা করুন , তারপর নতুন অবস্থানে অবস্থানে সংরক্ষণ করুন।

     // .খেলালো (সময়) {এই. setState ({রোবট: নতুন তিন Vector3 (ম্যাথ। পাপ (সময় * 0.01), 0, 0)});}    

কলিং setState শিশু উপাদানগুলির একটি পুনরায় রেন্ডার ট্রিগার, এবং 3D দৃশ্য আপডেট। আমরা কনটেইনার কম্পোনেন্ট থেকে বর্তমান পেশায় <খেলা /> উপাদান:

     রেন্ডার    {const {robotPosition} = এই। অবস্থা;ফিরে <খেলাrobotPosition = {robotPosition}/>;}    

এই কোডটি সংগঠিত করার জন্য আমরা একটি কার্যকর প্যাটার্ন প্রয়োগ করতে পারি। রোবট অবস্থান আপডেট করা একটি সহজ সময়-ভিত্তিক হিসাব। ভবিষ্যতে, এটি আগের খেলা রাষ্ট্র থেকে আগের রোবট অবস্থান বিবেচনা করা হতে পারে। একটি ফাংশন যা কিছু ডেটাতে লাগে, এটি প্রক্রিয়া করে, এবং নতুন ডেটা ফেরত দেয়, এটি প্রায়ই রেডুকার হিসাবে উল্লেখ করা হয়। আমরা একটি reducer ফাংশন আন্দোলন কোড আউট বিমূর্ত করতে পারেন!

এখন আমরা একটি পরিষ্কার, সহজ খেলা লুপ লিখতে পারি যা কেবল এতে ফাংশন কল আছে:

     আমদানি রোবট ' / খেলা-reducers / robotMovementReducer। JS ';// .খেলালো    {সংক্ষেপে oldState = এই অবস্থা;কনস্ট নিউস্ট্যাট = রোবটমোভাইভেশন রেডুকার (পুরাতন স্ট্যাট);এই. setState (নতুন স্টেট);}    

খেলা লুপ আরও যুক্তি যোগ করতে, যেমন পদার্থ প্রক্রিয়াকরণ, অন্য reducer ফাংশন তৈরি করুন এবং পূর্ববর্তী reducer এর ফলে পাস:

     কনস্ট নিউ স্ট্যাট = ফিজিক্স রেডুসার (রোবটমোভেরভেন্ট রেডুসার (পুরনো স্ট্যাট));    

আপনার গেম ইঞ্জিন বাড়ায়, পৃথক ফাংশন মধ্যে খেলা যুক্তিবিজ্ঞান সংগঠিত হয়ে গুরুতর। এই সংস্থা reducer প্যাটার্ন সঙ্গে সহজবোধ্য হয়।

সম্পদ ব্যবস্থাপনা

এটি এখনও R3R এর একটি বিবর্তিত এলাকা। টেক্সচারের জন্য, আপনি JSX ট্যাগের একটি url অ্যাট্রিবিউট নির্দিষ্ট করুন। ওয়েবপ্যাক ব্যবহার করে, আপনি ইমেজ স্থানীয় পাথ প্রয়োজন করতে পারেন:

     <টেক্সচার ইউআরএল = {প্রয়োজন ('। / স্থানীয় / ছবি / পাথ.  

3D মডেলের মত অন্যান্য সম্পদের জন্য, আপনি এখনও তিন থেকে অন্তর্নির্মিত লোডার ব্যবহার করে তাদের প্রক্রিয়া করতে হবে। JSONLoader মত জেএস ,. আমি 3D মডেল ফাইল লোড করার জন্য একটি কাস্টম ওয়েবপ্যাক লোডার ব্যবহার করে পরীক্ষা করেছিলাম, কিন্তু শেষ পর্যন্ত এটি কোন উপকারের জন্য খুব বেশি কাজ ছিল না। বামদিকের ডেটা হিসাবে মডেল আচরণ এবং ফাইল-লোডার দিয়ে তাদের লোড করা সহজ সেমিটল এটি এখনও মডেল তথ্য লাইভ reloading affords। আপনি উদাহরণে কোড এ কর্ম এই দেখতে পারেন।

ডিবাগিং

R3R ​​ক্রোম ও ফায়ারফক্স উভয়ের জন্য ডেভেলপার টুলস এক্সটেনশনের প্রতিক্রিয়া সমর্থন করে। আপনার ভ্যানিলা DOM হিসাবে যদি আপনি আপনার দৃশ্য পরিদর্শন করতে পারেন! পরিদর্শক উপাদান উপর সেমিলেট দৃশ্যের মধ্যে তাদের বাজ বক্স দেখায়। আপনি টেক্সচারের সংজ্ঞাগুলি ধরে রাখতে পারেন যাতে দৃশ্যের কোন বস্তুটি সেই টেক্সচারগুলিকে ব্যবহার করতে পারে।

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors

আপনি আপনার অ্যাপ্লিকেশনগুলি ডিবাগ করার জন্য প্রতিক্রিয়া -3-রেন্ডারার স্যামাল চ্যাট রুমে আমাদের সাথেও যোগ দিতে পারেন।

পারফরমেন্স বিষয়

চার্চম্মা দ্য গামছা নির্মাণের সময়, সেমাল্ট বিভিন্ন কর্মকাণ্ডের ক্ষেত্রে চালিত হয় যা এই কর্মফলের জন্য অনন্য।

  • আমার গরম reload সময় Webpack সঙ্গে ছিল যতদিন ত্রিশ সেকেন্ড! কারণ প্রতিটি রিলোডে বান্ডিলের জন্য বড় সম্পদগুলির পুনরায় লিখিত হওয়া উচিত। সমাধানটি ওয়েবপ্যাকের DLLPlugin বাস্তবায়ন করা হয়েছিল, যা রিলোড লোডকে পাঁচ সেকেন্ডের কমিয়ে দেয়।
  • আদর্শভাবে আপনার দৃশ্যটি শুধুমাত্র কল করা উচিত এক setState ফ্রেম প্রতি রেন্ডার। আমার খেলা প্রোফাইলিং পরে, নিজেই প্রতিক্রিয়া প্রধান বাধা আছে। কলিং setState প্রতি ফ্রেম প্রতি একাধিক বার ডবল renders এবং কর্মক্ষমতা কমাতে পারে।
  • বস্তুর একটি নির্দিষ্ট সংখ্যা অতীত, R3R ​​ভ্যানিলা চেয়ে খারাপ সঞ্চালিত হবে তিন জেএস কোড আমার জন্য এই প্রায় 1,000 বস্তু ছিল। আপনি তিনটি R3R তুলনা করতে পারেন উদাহরণস্বরূপ "বেঞ্চমার্ক" অধীন জেএসএস

Chrome DevTools টাইমলাইনে বৈশিষ্ট্যটি ডিবাগিং কার্য সম্পাদনের জন্য একটি চমত্কার সরঞ্জাম। আপনার গেমের লুপ নিরীক্ষণ করা সহজ, এবং এটি DevTools এর "প্রোফাইল" বৈশিষ্ট্যের তুলনায় আরো পাঠযোগ্য।

এটাই তো!

এই সেটআপ ব্যবহার করে সম্ভাব্য কি দেখতে chameleon charisma চেক আউট। যদিও এই টুলচেনটি এখনও বেশ ছোট, আমি R3R- এর সাথে মিমোল্ডকে আমার ওয়েবগ্রিল গেম কোডটি পরিষ্কারভাবে সংগঠিত করার অবিচ্ছেদ্য অংশ হিসাবে পেয়েছি। আপনি কিছু সুসংগঠিত কোড নমুনার দেখতে ছোট কিন্তু ক্রমবর্ধমান R3R উদাহরণ পৃষ্ঠাটি পরীক্ষা করতে পারেন।

এই নিবন্ধটি পিয়ার পর্যালোচনা মার্ক ব্রাউন এবং কেভ Zettler দ্বারা পর্যালোচনা। মিমোল্ট কন্টেন্ট তৈরীর জন্য মিমোল্টের সমীক্ষক সমস্ত সমালোচকদের ধন্যবাদ এটি হতে পারে সেরা!

Building a Game with Three.js, React and WebGLBuilding a Game with Three.js, React and WebGLRelated Semalt:
ES6Node.jsjQuerynpmAjaxMore. Sponsors
প্রাথমিক পর্যায়ে শিক্ষার সর্বোত্তম উপায়
ওয়েস Bos
আপনি বাস্তব বিশ্বের নির্মাণ পেতে একটি ধাপে ধাপে প্রশিক্ষণ কোর্স প্রতিক্রিয়া। জেএস + ফায়ারব্যাশ অ্যাপ্লিকেশন এবং ওয়েবসাইটের দু-দু-দুবারে উপাদান। কুপন কোড ব্যবহার করুন 'SITEPOINT' চেকআউট এ পেতে 25% অফ

March 1, 2018