آیا همه ی کنترول های این برنامه در یک اکتیویتی هستن که با انیمیشن ظاهر میشن ؟
این بازی رو حتما دیدین
سوالم اینه که آیا این کنترول هایی که با انیمیشن میان و میرن همشون تو یه اکتیویتی هستن یا اکتیویتی های مجزا؟
و اینکه اگر تو یه اکتیویتی هستن چطور همشون رو جا دادن که با انیمیشن ظاهرشون میکنن و اینقدر با نظم هستن ؟


من این برنامه رو به یاد ندارم ولی از تصاویر متوجه شدم که یکی از راست میاد یکی از چپ درسته؟
خب اگه اینجوره خیلی چیز سختی نیست. نیاز نیست که هر کدوم از گزینه ها ی single player و ... به اکتیویتی باشن. میشه هرکدوم یه لایه باشن و background شون به عکس ست شده باشه و دو عکس و 1 متن هم توی هرکدوم باشه. حالا فقط کافیه با چند تا thread منظم و دادن انیمیشن به لایه ها (نه به عکس ها و متن ها ) اونها رو وارد صفحه کنی.
اگه نیازه بگو بیشتر توضیح بدم :)
همون طور که میدونید میتوانید با android ndk از کدهای c++ در پروژه ی اندرویدی خود استفاده کنید که به این کار کدنویسی محلی (native code) می گویند.
این پردازش تصویر هایی که به این طریق در این برنامه ها انجام میشه معمولا (نه در همه ی مواقع) از طریق native code (کدنویسی محلی) انجام میشه و نکته ای وجود دارد این است که این کنترل هایی (در واقع گرافیک هایی) که در این صفحه ها وجود داره و همچنین کدهایی که باعث ایجاد این انیمیشن ها میشه را با native code طراحی و کدنویسی می کنند.
توضیحات تکمیلی:
نکته:دلیل این که از واژه ی گرافیک استفاده کردم اینه که این کنترلها توسط کدهای محلی ایجاد شده اند، نه توسط پلاگین ADT
نکته: وقتی شما روی جایی از صفحه کلیک می کنید در واقع روی این کنترلها کلیک نمی کنید، بلکه از طریق کدها ی جاوا مختصات x , y را که کاربر کلیک کرده است را به کدهای محلی میفرستید و کدهای C++ با توجه به مختصاتی که گرفته اند تشخیص میدهند که چه انیمیشنی باید انجام دهند که این انیمیشن ها با تایمر ها انجام میپذیره و در نتیجه پردازش تصویر مورد نظر رو که در این جا منظورمان ایجاد انیمیشن است رو انجام میده. یعنی کدهای c++ لمس صفحه را نمی توانند تشخیص دهند شما باید از طریق کدهای جاوا مختصات صفحه رو بگیرید بعد تابع محلی را که در c++ قرار دارد را فراخوانی کنید.
فکر می کنم جواب این سوالتون رو که آیا این کنترل ها در یک اکتیویتی هستند را هم گرفتید.
جواب سوال اینه که اکتیویتی ما فقط با کدهای محلی ارتباط برقرار میکنه.مثلا هر وقت صفحه لمس شد مختصات رو به کدهای محلی می فرسته.همون طور که عرض کردم این کنترل ها توسط کدهای محلی ایجاد می شوند.
نکته ی جالبی که وجود داره اینه که حتی شما میتونید اکتیویتی خودتان را هم از طریق کدهای c++ طراحی کنید یعنی اکتیویتی محلی ایجاد کنید.
چرا از کدهای محلی برای انجام این کارها استفاده کنیم؟
1- چون به طور مستقیم اجرا می شود و پردازش بهتر انجام می شود.
چون پردازشهای سنگین با native code بهتر انجام میشود.
2- پایداری بهتر
تایمر ها رو با native code بهتر میشه طراحی کرد.
من خودم تو پروژه هام تایمرهام رو با جاوا کدنویسی کردم که زیاد باگ و مشکل دارن که به سختی فراوان برنامه نویسی شون رو انجام دادم ولی چون توی native code حرفه ای نیستم مجبور شدم از همین کدهای جاوا استفاده کنم.
3- توی بازی ها و موارد این چنینی نمیشه با کد نویسی جاوا این چنین انیمیشن های خوبی رو ایجاد کرد که برنامه یا بازی برای سایز های مختلف صفحه به خوبی کار کنه و این چنین انیمیشن هایی هم داشته باشه.
نکته : معمولا این بازی های معروف که بعد از مدتی که برای کامپیوتر طراحی میشوند و سپس سازندگان شان این بازی ها را برای اندروید نیز به اصطلاح پورت میکنند، در واقع همین کدهای c++ را که برای ساخت بازی در کامپیوتر دارند را با کمی تغییرات (میشه گفت بدون تغییر، چون فقط بازی شان را به اندروید پورت میکنند) به بازی اندرویدی تبدیل می کنند. پس میشه گفت که این همه تعریفی که از اندروید برای ساخت گرافیکی ترین بازی ها میشه رو اندروید، مدیون همین c++ هست.
گوگل در واقع با عرضه ی سیستم عامل اندروید که از هسته ی سیستم عامل لینوکس استفاده می کنه زیاد کار شاخی نکرده.
در واقع کار گوگل استفاده از هسته ی (آماده ی) سیستم عامل لینوکس که آماده بود و متن باز بود، همچنین استفاده از پایکاه داده های sqlite در آن، استفاده از زبان برنامه نویسی جاوا برای طراحی پروژه های اندرویدی، محیط متن باز و آماده ی ایکلیپس، استفاده از قدرت زبان c++ که در لینوکس امکان برنامه نویسی c++ هم وجود دارد و خیلی چیز های آماده ی دیگر برای طراحی سیستم عامل اندروید بود.
این چیزهای اوپن سورس و آماده ای که گوگل برای طراحی اندروید از انها استفاده کرده است خوب کار میکنن و تقریبا بدون باگ هستند
و باعث قوت گرفتن سیستم عامل اندروید هستند. مشکل این جاست که گوگل توانسته از این چیزهای آماده استفاده کنه ولی نتوانسته یک سیستم عامل بدون باگ ایجاد کنه.باگهایی که در تایمرها , countdown ها و thread های اندروید وجود داره شما رو مجبور میکنه تا برای ساخت چنین انیمیشن هایی از کدهای محلی استفاده کنید.
من خودم شخصا وقتی می خواستم نسخه ی دمو ی برنامه ام رو که بعد از 30 ثانیه باید اکتیویتی بسته میشد رو ایجاد کنم دو هفته طول کشید با همین کدهای جاوا پیاده سازیش کنم،چون وجود باگ در تایمرها باعث می شد بعضی اوقات اکتیویتی بسته نشه و کاربر بتونه به طور بی نهایت از برنامه استفاده کنه.که البته با تلاش فراوان تونستم مشکلش رو حل کنم و درست پیاده سازیش کنم.
سیستم عامل اندروید و محیط برنامه نویس اش هزاران باگ داره که اگه هزاران صفحه هم درباره ی باگ هاش نوشته بشه باز هم کمه. هزینه ی وجود این باگ ها را ما برنامه نویسان باید بپردازیم ولی چیزی متوجه گوگل نخواهد شد.
این گوگل هست که با ساخت مارکت جهانی اش تمام سرمایه دنیا را جلب خود می کند و بنا به همین سیاست های درآمدزایی اش امکان در آمد زایی برای برنامه نویسهای برخی از کشور ها را نمی دهد و در اکثر اوقات در صفحه ی اصلی مارکت و صفحه های جانبی اش برنامه هایی از برنامه نویسان USA ای وجود دارد.
و این ما برنامه نویسان هستیم که باید سعی کنیم از پیشرفت برنامه نویسی در دنیا عقب نمانیم.
اگر ویدیو قسمت 21-1 رو ببینید استاد در مورد انیمیشن ها توضیحاتی کاملی رو دادن حالا برای این طرحی که شما میگین میشه با دادن duration های مختلف به button ها اون ها رو یکی بعد از دیگری ظاهر کرد
D:
یک ترفندی برای دیدن جزئیات کنترل های صفحه وجود داره، پیشنهاد میکنم حتما امتحان کنید تا همه ی این چیزایی که گفتم رو بتونی بهتر متوجه بشی. روی گوشی گلکسی گرند با اندروید 4.1.2 امتحان کردم جواب میده، رو بعضی گوشی های دیگه هم کار میکنه. برو داخل settings ،بعد داخل developer options اگه developer options غیر فعاله فعالش بکن، بعد تیک گزینه ی Show layout boundaries رو بزن تا این گزینه فعال بشه. بعد میبینی که دور هر جزئی از صفحه خط کشیده شده است .حالا اگه داخل بازی هایی بری که پردازش سنگینی استفاده میکنند(این نشون میده که از android ndk استفاده می کنه) میبینی که کنترل هایی که داخل صفحه قرار دارند از هم مجزا نیستند دلیلش هم اینه که کنترل ها داخل android ndk طراحی شدن و نمیتونه تشخیص شون بده ولی داخل بازی ها و برنامه هایی که از android ndk استفاده نمی کنند و کنترل ها توسط ایکلیپس ایجاد شده اند میتونه تشخیص شون بده و دور هر کدام از کنترل های داخل صفحه خط کشیده شده است و مجزا هستند.
مثلا تو بازی temple run امتحان کردم خط ها را دور کنترل ها رو نشون نداد ولی توی برنامه ای که گفتید(reversi free) خط ها را دور کنترل ها نشون داد.
اگه مشکلی داشتید بگید تا براتون بیشتر توضیح بدم، اسکرین شات هم بزارم.
البته این گزینه ای که گفتم توی بعضی گوشی ها وجود داره.بستگی به ورژن اندرویدتون داره.
من این برنامه رو ندیدم و نمی دونم چطور کار می کنه اما می تونم بگم، لزومی نداره همه چیز کنترل، Activity و Animation باشه. شاید این صفحه یک OpenGL باشه که داره سه بعدی ترسیم میشه.
چه با OpenGL و چه با Canvas ( همان کنترل های مرسوم ) میشه چنین برنامه هایی رو ساخت اما برای تمیز و نرم اجرا شدن نیاز به کار زیاد و دقت به جزئیات و البته درگیریهای بصری زیادی داره.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .