জাভাতে আপনার প্রথম অ্যান্ড্রয়েড গেমটি কীভাবে লিখবেন

লেখক: John Stephens
সৃষ্টির তারিখ: 1 জানুয়ারি 2021
আপডেটের তারিখ: 19 মে 2024
Anonim
অ্যান্ড্রয়েডে কীভাবে একটি টিক ট্যাক টো গেম তৈরি করবেন [জাভা 2020]
ভিডিও: অ্যান্ড্রয়েডে কীভাবে একটি টিক ট্যাক টো গেম তৈরি করবেন [জাভা 2020]

কন্টেন্ট


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

ঠিককরা

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


আপনি প্রথমে যা করতে চান তা হ'ল পরিবর্তন করা AppCompatActivity থেকে কার্যকলাপ। এর অর্থ আমরা অ্যাকশন বারের বৈশিষ্ট্যগুলি ব্যবহার করব না।

একইভাবে, আমরা আমাদের গেমটি পুরো পর্দা তৈরি করতে চাই। সেটকন্টেন্ট ভিউ () এ কল করার আগে অনক্রিট () তে নিম্নলিখিত কোডটি যুক্ত করুন:

getWindow ()। setFlags (উইন্ডো ম্যানেজ। লেআউটপ্যারামস.এফএলএজি_ফুলসক্রেন, উইন্ডো ম্যানেজ। লেআউটপ্যারামস.ফ্ল্যাজ_ফুলসক্রেন); this.requestWindowFeature (Window.FEATURE_NO_TITLE);

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

আপনার গেমের দৃশ্য তৈরি করা হচ্ছে

আপনি এমন অ্যাপ্লিকেশনগুলিতে ব্যবহার হতে পারেন যা বোতাম, চিত্র এবং লেবেলের মতো দর্শনের লেআউট সংজ্ঞায়িত করতে একটি এক্সএমএল স্ক্রিপ্ট ব্যবহার করে। এই কি লাইন setContentView আমাদের জন্য করছে


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

সুতরাং পড়তে লাইনটি পরিবর্তন করুন:

সেট কনটেন্টভিউ (নতুন গেম ভিউ (এটি))

আপনি দেখতে পাবেন এটি আবারও লালরেখার নীচে। কিন্তু এখন আপনি যদি Alt + Enter টিপেন তবে ক্লাসটি আমদানির বিকল্প আপনার কাছে নেই। পরিবর্তে, আপনার কাছে বিকল্প রয়েছে সৃষ্টি একটি শ্রেণী. অন্য কথায়, আমরা আমাদের নিজস্ব শ্রেণি তৈরি করতে চলেছি যা ক্যানভাসে কী চলছে তা নির্ধারণ করবে। এটি কেবল প্রস্তুত দর্শনগুলি দেখানোর পরিবর্তে আমাদের পর্দার দিকে আঁকতে অনুমতি দেবে।

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

ইন্টারফেস (গুলি) বাক্সে আপনি লিখবেন android.view.SurfaceHolder.Callback। যে কোনও ক্লাসের মতোই এখন আমাদের কনস্ট্রাক্টর তৈরি করা দরকার। এই কোডটি ব্যবহার করুন:

ব্যক্তিগত মেইনথ্রেড থ্রেড; পাবলিক গেম ভিউ (প্রসঙ্গে প্রসঙ্গ) {সুপার (প্রসঙ্গ); । GetHolder () addCallback (এই); }

প্রতিবার যখনই আমাদের ক্লাসকে একটি নতুন অবজেক্ট তৈরি করার জন্য ডাকা হয় (এই ক্ষেত্রে আমাদের পৃষ্ঠটি), এটি কনস্ট্রাক্টর চালাবে এবং এটি একটি নতুন পৃষ্ঠ তৈরি করবে। ‘সুপার’ লাইনটি সুপারক্লাসকে কল করে এবং আমাদের ক্ষেত্রে এটি সারফেসভিউ।

