একটি বিস্তীর্ণ শিখা টিউটোরিয়াল (বা কীভাবে ঝাঁকুনি দিয়ে গেমস তৈরি করবেন)

ভূমিকা

হ্যালো সবাই! আমি লুয়ান, এবং আমি আপনাকে এই প্রথম বিস্তৃত শিখা টিউটোরিয়ালে স্বাগত জানাই।

শিখা একটি ন্যূনতম ফ্লাটার গেম ইঞ্জিন যা ক্যানভাস ভিত্তিক গেম তৈরি করতে কয়েকটি মডিউল সরবরাহ করে।

এই টিউটোরিয়ালে আমরা একটি খুব সহজ গেম তৈরি করতে যাচ্ছি যেখানে বাক্সগুলি হ্রাস পাচ্ছে এবং স্ক্রিনের নীচে পৌঁছানোর আগে তাদের ধ্বংস করতে হবে।

এই খেলাটি দেখতে কেমন হবে

এই APK টি ইনস্টল করে বা প্লে স্টোর থেকে এটি ইনস্টল করে আমরা কী করছি তা দেখার জন্য আপনি নিজেই গেমটি পরীক্ষা করে দেখতে পারেন।

এইভাবে আমরা ফ্রেমওয়ার্ক দ্বারা প্রদত্ত সমস্ত কার্যকারিতা কভার করতে পারি এবং পরিচালনা করতে পারি যে কীভাবে সর্বাধিক প্রাথমিক কাজগুলি করা যায়: রেন্ডারিং, স্প্রাইটস, অডিও, পাঠ্য, অ্যানিমেশন এবং আরও অনেক কিছু।

আমরা কেন এই গেমটি বেছে নিলাম? ফ্রেমওয়ার্কটি অন্বেষণের জন্য খুব সাধারণ হলেও সম্পূর্ণ হওয়ার পাশাপাশি এটি করার মতো সংস্থান আমাদের রয়েছে এটি একটি ভাল ফ্যাক্টর!

এই গেমের জন্য আমরা নিম্নলিখিত সংস্থানগুলি ব্যবহার করব: একটি বক্স স্প্রিট, বিস্ফোরণ স্প্রাইট (অ্যানিমেশন সহ), একটি বিস্ফোরণ শব্দ, একটি মিস সাউন্ড (যদি বাক্সটি আঘাত না করে), পটভূমি সংগীত এবং একটি স্কোর রেন্ডারিং জন্য দুর্দান্ত ফন্ট।

ইন্টারনেটে বাণিজ্যিকভাবে উপলভ্য ভাল সংস্থানগুলি সন্ধান করা কঠিন, তবে আমরা এই দুর্দান্ত ওয়েবসাইটে সমস্ত কিছুই (ফন্ট ব্যতীত) পেয়েছি। তারা সত্যিই দুর্দান্ত, সম্পূর্ণ প্রস্তাবিত।

যেহেতু স্প্রাইট শিটগুলি বর্তমানে সমর্থিত নয়, তাই সমস্ত সংস্থান প্রথমে উপযুক্ত ফর্ম্যাটে রূপান্তর করতে হবে। আমাদের সমস্ত অডিও এমপি 3 এ রূপান্তর করতে হবে (ওজিজিও সমর্থিত; ডাব্লুএভি নয়)। এর পরে, আপনার এখানে প্রয়োজনীয় সমস্ত সংস্থান সহ একটি বান্ডিল ডাউনলোড করতে পারেন।

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

ত্য জ্যজ্জকিজ; সম্পূর্ণ শিখা ডকুমেন্টেশন এখানে পাওয়া যাবে। আপনার যদি কোনও প্রশ্ন, পরামর্শ বা ভুল থাকে তবে নির্দ্বিধায় আমার সাথে যোগাযোগ করুন।

আপনারও তোলা এবং ডার্ট ইনস্টল করা দরকার। যদি এটি আপনার পক্ষে উপযুক্ত হয় তবে আপনি ইন্টেলিজ আইডিইএও ব্যবহার করতে পারেন। আপনার কোড লেখা শুরু করার জন্য এটি খুব ভাল জায়গা। এই স্টাফটি ইনস্টল করতে, আপনি এই জাতীয় বিভিন্ন টিউটোরিয়াল পরীক্ষা করতে পারেন।

বুনিয়াদি

তাই আপাতত আমি ধরে নিলাম যে আপনার কাছে সবকিছু প্রস্তুত আছে। শুধু এটি চালান এবং এটি খুলুন!

আপনাকে প্রথমে যা করতে হবে তা হল শিখার নির্ভরতা যুক্ত করা। আপনার পাবস্পেক.আইএমএল ফাইলে যান এবং নিশ্চিত হন যে নির্ভরতা কী তালিকাগুলি জ্বলজ্বল করছে:

এখানে আমরা সর্বশেষতম সংস্করণ, ০.০.০ ব্যবহার করছি তবে উপলভ্য থাকলে আপনি একটি নতুন চয়ন করতে পারেন।

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

আমাদের মূল পদ্ধতিটি এখন খালি, এবং আমরা দুটি জিনিস যুক্ত করতে যাচ্ছি; প্রথমে কিছু কনফিগারেশন:

শিখা.ডার্ট আমদানি স্থিতিশীল শিখা শ্রেণিতে অ্যাক্সেস দেয় যা কেবলমাত্র কয়েকটি অন্যান্য দরকারী শ্রেণি রয়েছে contains আমরা এর পরে আরও ব্যবহার করব। এই মুহূর্তে আমরা এই শিখা শ্রেণিতে দুটি পদ্ধতি কল করছি।

শেষ কমান্ডটি স্ব-ব্যাখ্যামূলক এবং অডিও প্লেয়ার প্লাগইন থেকে কিছু লগিং নিষ্ক্রিয় করে। আমরা শীঘ্রই গেমটিতে অডিও যুক্ত করব। যদি এটি কাজ না করে তবে কোনও ত্রুটি সমাধানের জন্য আপনাকে এ সম্পর্কে মন্তব্য করতে হবে। তবে আমরা এটি কোনও দিন করব।

প্রথম লাইনটি আরও জটিল। মূলত, যেহেতু আমরা রান অ্যাপ অ্যাপ্লিকেশনটি ব্যবহার করছি না, তাই ফ্লুটারের কয়েকটি গুরুত্বপূর্ণ বৈশিষ্ট্য অনুপস্থিত। সক্ষম করার জন্য এই কলটি আপনাকে উইজেটগুলি ব্যবহার না করে যে কোনও অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় সমস্যাটিকে বাইপাস করতে দেয়।

শেষ পর্যন্ত আমাদের খেলা শুরু করতে হবে। এটি করার জন্য, আমরা আমদানি তালিকায় অন্য শ্রেণিটি, গেম ক্লাস যুক্ত করি। এই শ্রেণিটি একটি গেম তৈরির জন্য প্রয়োজনীয় বিমূর্ততা সরবরাহ করে: একটি গেম লুপ। এটিকে সাবক্ল্যাস করা দরকার যাতে আপনাকে প্রতিটি গেমের ভিত্তি বাস্তবায়ন করতে হবে: একটি আপডেট পদ্ধতি যা যখনই বলা হয় যখনই এটি সুবিধাজনক হয় এবং শেষ আপডেটের পরে কেটে যায় এমন সময় নেয়, এবং একটি রেন্ডারিং পদ্ধতি যা কীভাবে জানতে হবে আঁকার একটি হ'ল গেমের বর্তমান অবস্থা। লুপটির অভ্যন্তরীণ ক্রিয়াকলাপগুলি গেম ক্লাসের মাধ্যমে সমাধান করতে হবে (আপনি এটি একবার দেখতে পারেন, অবশ্যই এটি খুব সাধারণ), এবং আপনাকে কেবল শুরু করতে কল করতে হবে।

চেকপয়েন্ট: 599f809

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

আকার রেন্ডার

এবং এটি আঁকা হয় কিভাবে? এটি কার্যকর অবস্থায় দেখতে একটি সাধারণ আয়তক্ষেত্র আঁকুন। আপনার রেন্ডারিং পদ্ধতিতে নিম্নলিখিতগুলি যুক্ত করুন:

আপনি দেখতে পাচ্ছেন, এখানে আমরা পর্দার অবস্থানের উপর ভিত্তি করে একটি আয়তক্ষেত্র নির্ধারণ করছি। নিম্নলিখিত চিত্রটি দেখায় যে নিয়মগুলি কীভাবে প্রান্তিক করা আছে। মূলত উত্সটি উপরের বাম কোণে এবং অক্ষটি ডান এবং নীচে উঠে আসে।

আরও লক্ষ করুন যে বেশিরভাগ অঙ্কন পদ্ধতিতে পেইন্ট ব্যবহার করা হয়। একটি রঙ কেবল একটি রঙ নয়, তবে এটি একটি ডিগ্রাড বা অন্য কোনও টেক্সচার হতে পারে। সাধারণত, আপনি হয় একটি শক্ত রঙ চান বা সরাসরি একটি স্প্রাইটে যান। সুতরাং আসুন শুধু রঙের রঙের রঙের উদাহরণগুলিতে সেট করুন।

রঙ মানে একটি একক এআরজিবি রঙ। আপনি এটি একটি পূর্ণসংখ্যার সাথে তৈরি করেছেন যা আপনি সহজেই পড়ার জন্য হেক্সাডেসিমাল স্ক্রিপ্টে লিখে রাখতে পারেন। এটি A (আলফা, স্বচ্ছতা, সাধারণত 0xFF) ফর্ম্যাটে এবং তারপরে আর, জি এবং বি এর জন্য দুটি অঙ্ক।

নামযুক্ত রঙের সংগ্রহও রয়েছে; যাইহোক, এটি উপাদান প্যাকেজ মধ্যে আছে। কেবল রঙের মডিউলটি আমদানি করার বিষয়টি নিশ্চিত করুন যাতে দুর্ঘটনাক্রমে উপাদান প্যাকেজ থেকে অন্য কিছু ব্যবহার না হয়।

সুতরাং, দুর্দান্ত, এখন আমাদের একটি বর্গাকার আছে!

চেকপয়েন্ট: 4eff3bf

শাসকরা কীভাবে কাজ করেন তা আমরা জানি, তবে আমরা পর্দার মাত্রা জানি না! এই তথ্য ব্যতীত অন্য তিনটি কোণে আমরা কীভাবে কিছু আঁকব? ভয় পাবেন না, কারণ শিখার পর্দার আসল আকার পাওয়ার একটি পদ্ধতি রয়েছে (কারণ এটি একটি ডকুমেন্টেড সমস্যা রয়েছে)।

মূলত অ্যাসিনক্রোনাস পদ্ধতি

নোট করুন, জাভাস্ক্রিপ্টের মতো, অপেক্ষার কীওয়ার্ডটি কেবলমাত্র একটি অ্যাসিনক্রোনাস ফাংশনে ব্যবহৃত হতে পারে। সুতরাং নিশ্চিত হয়ে নিন যে আপনি আপনার মূল অ্যাসিক্রোনাইজেশন করছেন (নাড়াচাড়া কোনও ব্যাপার নয়)।

পরবর্তী চেকপয়েন্টটি মূল পদ্ধতিতে একবার মাত্রা পায় এবং আমাদের গেম ক্লাসে সেগুলি সংরক্ষণ করে কারণ আমাদের বারবার তাদের প্রয়োজন হবে।

চেকপয়েন্ট: a1f9df3

স্প্রেটস রেন্ডার করুন

অবশেষে, আমরা পর্দায় আমাদের যে কোনও আকার আঁকতে পারি। তবে আমরা স্প্রাইটস চাই! পরবর্তী চেকপয়েন্টটি যথাযথ সম্পদ ফোল্ডারে আমরা ব্যবহার করতে চাই এমন কিছু সম্পদ যুক্ত করে:

চেকপয়েন্ট: 92ebfd9

এবং পরেরটি একটি ভুলে যাওয়ার জন্য একটি গুরুত্বপূর্ণ কাজ করে: আপনার pubsepc.yaml ফাইলটিতে সমস্ত কিছু যুক্ত করুন। আপনার কোড তৈরির সময়, ডার্ট কেবল সেখানে নির্দিষ্ট সংস্থানগুলিকে বান্ডিল করে।

চেকপয়েন্ট cf5975f

অবশেষে আমরা আমাদের স্প্রাইট আঁকতে পারি। শিখার যে মূল উপায়টি দেয় তা হ'ল একটি শিখা.ইম্যাগেস.লোড পদ্ধতি ('চিত্রগুলির ফোল্ডার থেকে পাথ') সরবরাহ করা যা লোড হওয়া চিত্রের জন্য একটি প্রতিশ্রুতি দেয় যা ক্যানভাস.ড্রাইজ ইমেজ পদ্ধতি ব্যবহার করে আঁকা যায় can ।

যাইহোক, একটি বাক্স অঙ্কন করার সময়, এটি অনেক সহজ কারণ আমরা স্প্রাইটকম্পোনমেন্ট ক্লাসটি এর মতো ব্যবহার করতে পারি:

বিমূর্ত উপাদান শ্রেণিটি একটি দ্বি-পদ্ধতি ইন্টারফেস: আমাদের গেমের মতোই রেন্ডারিং এবং আপডেট করা ating ধারণাটি হ'ল গেমটি এমন উপাদানগুলি নিয়ে তৈরি করা যেতে পারে যার গেন্ডারিং এবং আপডেট পদ্ধতিগুলি গেম পদ্ধতিগুলির মধ্যে ডাকা হয়। স্প্রাইটকোম্পোন্টেট এমন একটি বাস্তবায়ন যা তার নাম এবং আকার (বর্গক্ষেত্র বা আয়তক্ষেত্রাকার), অবস্থান (x, y) এবং আবর্তনের কোণের ভিত্তিতে একটি স্প্রিটকে উপস্থাপন করে। পছন্দসই আকারটি ফিট করার জন্য চিত্রটি যথাযথভাবে হ্রাস বা বড় করা হবে।

এই ক্ষেত্রে আমরা "crate.png" ফাইলটি লোড করি যা অবশ্যই "সম্পদ / চিত্রগুলি" ফোল্ডারে অবস্থিত থাকতে হবে এবং একটি ক্রেট শ্রেণি রয়েছে যা 128 x 128 পিক্সেল এবং 0 এর ঘূর্ণন কোণ সহ ফ্রেম আঁকবে।

তারপরে আমরা গেমটিতে একটি ক্রেট সম্পত্তি যুক্ত করি, এটি আনুভূমিকভাবে কেন্দ্রীভূত করে স্ক্রিনের শীর্ষে ইনস্ট্যানিয়েট করি এবং আমাদের গেমের লুপে এটি রেন্ডার করি:

এটি আমাদের বাক্সটি রেন্ডার করবে! উজ্জ্বল! কোডটি বেশ সংক্ষিপ্ত এবং খুব সহজে পড়া যায়।

চেকপয়েন্ট 7603ca4

গেম লুপে স্থিতি আপডেট করুন

আমাদের বাক্সটি কার্যত বাতাসে থামে। আমরা এটি সরানো চাই! প্রতিটি বক্স স্থির হারে নেমে আসবে। আমাদের আপডেট পদ্ধতিতে আমাদের তা করতে হবে; আমাদের প্রতিটি বাক্সের ওয়াই অবস্থানটি কেবল পরিবর্তন করুন:

এই পদ্ধতিতে শেষ আপডেটের পরে কেটে যাওয়া সময় (সেকেন্ডে) লাগে। সাধারণত এটি খুব ছোট হবে (10 এমএসের ক্রমে)। স্পিড তাই এই ইউনিটগুলির মধ্যে একটি ধ্রুবক। আমাদের ক্ষেত্রে স্পিড = 100 পিক্সেল / সেকেন্ড।

চেকপয়েন্ট: 452dc40

ইনপুট হ্যান্ডলিং

হুররে! বাক্সগুলি পড়ে এবং অদৃশ্য হয়ে যায় তবে আপনি তাদের সাথে ইন্টারঅ্যাক্ট করতে পারবেন না। আমরা স্পর্শ করা বাক্সগুলি ধ্বংস করার জন্য একটি পদ্ধতি যুক্ত করি। এই জন্য আমরা একটি উইন্ডো ইভেন্ট ব্যবহার করতে যাচ্ছি। উইজেটটি বিশ্বব্যাপী প্রতিটি ঝাঁকুনির প্রকল্পে উপলব্ধ এবং কিছু দরকারী বৈশিষ্ট্য রয়েছে। আমরা মূল পদ্ধতির জন্য একটি অনপয়েন্টারডেটা প্যাকেট ইভেন্টটি নিবন্ধভুক্ত করব, অর্থাৎ যখন ব্যবহারকারী স্ক্রিনটি ট্যাপ করে:

আমরা কেবল ক্লিকের (x, y) স্থানাংকটি বের করি এবং এটি সরাসরি আমাদের খেলায় প্রেরণ করি। এইভাবে, গেমটি ইভেন্টগুলির বিশদ সম্পর্কে চিন্তা না করে ক্লিকটি পরিচালনা করতে পারে।

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

চেকপয়েন্ট: 364a6c2

একাধিক স্প্রিট রেন্ডার করুন

এখানে তৈরি করার জন্য একটি গুরুত্বপূর্ণ বিষয় রয়েছে এবং এটি রেন্ডারিং পদ্ধতির সাথে সম্পর্কিত। যখন আমরা একটি বাক্স রেন্ডার করি তখন ক্যানভাসের রাজ্যটি নির্বিচারে স্থানান্তরিত হয় এবং অঙ্কনের অনুমতি দেওয়ার জন্য ঘোরানো হয়। যেহেতু আমরা বেশ কয়েকটি বাক্স আঁকতে চাই তাই আমাদের পৃথক বাক্সগুলির মধ্যে ক্যানভাসটি পুনর্বিন্যাস করতে হবে। এটি সংরক্ষণের পদ্ধতিগুলি ব্যবহার করে করা হয়, যা বর্তমান অবস্থাটি সংরক্ষণ করে এবং পুনরুদ্ধার করে, যা পূর্বে সংরক্ষিত স্থিতি পুনরুদ্ধার করে এবং এটি মুছে দেয়।

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

এখন আমরা আরও বাক্স চাই! এটা কিভাবে কাজ করে? ওয়েল আপডেট পদ্ধতিটি আমাদের টাইমার হতে পারে। সুতরাং আমরা চাই যে প্রতি সেকেন্ডে একটি নতুন বাক্স তালিকায় যুক্ত করা হোক। সুতরাং আমরা প্রতিটি আপডেট কল থেকে ব-দ্বীপ বার (টি) সংগ্রহ করতে গেম ক্লাসে আরও একটি পরিবর্তনশীল তৈরি করেছি। যদি এটি 1 এর উপরে হয় তবে এটি পুনরায় সেট করবে এবং একটি নতুন বাক্স তৈরি করবে:

আগের আপডেটটি রাখতে ভুলবেন না যাতে বাক্সগুলি পড়া বন্ধ না হয়। জিনিসগুলিকে আরও আকর্ষণীয় করে তোলার জন্য আমরা গতিটি 250 পিক্সেল / সেকেন্ডেও পরিবর্তন করছি।

চেকপয়েন্ট: 3932372

অ্যানিমেশন রেন্ডার

এটি ঠিক একটি জিআইএফ হওয়া উচিত? আমরা এই টিউটোরিয়ালটির জন্য আরও ভাল স্ক্রিনশট এবং জিআইএফ সেটআপে কাজ করছি!

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

যেহেতু প্রতিটি বিস্ফোরণে অনেকগুলি ফ্রেম থাকে এবং এগুলি দ্রুত আঁকতে হয়, তাই আমরা প্রতিটি ফ্রেম একবার প্রিললোড করে বিস্ফোরণ শ্রেণীর স্থিতিশীল ভেরিয়েবলে সংরক্ষণ করি। তা কিভাবে:

লক্ষ্য করুন যে আমরা আমাদের 7 টি অ্যানিমেশন ফ্রেমকে ঘুরে দেখছি। তারপরে কোন ফ্রেমটি আঁকতে হবে তা স্থির করার জন্য আমরা রেন্ডারিং পদ্ধতিতে কিছু সাধারণ যুক্তি তৈরি করি:

নোট করুন যে আমরা ইতিমধ্যে বর্ণিত হিসাবে চিত্রের সাথে চিত্র দ্বারা চিত্রিত করছি "হাত ধরে"। এই কোডটি হুডের নীচে স্প্রিটকম্পোনেন্টের সাথে সমান। এছাড়াও মনে রাখবেন যে চিত্রটি অ্যারে না থাকলে কিছুই আঁকবে না। সুতরাং TIME সেকেন্ড পরে (আমরা এটি 0.75 বা 750 এমএসে সেট করেছি) কিছুই রেন্ডার হয় না।

এগুলি সবই ভাল এবং ভাল, তবে আমরা বিস্ফোরণে বিস্ফোরণে আমাদের বিস্ফোরণ অ্যারে দূষিত করতে চাই না। এজন্য আমরা একটি ধ্বংস () পদ্ধতিও যুক্ত করছি যা লাইফটাইম পদ্ধতির উপর ভিত্তি করে আমাদের বিস্ফোরণ বস্তুটি ধ্বংস করতে হবে কিনা তা ফিরিয়ে দেয়।

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