কলব্যাক যোগ করার মাধ্যমে আমরা ইভেন্টগুলিতে বাধা দিতে সক্ষম হয়েছি।

এখন কিছু পদ্ধতি ওভাররাইড করুন:

@ ওভাররাইড সার্বজনীন শূন্য পৃষ্ঠতল বদলে গেছে (সারফেসহোল্ডার ধারক, ইন ফর্ম্যাট, ইন প্রস্থ, ইন উচ্চতা)

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

আপনি সবেমাত্র একটি নতুন ক্লাস তৈরি করেছেন এবং প্রতিবার আমরা এটি উল্লেখ করেছি, এটি আপনার গেমটি আঁকতে ক্যানভাস তৈরি করবে। ক্লাস সৃষ্টি বস্তু এবং আমাদের আরও একটি প্রয়োজন।

থ্রেড তৈরি করা হচ্ছে

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

আপনি যেমনটি করেছিলেন তেমনভাবেই নতুন ক্লাস তৈরি করুন এবং এবার এটি প্রসারিত হতে চলেছে সুতা। কনস্ট্রাক্টরে আমরা কেবল কল করতে যাচ্ছি সুপার()। মনে রাখবেন, এটিই সুপার ক্লাস, যা থ্রেড এবং এটি আমাদের জন্য সমস্ত ভারী উত্তোলন করতে পারে। এটি কেবল কল করে রাখা থালা বাসনগুলি ধুয়ে প্রোগ্রাম তৈরি করার মতো like ধৌতকারী যন্ত্র().

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

সম্পূর্ণ জিনিসটির মতো দেখতে হবে:

পাবলিক ক্লাস মেইনথ্রেড প্রসারিত করে public ব্যক্তিগত সারফেসহোল্ডার সারফেসহোল্ডার; ব্যক্তিগত গেম ভিউ গেম ভিউ; পাবলিক মেইনথ্রেড (সারফেসহোল্ডার সারফেসহোল্ডার, গেম ভিউ গেমভিউ) {সুপার (); this.surfaceHolder = পৃষ্ঠহোল্ডার; this.gameView = গেম ভিউ; }}

Schweet। আমাদের এখন একটি গেমভিউ এবং একটি থ্রেড রয়েছে!

গেম লুপ তৈরি করা হচ্ছে

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

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

এবং এটি কিছুটা এরকম হয়:

@ ওভাররাইড পাবলিক অকার্যকর রান () {যখন (চলমান) {ক্যানভাস = নাল; চেষ্টা করুন vas ক্যানভাস = এই.সুরফেসহোল্ডার.লকক্যানভাস (); সিঙ্ক্রোনাইজড (সারফেসহোল্ডার) {this.gameView.update (); this.gameView.draw (ক্যানভাস); }} ক্যাচ (ব্যতিক্রম ই)}} অবশেষে {যদি (ক্যানভাস! = নাল) {চেষ্টা করুন {পৃষ্ঠহোল্ডার.উনলকক্যানভাসঅ্যান্ডপোস্ট (ক্যানভাস); } ধরা (ব্যতিক্রম ই) {ই.প্রিন্টস্ট্যাকট্রেস (); }}}

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

বেসরকারী সারফেসহোল্ডার সারফেসহোল্ডার; ব্যক্তিগত গেম ভিউ গেম ভিউ; বেসরকারী বুলিয়ান চলমান; পাবলিক স্ট্যাটিক ক্যানভাস ক্যানভাস;

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

আপডেট হ'ল এমন একটি পদ্ধতি যা আমরা তৈরি করতে যাচ্ছি এবং এখানেই মজার স্টাফগুলি ঘটবে।

দ্য চেষ্টা এবং ধরা এরই মধ্যে কেবল জাওয়ার প্রয়োজনীয়তা যা দেখায় যে আমরা ক্যানভাস প্রস্তুত না থাকলে ইত্যাদি ঘটতে পারে এমন ব্যতিক্রমগুলি (ত্রুটিগুলি) চেষ্টা করতে ও পরিচালনা করতে ইচ্ছুক show

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