অ্যারে দ্বারা স্পর্শ করা ক্ষেত্রগুলি সরানোর জন্য আমরা ইতিমধ্যে এটি ইনপুট পদ্ধতির জন্য ব্যবহার করেছি। আমরা সেখানে একটি বিস্ফোরণ ঘটাব।

আরও তথ্যের জন্য চেকপয়েন্টে একবার দেখুন।

চেকপয়েন্ট: d8c30ad

অডিও খেলুন

আমরা অবশেষে পরবর্তী প্রতিশ্রুতিতে কিছু অডিও খেলব! এটি করতে, আপনাকে সম্পদ / অডিও / এ সম্পদ ফোল্ডারে ফাইল যুক্ত করতে হবে। এটি অবশ্যই একটি এমপি 3 বা একটি ওজিজি ফাইল হতে হবে। তারপরে, আপনার কোডের যে কোনও জায়গায়, নিম্নলিখিতটি করুন:

যেখানে ফাইলের নাম.এমপি 3 এতে থাকা ফাইলটির নাম। আমাদের বাক্সে যখন আমরা একটি বাক্সে ক্লিক করি তখন আমরা শব্দটি বিস্ফোরণ করি mp এমপি 3 play

যতিচিহ্ন দিয়ে শুরু করা যাক। বর্তমান পয়েন্টের সংখ্যা সংরক্ষণ করার জন্য আমরা একটি পয়েন্ট ভেরিয়েবল যুক্ত করছি। এটি শূন্য দিয়ে শুরু হয়; ক্লিক করা প্রতিটি বক্সে আমরা 10 পয়েন্ট পেয়েছি এবং বাক্সটি মাটিতে হিট হলে 20 টি হারাবে।

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

স্কোরিং বর্তমানে কাজ করছে তবে কোথাও এটি প্রদর্শিত হয়নি। তাড়াতাড়ি আসবে।

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

চেকপয়েন্ট: 43a7570

এখন আমরা আরও টোন চাই! অডিও প্লেয়ারগুলি (নোটগুলি দেখুন) যে লিব শিখা ব্যবহার করে তা আপনাকে একবারে একাধিক শব্দ বাজানোর অনুমতি দেয়, আপনি খেয়াল করে দেখতে পেয়েছেন যে আপনি ক্রেজি ক্লিক করেছেন, তবে এখন যোগ করে এইটির সুবিধাটি নেওয়া যাক বাক্স মেঝেটি (বাক্সটি ধ্বংসের পদ্ধতি) এবং পটভূমি সংগীতে আঘাত করলে আমরা একটি মিস খেলি।

একটি লুপে ব্যাকগ্রাউন্ড সংগীত বাজানোর জন্য, লুপ পদ্ধতিটি ব্যবহার করুন, যা নিম্নলিখিত হিসাবে কাজ করে:

এই প্রতিশ্রুতিতে আমরা পূর্বের প্রতিশ্রুতিতে যে বাক্সগুলি মিস করেছি সেগুলি ধ্বংসের শর্তটিও সংশোধন করছি (যেহেতু জানার উপায় ছিল না, এখন শব্দ আছে) is

চেকপয়েন্ট: f575150

পাঠ্য রেন্ডার করুন

এখন আমাদের যে সমস্ত অডিও ডেটা রয়েছে তা আমাদের রয়েছে (পটভূমি, সংগীত, সাউন্ড এফেক্টস, এমপি 3, ওজিজি, একই সময়ে অসীম লুপ), আমরা পাঠ্যটি খেলতে শুরু করতে পারি। আমাদের সেই স্কোরটি দেখতে হবে। অনুচ্ছেদ বস্তু তৈরি করে এবং অঙ্কন অঞ্চলটির অঙ্কিত অনুচ্ছেদ ব্যবহার করে এটি "হাত দ্বারা" করা হয়। এটির জন্য প্রচুর কনফিগারেশন প্রয়োজন এবং এটি একটি দুর্দান্ত বিভ্রান্তিকর এপিআই, তবে এটি এটির মতো করা যেতে পারে:

চেকপয়েন্ট: e09221e

এটি ডিফল্ট ফন্টে আঁকা হয় এবং আপনি আলাদা সাধারণ সিস্টেমের ফন্ট নির্দিষ্ট করতে ফন্টফ্যামিলি সম্পত্তি ব্যবহার করতে পারেন। তবে আপনি সম্ভবত আপনার খেলায় একটি কাস্টম যুক্ত করতে চাইবেন।

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

বিমূর্তির এই অতিরিক্ত স্তরটি নিজেই ফ্লটার থেকে আসে এবং আপনাকে একই ফন্টে একাধিক ফাইল যুক্ত করতে দেয় (সাহসী, বৃহত্তর আকারগুলি নির্ধারণ করতে)। এখন, আমাদের অনুচ্ছেদে ফিরে আসি, টেক্সটস্টাইল কনস্ট্রাক্টরের জন্য হরফফ্যামিলি: 'হ্যালো' সম্পত্তি যুক্ত করুন।

রান করুন এবং আপনি দেখতে পাবেন বেশ হালো ফন্ট!

চেকপয়েন্ট: 3155bda

বর্ণিত এই পদ্ধতিটি আপনাকে আরও নিয়ন্ত্রণ দেয় যদি উদাহরণস্বরূপ, আপনি যদি একই অনুচ্ছেদে একাধিক শৈলী রাখতে চান। তবে, যদি এই ক্ষেত্রে যেমন আপনি শৈলীর সাথে একটি সাধারণ অনুচ্ছেদ চান তবে এটি তৈরি করতে আপনি Flame.util.text সহায়কটি ব্যবহার করতে পারেন:

এই একক লাইনটি আগের 4 টি প্রতিস্থাপন করে এবং সর্বাধিক গুরুত্বপূর্ণ ফাংশনগুলি দেখায়। পাঠ্য (প্রথম যুক্তি) প্রয়োজনীয় এবং অন্য সমস্ত যুক্তিসঙ্গত খেলাপি withচ্ছিকভাবে optionচ্ছিক।

রঙের জন্য আমরা আবার কলারস.হাইট সাহায্যকারী ব্যবহার করছি তবে আপনি যদি নির্দিষ্ট রঙ চান তবে আমরা নতুন রঙ (0xFFFFFFFF )ও ব্যবহার করতে পারি।

চেকপয়েন্ট: 952a9df

এবং সেখানে আপনি এটা আছে! স্প্রিট রেন্ডারিং, পাঠ্য রেন্ডারিং, অডিও, গেম লুপ, ইভেন্ট এবং স্থিতি পরিচালনা সহ একটি সম্পূর্ণ গেম।

প্রকাশনা

আপনার খেলা চালু করার জন্য প্রস্তুত?

ঝাঁকুনির টিউটোরিয়াল থেকে এই সহজ পদক্ষেপগুলি অনুসরণ করুন।

এগুলি সকলেই বেশ সোজা, আপনি চূড়ান্ত চেকপয়েন্টে দেখতে পাবেন, আইকন অংশ বাদে যা কিছুটা মাথা ব্যথার কারণ হতে পারে। আমি আপনার আইকনটির একটি বৃহত সংস্করণ (512 বা 1024 পিক্সেল) তৈরি করার এবং আপনার প্রয়োজনীয় সবকিছু (আইওএস এবং অ্যান্ড্রয়েড) দিয়ে একটি জিপ ফাইল তৈরি করতে অ্যাপ্লিকেশন আইকন ওয়েবসাইটটি ব্যবহার করার পরামর্শ দিচ্ছি।

চেকপয়েন্ট: 2974f29

আর কি?

তুমি কি শিখা পছন্দ কর? আপনার যদি কোনও পরামর্শ, বাগ, প্রশ্ন, ফাংশন অনুরোধ বা অনুরূপ থাকে তবে দয়া করে নির্দ্বিধায় আমার সাথে যোগাযোগ করুন!

আপনি কি আপনার গেমটি উন্নত করতে এবং আরও শিখতে চান? ফায়ারবেস এবং গুগল সাইন ইন সহ একটি সার্ভার সম্পর্কে কীভাবে? একটি বিজ্ঞাপন স্থাপন সম্পর্কে কীভাবে? একটি প্রধান মেনু এবং একাধিক স্ক্রিন সেট আপ সম্পর্কে কীভাবে?

অবশ্যই, উন্নত করা যায় এমন অনেক কিছুই আছে - এটি কেবল একটি উদাহরণ গেম। তবে, ফ্লটার গেম ডেভলপমেন্টের মূল ধারণাগুলির (একটি শিখা বা তার সাথে ছাড়া) মূল ধারণা থাকতে হবে।

আশা করি সবাই পছন্দ করেছে!

মূলত গিটহাবে প্রকাশিত।