পাবলিক অকার্যকর সেটআরুনিং (বুলিয়ান isRunning) {চলমান = isRunning; }

তবে এই মুহুর্তে, একটি জিনিস এখনও হাইলাইট করা উচিত এবং তা হ'ল হালনাগাদ। এটি কারণ আমরা এখনও আপডেট পদ্ধতি তৈরি করি নি। সুতরাং ফিরে পপ GameView এবং এখন পদ্ধতি যুক্ত করুন।

সর্বজনীন শূন্য আপডেট () {}

আমাদেরও দরকার শুরু সূত্র! আমরা আমাদের মধ্যে এটি করতে যাচ্ছি surfaceCreated পদ্ধতি:

@ ওভাররাইড পাবলিক শূন্য পৃষ্ঠতল তৈরি (সারফেসহোল্ডার ধারক) {থ্রেড.সেটরানিং (সত্য); thread.start (); }

পৃষ্ঠটি নষ্ট হয়ে গেলে আমাদের থ্রেডও বন্ধ করতে হবে। আপনি যেমন অনুমান করতে পারেন, আমরা এটি পরিচালনা করি surfaceDestroyed পদ্ধতি। তবে এটি দেখতে আসলে কোনও থ্রেড থামাতে একাধিক প্রচেষ্টা নিতে পারে, আমরা এটিকে একটি লুপে রেখে ব্যবহার করব চেষ্টা এবং ধরা আবার। তাই ভালো:

@ ওভাররাইড পাবলিক শূন্য পৃষ্ঠতল ডিস্ট্রোয়েড (সারফেসহোল্ডার ধারক) {বুলিয়ান রিট্রি = সত্য; (পুনরায় চেষ্টা করুন) থ্রেড.সেটরুনিং (মিথ্যা); thread.join (); } ধরা (বাধাপ্রাপ্তি e)। ই.প্রিন্টস্ট্যাকট্রেস (); } retry = মিথ্যা; }}

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

থ্রেড = নতুন মেইনথ্রেড (getHolder (), এটি); setFocusable (সত্য);

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

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

একটি গ্রাফিক্স করছেন

ডান, এখন আমাদের আঁকার জন্য একটি ফাঁকা স্ক্রিন আছে, আমাদের যা করতে হবে তা এটি আঁকতে হবে। ভাগ্যক্রমে, এটি সহজ অংশ। আপনাকে যা করতে হবে তা হ'ল আমাদের মধ্যে ড্র পদ্ধতিটি ওভাররাইড করা GameView ক্লাস এবং তারপরে কিছু সুন্দর ছবি যুক্ত করুন:

@ ওভাররাইড পাবলিক অকার্যকর ড্র (ক্যানভাস ক্যানভাস) {সুপার.ড্রে (ক্যানভাস); যদি (ক্যানভাস! = নাল) {ক্যানভাস.ড্রাওকালার (কালার.ডাব্লুহাইট); পেইন্ট পেইন্ট = নতুন পেইন্ট (); পেইন্ট.সেটর রঙ (রঙ.আরজিবি (250, 0, 0)); ক্যানভাস.ড্রেআরেক্ট (100, 100, 200, 200, পেইন্ট); }}

এটি চালান এবং আপনার এখন অন্যথায় সাদা পর্দার উপরের বাম দিকে একটি সুন্দর লাল স্কোয়ার থাকা উচিত। এটি অবশ্যই একটি উন্নতি।

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

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

এই শ্রেণিটি ক্যানভাসে একটি স্প্রিট আঁকতে চলেছে এবং এর মতো দেখবে

পাবলিক ক্লাস ক্যারেক্টারসপ্রাইট {ব্যক্তিগত বিটম্যাপ চিত্র; পাবলিক ক্যারেক্টারসপ্রাইট (বিটম্যাপ বিএমপি) {চিত্র = বিএমপি; } পাবলিক শূন্য ড্র (ক্যানভাস ক্যানভাস) {ক্যানভাস.ড্রববিটম্যাপ (চিত্র, 100, 100, নাল); }}

এখন এটি ব্যবহার করার জন্য আপনাকে প্রথমে বিটম্যাপটি লোড করতে হবে এবং তারপরে ক্লাসটি কল করতে হবে GameView। একটি রেফারেন্স যোগ করুন প্রাইভেট ক্যারেক্টারসপ্রাইট ক্যারেক্টারসপ্রাইট এবং তারপর surfaceCreated পদ্ধতি, লাইন যুক্ত করুন:

ক্যারেক্টারসপ্রাইট = নতুন ক্যারেক্টারসপ্রাইট (বিটম্যাপফ্যাক্টরি.ডেকোডআরসোর্স (গেটআরোসোর্স (), আর .ড্রাব্যাবল.এভিডগ্রিন));

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

characterSprite.draw (ক্যানভাস);

এখন রান ক্লিক করুন এবং আপনার গ্রাফিক আপনার স্ক্রিনে প্রদর্শিত হওয়া উচিত! এটি বিউবু। আমি আমার স্কুল পাঠ্যপুস্তকে তাকে আঁকতাম।

আমরা যদি এই ছোট্ট লোকটিকে সরানো চাইতাম? সরল: আমরা কেবল তার অবস্থানের জন্য এক্স এবং y ভেরিয়েবল তৈরি করি এবং তারপরে একটিতে এই মানগুলি পরিবর্তন করি হালনাগাদ পদ্ধতি।

আপনার রেফারেন্স যুক্ত করুন CharacterSprite এবং তারপরে আপনার বিটম্যাপটি আঁকুন x, y। এখানে আপডেটের পদ্ধতিটি তৈরি করুন এবং আপাতত আমরা কেবল চেষ্টা করতে যাচ্ছি:

Y ++,;

প্রতিবার গেম লুপটি চললে আমরা চরিত্রটিকে পর্দার নীচে নিয়ে যাব। মনে রাখবেন, Y স্থানাঙ্কগুলি উপরে থেকে পরিমাপ করা হয় 0 পর্দার শীর্ষে। অবশ্যই আমাদের কল করতে হবে হালনাগাদ পদ্ধতিতে CharacterSprite থেকে হালনাগাদ পদ্ধতিতে GameView.

আবার খেলুন টিপুন এবং এখন আপনি দেখতে পাবেন যে আপনার চিত্রটি ধীরে ধীরে স্ক্রিনের নীচে tra আমরা এখনও কোনও গেম পুরষ্কার জিততে পারি না তবে এটি একটি শুরু!

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

সর্বজনীন শূন্য আপডেট () {x + = xVelocity; y + = yVelocity; যদি ((x & gt; স্ক্রিনউইথ - ইমেজ.জেটভিডথ ()) || (এক্স & এলটি; 0)) V xVelocity = xVelocity * -1; } if ((y & gt; screenHeight - image.getHeight ()) || (y & lt; 0)) {yVelocity = yVelocity * -1; }}

আপনাকে এই ভেরিয়েবলগুলি সংজ্ঞায়িত করতে হবে:

প্রাইভেট ইন্ট xVelocity = 10; বেসরকারী ইন yVelocity = 5; প্রাইভেট ইন্ট স্ক্রিনউইথ = রিসোর্স.জেটসিসটেম () .ডেটপ্লেপ্লেমেট্রিক্স ()। প্রস্থপিক্সেল; প্রাইভেট ইন্ট স্ক্রিনহাইট = রিসোর্স.জেটসিস্টেম () .ডেটডিসপ্লেমেট্রিক্স ()। উচ্চতাপিক্সেল;

অপ্টিমাইজেশান

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

এই সমস্যার কয়েকটি সমাধান রয়েছে। আমি যা শুরু করতে চাই তা হল একটি ব্যক্তিগত পূর্ণসংখ্যা তৈরি করা প্রধান থ্রেড এবং কল যে targetFPS। এটির মান 60 হবে।আমি চেষ্টা করতে যাচ্ছি এবং এই গতিতে আমার গেমটি চালানোর চেষ্টা করব এবং ইতিমধ্যে, আমি এটিটি নিশ্চিত করার জন্য যাচ্ছি be তার জন্য, আমি একটি প্রাইভেট ডাবলও চাই averageFPS.

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

@ ওভাররাইড পাবলিক অকার্যকর রান () start দীর্ঘ স্টার্টটাইম; দীর্ঘ সময়মিলিস; দীর্ঘ ওয়েটটাইম; দীর্ঘ টোটাল টাইম = 0; int ফ্রেমকাউন্ট = 0; দীর্ঘ লক্ষ্যমাত্রা = 1000 / টার্গেটএফপিএস; while (চলমান) {startTime = System.nanoTime (); ক্যানভাস = নাল; চেষ্টা করুন vas ক্যানভাস = এই.সুরফেসহোল্ডার.লকক্যানভাস (); সিঙ্ক্রোনাইজড (সারফেসহোল্ডার) {this.gameView.update (); this.gameView.draw (ক্যানভাস); }} ক্যাচ (ব্যতিক্রম ই)}} অবশেষে {যদি (ক্যানভাস! = নাল) {চেষ্টা করুন {পৃষ্ঠহোল্ডার.উনলকক্যানভাসঅ্যান্ডপোস্ট (ক্যানভাস); } ধরা (ব্যতিক্রম ই) {ই.প্রিন্টস্ট্যাকট্রেস (); ;}} সময়মিলিস = (System.nanoTime () - স্টার্টটাইম) / 1000000; ওয়েটটাইম = টার্গেটটাইম - টাইমমিলিস; চেষ্টা করুন {this.sleep (ওয়েটটাইম); } ধরা (ব্যতিক্রম ই) {T টোটালটাইম + = সিস্টেম.নানোটাইম () - স্টার্টটাইম; frameCount ++,; যদি (ফ্রেমকাউন্ট == টার্গেটএফপিএস) F গড় এফপিএস = 1000 / ((টোটালটাইম / ফ্রেমকাউন্ট) / 1000000); ফ্রেমকাউন্ট = 0; টোটালটাইম = 0; System.out.println (averageFPS); }}}

এখন আমাদের গেমটি এটি 60 এর এফপিএস লক করার চেষ্টা করছে এবং আপনার খুঁজে পাওয়া উচিত যে এটি একটি আধুনিক ডিভাইসে সাধারণত মোটামুটি স্থির 58-62 এফপিএস পরিমাপ করে। এমুলেটরটিতে যদিও আপনি অন্যরকম ফলাফল পেতে পারেন।

60 থেকে 30 টি পরিবর্তন করার চেষ্টা করুন এবং দেখুন কী ঘটে। গেমটি ধীর হয়ে যায় এবং এটি উচিত এখন আপনার লগকটে 30 টি পড়ুন।

সমাপ্তি চিন্তা

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

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

পরবর্তীজাভা সম্পর্কিত একটি শিক্ষানবিশ গাইড

আপডেট, ফেব্রুয়ারী 5, 2019 (11:28 এএম ইটি):অনুমিত স্যামসং গ্যালাক্সি স্পোর্টের স্মার্টওয়াচের (উপরে দেখানো) রেকেন্ড করা রেন্ডারটি আসন্ন পরিধানযোগ্য পোশাকটি কেমন হতে পারে সে সম্পর্কে আমাদের প্রথম চেহার...

যদি আপনি আপনার মানিব্যাগের জন্য স্যামসুং গ্যালাক্সি ট্যাব এস 5 খুব বেশি খুঁজে পান তবে আমাদের কাছে কিছু ভাল খবর রয়েছে - স্যামসুং চুপি চুপি চুপিচুপি সস্তার গ্যালাক্সি ট্যাব এ 10.1 ট্যাবলেটে সপ্তাহান্তে...

পড়তে ভুলবেন না