اند انجین - AndEngine

دیدگاه‌ها

109

میخواستم بدونم تا کجا این آموزش ها ادامه پیدا میکنه ؟

سلام ممنون از نظرتون ، سعی می کنم بیشتر امکاناتش رو معرفی کنم ولی خب من حسی عمل می کنم اگه حوصله اش باشه تا جایی که بتونم این مبحث رو ادامه می دم 

با سلام
چرا توی پروژه LineExample ، متغیر هارو Nicolas Gramlich بصورت final تعریف کرده ؟

متغیر رو به چند دلیل final تعریف می کنن : 

  • نمیخوان متغیر تغییر کنه جای دیگه (اشتباهی)
  • میخوان ثابت تعریف کنن و یه جور رسم حساب میشه 
  • متغیر غیر عمومی رو قراره یک کلاس داخلی (inner class) بهش دسترسی داشته باشه.

سلام
من یک بازی ساخته شده با AndEngine رو نصب کردم
توی حرکت دادن کاراکتر اصلی مشکلی ندارم ، برای خلق دشمن ها هم مشکلی ندارم ، برای شلیک هم مشکلی نیست
اما قسمت هایی که چالش شده این هست که چطور بعضی دشمن ها دو تا جون دارند ؟ چطور با نزدیک شدن به یک دشمن شروع دنبال کردن و تعقیب کاراکتر اصلی میکنند ؟ و با بیشتر شدن این فاصله از یک حد تعقیب کردن خاتمه پیدا میکنه ؟
با خلق شدن هر کاراکتر از دشمن هایی که با دوبار ضربه از بین می روند ؟ باید یک INT برای بررسی تعداد ضربه ها ایجاد کرد ؟
اگر قرار باشه توی طراحی مراحل بعدی یک دشمن با تعداد ضربه های بیشتری از بین بره ؟ باید برای هر کاراکتری که ایجاد میکنیم ؟ یک متغیر هم تعریف کنیم ؟ چطور میشه از یک آرایه کمک گرفت ؟ و چطور میشه این پروسه رو داینامیک کرد ؟
کلا

برای خلق کاراکتر در بازی بهترین کار این هست که زیر کلاس هایی از کلاس Sprite ایجاد کنید و در اون مثلاً متدی برای تعیین تعداد جان و کم کردن تعداد جان ، مرگ در اثر کمبود جان و ... تعریف کنید تا ساختار بازی شی گرا و راحت بمونه.

یک نمونه مثال خیلی کاربردی رو می تونید اینجا ببینید :

http://www.matim-dev.com/full-game-tutorial---part-1.html

یک آموزش پونزده قسمتی بسیار عالی هست.

این آموزش را مرحله به مرحله دارم دنبال می کنم رسیدم که بخش 6 مربوط منو، ولی یک مشکل داره آیتم های منو رو درست نشون نمیده! اعداد مربوط به پوسیژن را دستی و ثابت تغییر می دم درست میشه ولی میترسم در همه گوشیها جواب نده و جابجا بشن آیتمها. سورس آموزش را هم که در صفحه آخر آموزش هست تست کردم همین مشکل رو داره!

اول آموزش رو برای AndEngine قدیمی نوشته بود و بعد اون رو برای نسخه جدید به روز رسانی کرد برای همین بعضی جاها مشکل داره ، آموزش منو توی این سایت هست می تونید از اون استفاده کنید.

لینک بازی رو فراموش کردم :

https://play.google.com/store/apps/details?id=dk.sparx.attackwave

این ترتیب آموزش ها باعث سردرگمی کاربران میشه
http://up.ashiyane.org/images/prn3sptfeid55zerz9yn.jpg

من طبق TouchDragExample میتونم یک ITextureRegion رو روی صفحه جابجا کنم (ولی روش کار داینامیک نیست و برای هر کاراکتر باید همونجا به Scene اضاف بشه و البته مثال برای ITextureRegion هست و نه Sprite )

برای تست و داینامیک کردن کار یک پروژه رو با IOnAreaTouchListener ساختم که توی متد Override شده تنها میشه pTouchArea را به Sprite کست کرد با استفاده از sprite.getTextureRegion میشه ITextureRegion را روی صفحه جابجا کرد
اما دو مشکل :
1- من قصد داشتم خود Sprite ها رو Drag کنم ! که نشد !
2- برای ITextureRegion هربار که روی Sprite ها pSceneTouchEvent.isActionMove انجام میشه یکبار روی Scene اضافه میشه و باهربار TouchEvent.isActionMove روی Sprite ها انجام مبشه باز هم اضافه میشوند
دلیلش این هست ITextureRegion هنوز ایجاد نشده و نمیشد در ابتدا به Scene اضافه بشه بنابر این اون رو در onAreaTouched به Scene اضاف کردم !

در متد onPopulateScene کدهای زیر کارکرد نداشت !

if (face2 != null) {
scene.attachChild(face2);
scene.registerTouchArea(face2);
scene.setTouchAreaBindingOnActionDownEnabled(true);
}

در مورد درگ کردن میخواستم یه آموزش بنویسم ، سعی می کنم به زودی بذارمش توی سایت هم میشه توی فیزیک این کار رو کرد و هم بدون فیزیک فقط نتیجه خیلی نرم نمیشه.

ممنون از شما
از اونجایی که تهیه آموزشها وقت گیر هست
پیشنهاد میکنم که در ابتدا سورس رو به مطالب اضاف کنید جلوی عنوان هم (درحال ویرایش . . .) ، که وقت کمتری میگیره ، بعدش به مرور و با فرصت کافی میتونید توضیحات که وقت گیر هست رو اضافه کنید

اینطوری خیلی بهتره ، شاید شما ده ها آموزشی داشته باشید که نیاز به توضیح داشته باشند ، اما وقت برای توضیح دادن اونها نداشته باشید ، که با این روش خیلی به نفع بازدید کننده ها هست که میتونند با مطالعه سورس ها سریعتر پیشرفت کنند

سلام
من تازه با سایت شما آشنا شدم خیلی عالیهُ خواهش می کنم ادامه بدین
ممنون

سلام
می خواستم نظرتون را درباره موتور LibGDX بپرسم. قدرتش خوبه؟ مستندات و آموزش براش وجود داره یا نه؟ من سرچ کردم چیزی پیدا نکردم. اندانجین بهتره یا این؟

خب اینکه کدوم بهتره جواب نداره ، کلاً توی این جور موارد چیزی به اسم بهتر نداریم ، مثلاً Unity فوق العاده است خیلی هم از این دو تا قوی تره ولی unity بهتره یا andEngine ؟ نمیشه گفت ، بهترین کار اینه که مقایسه کنید و بر اساس نیاز خودتون یکی رو انتخاب کنید و باهاش بازی بنویسید ، یکی از اشتباهات بزرگی که توی دوستان هم زیاد دیدم اینه که با یه موتور بازی شروع می کنن ، چند ماه کار می کنند ولی وقتی نمی تونن باهاش بازی بنویسن اون رو ول می کنن و می رن سراغ موتور بازی بعدی و الی آخر.

خب نتیجه مهم اول : اول نیازمون رو بشناسیم ، یه موتور انتخاب کنیم ، بهش مسلط شیم ، بعد شروع کنیم باهاش بازی بنویسیم ، از دوز و بازی های ساده گرفته تا ایده های پیچیده تر . 

اما یه سری مقایسه :

andEngine خیلی پیچیده نیست ، یادگیریش به نسبت سریعه ، مختص نوشتن بازی دو بعدی برای اندرویده ، اینکه کداش با جاواست به اندروید کارا خیلی کمک می کنه که یادگیریش ساده تر باشه براشون ، سرعتش خوبه (عالی نیست) و میشه بازی های مثل Construction City و Flappy Bird و غیره نوشت باهاش.

LibGdx هم کداش جاوان ولی cross platform هست ، میشه باهاش هم برای دسکتاپ ، هم برای موبایل ، هم برای مرورگر های وب ، اندروید و آی او اس برنامه نوشت (یه کم آخر کار قبل توسعه بازی اضافه کاری لازم داره فقط). از لحاظ امکانات قوی تر از andEngine هست که این هم خوبه و هم بد ، بدیش اینه که یادگیریش طولانی تر میشه .

Unity : فوق العاده است ، بازی های سه بعدی میسازن باهاش ولی کار باهاش درک درستی از هندسه ، مختصات سه بعدی داره ، کد هاش طولانی میشه و برنامه نویس مسلطی لازم داره ، تیمی که واسه توسعه بازی های مبتنی بر unity باشن باید یه تیم بزرگ باشه ولی با andEngine یه نفره هم میشه بازی نوشت.

پس می بینیم توی یه کاربرد andEngine ساده تر و سریعتره ، یه جای دیگه unity قوی تره ، یه جای دیگه libGdx .

در مورد منابع هم کلاً منابع خیلی عالی که همه چی رو پوشش بدن پیدا نمی شن ، شما باید از یه جایی شروع کنی و بعد از یه مدت از روی مثال هایی که دیگران به صورت متن باز می نویس یاد بگیرید.

 

دلیل اینکه من AndEngine را انتخاب کردم اینه که کتابخانه جاوا هست و میشه توی ایکلیپس ازش استفاده کرد libGDX هم شنیده بودم بهتره، واسه همین کنجکاو شدم بپرسم تا قبل شروع همین الان تصمیمم رو بگیرم. ولی اینکه گفتید با libGDX میشه برای آی او اس بازی نوشت هم منو مردد کرد هم برام سوال پیش اومد که چجوری؟!
مگه libGDX مثل اندانجین کتاب خانه مخصوص اندروید نیست که میشه توی ایکلیپس ازش استفاه کرد پس چجوری میشه خروجی آی او اس گرفت؟

نه libgdx "مخصوص" اندروید نیست ، بلکه cross platform هست. میشه هر نوع خروجی ای گرفت .

https://libgdx.badlogicgames.com

 

اگه اندروید کار هستید توصیه من برای شروع همون andEngine هست.

Ok
ممنون از راهنمایی تون

با سلام
این آموزش رو دیدم :
http://www.matim-dev.com/moving-camera-smoothly-from-point-a-to-b.html
برام سوال شد که Camera توی Scene هست آیا برعکسش هم ممکنه ؟ منظورم از نظر اندازه طول و عرض هست

------
این خیلی خوبه که دوستانی دیگه هم هستند که به AndEngine علاقه دارند و دنبال میکنند < اگر ممکنه ، یک انجمن بزنید که دوستان بتونند سوالات و یافته های خودشون رو اونجا با سایرین اشتراک بزارند و این باعث پیشرفت همه ی دوستان میشه

سلام در مورد انجمن قبلاً هم گفتم ، مدیریتش سخت تره و وقت بیشتری می خواد که من الآن ندارم ، قبلاً تجربه انجمن داشتم نگهداریش اصلاً ساده نیست ، در مورد Camera و Scene هم خب Camera کادری هست که ما از اون بازی رو می بینیم ، Scene صفحه ای (که می تونه محدود یا نا محدود باشه) که عناصر بازی توش قرار می گیرن ، اینکه Camera از Scene بزرگتر باشه خب معنی خاصی نداره!

آموزش زیر رو مطالعه کنید :

http://www.safecomp.ir/fa/node/173

امکان آموزش خصوصی برای AndEngine وجود داره ؟ شرایط شما به چه صورت هست ؟
اینجوری که من دارم پیش میرم خیلی کند هستم !
فکر میکنم اگر آموزش های AndEngine رو برای فروش بزارید مورد استقبال قرار میگیره

سلام ، ایمیلتون رو دیدم ، همونجا جوابتون رو میدم

با سلام
میخواستم بدونم کار متد زیر چی هست ؟
this.mEngine.registerUpdateHandler(new FPSLogger());
چرا mEngine بصورت پیشفرض در AndEngine شناخته میشه ؟ و نیاز به تعریف قبلی نداره ؟ و اینکه دقیقا چی هست ؟

اوه ، این مدتی که وقت نکردم کامنتا رو ببینم نه تا کامنت گذاشتید :) دیگه نمی رسم به این سرعت جواب بدم :دی ، در مورد FPSLogger قبلاً توضیح دادم ، کار خاصی نمی کنه فقط واسه گرفتن لاگ هست ، منتهی لاگ توی هر فریم .mEngine همون موتور اصلی بازیه که اول ساخته میشه و ما تنظیمات خاصی رو روش اعمال می کنیم (مثلاً تنظیمات توی onCreateEngine) و خب چون بازی فقط یک موتور بازی می تونه داشته باشه (که کل دنیا و فیزیک و اشیا و زمان بندی و فریم بندی و غیره رو کنترل کنه) بهتره که بدین شکل همه جا قابل دسترسی باشه.

 

http://www.matim-dev.com/using-entities-as-a-layers.html
با سلام
اگر ممکنه این لینکی که گذاشتم رو توضیح بدید < از نظر کاربردی چطور میتونه به ما کمک کنه ؟

این یه موضوع ساده و در عین حال خیلی مهمه که ساختار بیشتر موتور بازی های دو بعدی به صورت لایه ای هست ، این به ما کمک ی کنه بتونیم اشیا رو راحت حذف و اضافه کنیم و به علاوه بتونیم افکت های جالبی اضافه کنیم مثلاً یک اسپرایت دونده که می تونه پشت سرش درخت باشه و همینجوری که داره می دوئه یه جایی از پشت آبشار رد شه و ما نبینیمش و .... (شبیه بازی های آتاری و میکرو و...) ، لایه این بودن به ما این اجازه رو میده تا بتونیم اشیا رو روی هم قرار بدیم.

 

مشکل TouchAndDrag کاملا حل شد <<

سلام
این پروژه نمونه که خود آقای نیکولاس گذاشته نسخه AnchorCenter رو وقتی توی ایکلیپس ایمپورت می کنم خطا میاد. همه کتابخانه های مورد نیاز را دانلود کردم(بجز آخری که پیداش نکردم) و مانند خود اندانجین به پروژه اضافه کردم ولی روی همه شون علامت خطا میاد! اگه امکان داره شما تست کنید ببینید میشه یا نه؟ شرمنده، میدونم سرتون شلوغه ولی این پروژه همه مثالها توش داره و با مطالع کردنش می تونم خیلی چیزا یاد بگیرم
این لینک سورس:
https://github.com/nicolasgramlich/AndEngineExamples/tree/GLES2-AnchorCe...

لینک apk:
http://s6.picofile.com/file/8239740900/AndEngine_Examples.apk.html

کد ها مشکلی ندارن ، منم این پروژه رو دارم ، داخل فایل project.properties که برید متوجه می شید که به چه کتابخونه هایی نیاز داره ، چون anchor center هستند باید از andengine نسخه anchor center استفاده کنید و دقت کنید که کتابخونه ها و خود پروژه همه توی یه درایو باشن (copy project into workspace رو موقع import  کردن انتخاب کنید).

کارهایی که گفتید انجام دادم باز هم خطا میاد. چندبار امتحان کردم ولی درست نمیشه ):
خستم کرد

دوست عزیز "ناشناس" من از این لینک دانلود کردم و مشکل اون علامت های قرمز هم حل شد ، از خود نیکولاس که گرفتم مشکل داشتم !
https://github.com/RealMayo/AndEngine
دقت کنید جاوا کمپایلر شما 1.6 باشه و همچنین بعد از کلیک راست و انتخاب اندروید لایبری هایی که به پروژه اگزمپل ست شده رو پاک کنید و دوباره ست کنید <
---------------------------------------------
با سلام من برای حذف گلوله های شلیک شده از کد زیر استفاده میکنم < اما وقتی تعداد چایلد های روی سن رو میگرم تعداد در حال افزایش هست !
Log.i("canFire", scene.getChildCount() + " TRUE");
البته اگر یکبار شلیک داشته باشم تعداد 3 میشه و بعد از خروج از دوربین دوباره 2 میشه < ولی پیاپی شلیک داشته باشم پشت سر هم افزایش پیدا میکنه ! ، این درست هست ؟ یا کار من مشکل داره < چون کد های زیر از زیر کلاس های اسپرات گرفته نشده و توی آپدیت هندلر از سن چک میشه !

if (sGunFire != null) {
if ( !camera.isRectangularShapeVisible(sGunFire)) {
//scene.unregisterTouchArea(sprite);
sGunFire.unregisterUpdateHandler(mPhysicsHandler);
scene.detachChild(sGunFire);
sGunFire.detachSelf();
try {
sGunFire.dispose();
}
catch (AlreadyDisposedException e) {

}
}
}

در مورد
sGunFire.dispose()
هم سوال داشتم ! اصلا نیاز هست بهش ؟>

پ . ن : ادیتور دیدگاه ها هم اذیت میکنه نمیشه وسطش کاراکتر های فارسی فینگلیش نوشت

سلام
همه این کارها را انجام دادم نمیشه که نمیشه. فقط کامپایلر 1.6 نیست. یعنی باید api4 را پیدا کنم؟ یعنی خطاها برای اینه؟!

شما برای اجرای کد ها نیازی به وجود نسخه های قدیمی تر اندروید ندارید ، بهترین راه برای یادگیری این هست که هر کدوم از کد ها رو با حوصله و دقت بررسی کنید ، من خودم هنوز کامل همه کد های مثال های andEngine رو نخوندم چون همشون یه جا با هم به کار نمیان ، شما از بین کد ها موضوعی که براتون جذاب تره رو انتخاب کن و یه پروژه مبتنی بر آموزش های اینجا با اون کد ها ایجاد کن و ... (خطا های این پروژه رو هم کلاً بی خیال شو).

اتفاقا دارم کدهاش رو یکی یکی مطالعه می کنم و هر مثال رو بصورت یک پروژه جدید می سازم و خط به خط برسی می کنم.
فقط یه چیزی هست منو می ترسونه. آدم با اندانجین احساس غربت و تنهایی می کنه هیچ سایت یا انجمن ایرانی و خارجی فعال در این زمینه وجود نداره. آخرین آپدیت سایت رسمی اندانجین مربوط به سال 2013 هست! چرا کسی از این موتور استفاده نمی کنه؟

خب به چند دلیل ، یک اینکه خود انجین توسط یه نفر طراحی شده و معماری خوبی هم داره و وقتی کاری یک نفره باشه این سختی ها رو داره که طرف شاید نخواد یه مدت آپدیت بده. دو اینکه فعلاً نیاز به آپدیت خاصی هم نداره با توجه به اینکه بستر توسعه موبایله و بازی های دو بعدی ، کسی کار پیچیده تر بخواد انجام بده باید بره سراغ unity ، سه اینکه این کتابخونه open source هست و اعتقاد توسعه دهنده اینه که افراد دیگه متناسب با نیاز هاشون خودشون باید بتونن انجین رو توسعه بدن.

نکته دیگه شما اگه هدفتون توسعه بازی هست زیاد سخت نگیرید یه انجین انتخاب کنید باهاش برید جلو مطمئن باشید می تونید کاری که میخواهید رو انجام بدین ، نگران بحث تنهایی هم نباشید الآن کلی انجین هست که توی هر کدوم برید مشکلات خودشو داره :

http://www.develop-online.net/tools-and-tech/the-top-16-game-engines-for...

http://gamedev.stackexchange.com/questions/89/2d-gaming-libraries-framew...

http://www.slant.co/topics/341/~2d-game-engines

شما می تونید libGDX یا cocos2d  رو هم انتخاب کنید که باز اون ها هم سختی های خودشون رو دارن

فروم اند انجین برید می بینید خیلی هم غیر فعال نیستند :

http://www.andengine.org/forums

و اینکه بازم می گم "سخت نگیرید"

از دلگرمیتون ممنونم اندانجین را ادامه میدم چون برای من مناسبه.
یه سوال: آیا شما با اندانجین یا انجین های دیگه بازی ساختین؟ (:

بله بازی ساختم ولی بیشتر شرکتی نه واسه دل خودم ، بیشتر بازار بازی سازی در ایران اینجوریه که یه شرکتی از شما یه پروژه خصوصی میخواد و میخواد که بعداً اون رو به صورت پابلییک جایی معرفی نکنید ، یه مدت که بازی نویسی رو شروع کنید و به اندازه کافی (نه حتی خیلی زیاد) بهش مسلط بشین متوجه نوع بازارش توی ایران میشید ، بازار خوبی هم داره.

مشکل حل شد < کد های قبلی درست هستند و فکر کنم روش صحیح حذف Sprite همون باشه
از زیر کلاس های Sprite ها استفاده کردم
وسط کار هم به مشکل بر خوردم که از این استفاده کردم <
http://stackoverflow.com/questions/16882982/andengine-index-out-of-bound...

قبل از حذف کردن Sprite باید آپدیت کردن انجین رو متوقف کرد < با توجه با این موضوع اینکه من تعداد فریم هارو توی engineOption مشخص کنم محدود به 60 کنم نتیجه بهتری حاصل میشه ؟

الان تعیین تعداد فریم های در EngionOption چه رابطه ایی میتونه با این مشکل حذف کردن Sprite داشته باشه ؟

SmoothCamera چه قابلیت هایی داره ؟
با BoundCamera و قابلیت های اون آشنا شدم ، اما تابحال نمونه ایی از SmoothCamera ندیدم !

SmoothCamera برای حالتیه که یک کاراکتر اصلی داریم و بخواهیم خودمون تعقیبش کنیم ، لزومی نداره حتماً ازش استفاده کنیم خودمون می تونیم هر شی ای رو بخواهیم تعقیب کنیم بدون اینکه از SmoothCamera استفاده کنیم. توی آموزش تعقیب اشیا از روش جایگزین استفاده کردم .

مثال هایی برای SmoothCamera 

 

ساده ترین روش برای مدیریت Sceneها چیه؟ می خوام همه مراحل ساخت هر Scene مثل لود کردن ریسورس و ... بطور کامل در یک فایل قرار داشته باشه و هر نوع Scene را بتوان مدیریت کرد چون انواع Scene داریم.
اگه آموزش بعدی را این موضوع قرار بدین خیلی خوب میشه.
راستی به نظر شما اگه برای هر Scene از یک Activity مجزا استفاده کنیم روش خوبیه یا نه؟ خودم زیاد دوست ندارم.

مدیریت scene ها بیشتر یه موضوع سلیقه ای و اینکه شما با چه design pattern هایی آشنا هستید و با کدومشون راحتید ، یه روش خیلی خوب اینه که یه کلاس به اسم SceneManager ایجاد کنید و داخل اون متد هایی برای تغییر scene و .. جای بدید و یک شی عمومی از SceneManager ایجاد کنید و در همه جای بازی از اون استفاده کنید (مثل mEngine که همه جا میشه استفاده کرد).

هر Scene یک اکتیویتی اصلاً خوب نیست.فقط در حالتی چند تا اکتیویتی داشته باشید که سوئیچ کم باشه ، مثلاً اگه یه بازی تخته دارید که یک قسمتش شطرنجه و یک قسمتش منچ ، اون وقت چند تا اکتیویتی خوبه ولی جایی که مثلاً چند تا مرحله است و ممکنه کاربر مراحل رو در چند ثانیه تموم کنه بهتره یک اکتیویتی باشه.

من برای اینکه بتونم بعضی اتفاقات بازی رو مدیریت کنم
باید از onManagedUpdat که از متد های کلاس Sprite هست استفاده کنم و یا از registerUpdateHandler روی Scene و یا روی Sprite استفاده کنم < میخواستم دونم روشی هست که بشه از Listener استفاده کرد ؟ الان Listener ایی که برای Body ها وجود داره فوقالعادی خوب کار میکنه و عالی هستش

من هم همین ها رو میدونم ، شاید روش های دیگه هم باشه ، توی فرومش سرچ کنید شاید زیر کلاسی از Sprite نوشتن باشن که اینجوری باشه.

System.gc چی هست ؟ چیکار میکنه ؟ استفاده ازش لزومی داره ؟
همچنین در مورد dispose کردن Sprite بعد از اینکه scene.detachChild رو اجرا کردیم لزومی داره ؟ dispose چه کاری رو انجام میده ؟ و استفاده ازش لزومی داره ؟

من مجبورم براش try هم بزارم < معمولا کرش میکنه روش !

try {
myGunFire.this.dispose();
}
catch (AlreadyDisposedException e) {}
System.gc();

system.gc سیستم رو مجبور می کنه فضاهای بلا استفاده رو پاک کنه (garbage collection رو مجبور به کار می کنه) توی اندروید حدالامکان نباید ازش استفاده کرد چون نتایج خوبی نداره ، برای مدیریت حافظه بهتره از روش های  دیگه استفاده کنیم (مثل بهینه کردن عکس ها ، کم کردن تعداد اسپرایت ها و... ) یه بحث در مورد optimization بعداً می نویسم.

با سلام
من قصد دارم بازی ایی که تا اینجا ساختم رو با کمک MultiplayerExample بتونم دونفره روی شبکه لوکال پیش ببرم <
هیچ تجربه ایی از سوکت نویسی ندارم ، اگر ممکنه پروژه MultiplayerExample رو شرح بدید و یا یک آموزش از MultiplayerExample برای اندانجین بزارید

در مورد socket programming توی ایام عید (یا چند روز قبل تر) می نویسم.ولی توی فرومش هم سرچ کنید یا مطرح کنید احتمالاً نمونه کار آماده داشته باشن.

متاسفانه فروم AndEngine مشکل داره و امکان ثبت نام وجود نداره ، هر کاری کردم ، کپچا رو نمایش نمیداد !

با openID نمیشه لاگین شد؟ امتحان کردین؟

http://www.matim-dev.com/texture-packer---loading-itiledtextureregion.html

با سلام ، این چیزی که اینجا توضیح داده شده چی هست ؟ و از نظر کاربردی کاجاها میشه ازش استفاده کرد ؟

یه ابزاره که میشه باهاش منابع مورد نیاز برای یک Sprite چند قسمتی رو در قالب های مختلف مثل png و ... ایجاد کرد.بهتر بود اول آموزش زیر رو دنبال می کردید:

http://www.matim-dev.com/texture-packer.html

اول باید خود texture packer رو یاد بگیرید :

https://www.codeandweb.com/texturepacker

بعد از اون می تونید با extension مخصوص اند انجین باهاش کار کنید. 

if mSocketServer != null

کلاینت به سرور وصل میشه اما مقدار mSocketServer همیشه Null هست < و مقدار دهی نمیشه !
با توجه به کدها که یک دستور if داره نمیشه پیام رو سند و رسیو کرد تا زمانی که mSocketServer مقدار دهی نشده باشه !
جالب اینجاست که mSocketServer فقط در متد initServer مقدار دهی میشه <
خب وقتی من به دیوایس میگم شما کلاینت هستی < معلومه که initServer اجرا نمیشه و متد initClient اجرا میشه < حالا بعد از اجرا شدن initClient میتونم ایپی سرور رو بدم و وصل بشم < اتصال هم انجام میشه < اما برای کلاینت < همچنان مقدار mSocketServer برابر null هست و نمیشه مقداری رو سند و رسیو کرد !

اومدم متد initServer رو در انتهای متد initClient تعریف کردم < گاهی ارتباط یکطرفه برقرار میشه !

خب کم کم دارم متوجه میشم چه خبره ، مشکل یکطرفه بودن حل شد
و تنها مشکلی که الان دارم این هست که اتفاقات طرف کلاینت ها به سمت سرور ارسال نمیشه ، و وقتی هیچی سمت سرور ارسال نشه هیچ sprite روی Scene اضاف نمیشه و فقط میتونیم از SceneClick و AreaClick لاگ بگیریم :-?

هنوز متوجه نشدم چرا mSocketServer از طرف کلاینت ها نمیتونه پیامی ارسال کنه !

mSocketServer.sendBroadcastServerMessage(moveFaceServerMessage);

mMessagePool.recycleMessage(moveFaceServerMessage);

علاوه بر MultiplayerExample که در AndEngineExample قرار داره با توجه به کتاب CookBook هم میشه پیش رفت و کمک گرفت < که کدهایی که اونجا توضیح داده شده در این لینک قرار داره <<

https://github.com/thaind/Android/tree/master/Demos/Andengine/8987OS_Cod...

تنها کلاس های AddPointServerMessage و AddPointClientMessage رو نداره ! ، فعلا دارم توضیحات کتاب رو مرور میکنم < و بعدا اون کلاس هارو هم پیدا میکنم <

:|:|:|:|:|

AddPointServerMessage , AddPointClientMessage فقط کافیه Import بشه :|
قاطی کردم از صبح تا حالا :|

http://stackoverflow.com/questions/36102986/andengine-multiplayer-client...

با سلام چطور میتونم قبل از اینکه یه کلاینت رو به سرور وصل میکنم ، از سرور اطلاعاتی رو بگیرم ؟ مثلا تعداد بازیکنان موجود (قراره هر بازیکن موقع وارد شدن به سرور کاراکتر مختلفی رو بگیره به خودش ) ؟ موقعیت بازیکنان قبلی در بازی
فک کنم فعلا مجبورا ابتدا همه رو به سرور وصل کنم و بعدا تصمیم بگیریم که فعالیتها شروع بشه !
چطور میتونم مشخص کنم که بیشتر از یک تعداد مشخص دیگه کسی وارد سرور نشه !

سلام ، سال نو مبارک

وقتی کلاینت به سرور وصل میشه سرور می تونه برای اون پیغام بفرسته ، می تونیم بدون استفاده از کتابخونه های اندانجین و سوکت پروگرمینگ خود جاوا این کار رو سریع انجام بدیم، می تونیم هم از کتابخونه های اندانجین استفاده کنیم ، بهتر است اول Socket Programming جاوایی رو یاد بگیریم و بعد به سراغ کتابخونه های اندانجین برم ، خیلی از کامنت ها و ایمیل های سال قبل رو هنوز جواب ندادم ولی توی ایام عید سعی می کنم در مورد Socket Programming بنویسم.

 

سوکت نویسی جاوا رو میتونم انجام بدم و میشه میتونم موقع اتصال کلاینت به سرور از سمت سرور اطلاعات رو بفرستم < اما نمیتونم بیش از یک کلاینت رو صل کنم ! و همچنین اینکه با اون روش واقعا چطوری باید یک بازی رو نمایش داد !

بنظر خودم افزونه های AndEngine به کاملتر و راحتر هست

اگر ممکنه در بین برنامه هاتون استفاده از الگوریتم A (مسیریابی) رو در AndEngine رو آموزش بدید <

برای اینکه سرور بتونه چند تا کلاینت رو مدیریت کنه روش معمول به صورت زیر هست :

سرور منتظر کلاینت می مونه

بعد از اینکه متد accept کلاینت رو دید و بهش وصل شد یه استریم ورودی و یه استریم خروجی روی کلاینت باز می کنیم (باید شی جدید از نوع استریم بسازیم)

بعد یک ریسمان جدید ایجاد می کنیم تا بتونه به صورت مستقل روی این استریم ها کار کنه.

بعد از هر بار accept  و ساختن یک ریسمان جدید می تونیم یه شمارنده هم داشته باشیم و زیاد کنیم تا وقتی کلاینیت ها از یه مقدار که بیشتر شدن دیگه بهشون راه ندن .

سعی می کنم یه آموزش به صورت برنامه چند چن نفره بنویسم تو آموزش هام که همه موارد رو پوشش بده.

بله قبول دارم کتابخونه های اندانجین کار رو ساده تر می کنن.

منظورتون *A هست؟

https://en.wikipedia.org/wiki/A*_search_algorithm

از مباحث هوش مصنوعیه ، پیاده سازیش سخت نیست ولی بیشتر موقع ها لازم نمیشه

 

http://mp.tabin.ir/57/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85-%...

ممنون از شما ، مشتاقانه منتظر آموزش جدید هستیم
البته چیزی که خود نیکولاس نوشته هم واقعا نمونه ی خوبیه ، هنوز سرچ نکردم بابت سورسش !

https://play.google.com/store/apps/details?id=org.anddev.aplay&referrer=...

بله همونطور که حدس زده بودم منتظورتون همون *A (آ استار می گن بهش)

در موردش توضیح میدم ولی چون جز مباحث هوش مصنوعی هست قبلش باید موضوعات دیگه مثل جست و جوی DFS و BFS و ... رو توضیح بدم ، اگه علاقه مند هستید کتاب های مقدماتی هوش مصنوعی مثل راسل به صورت کامل توضیح دادن که خیلی هم کاربردی هستن  و با یادگیریشون به هیچ وجه ضرر نمی کنین

http://4paye.ir/book/artificial-intelligence-3rd-edition-modern-approach

معمولاً پیدا کردن خطاهایی که مربوط به فایل های so هستند خیلی سخته چون اندروید نمی تونه دقیق ریشه یابی کنه و فقط یه خطای زمان اجرا می تونه برگردونه که اون هم سیستم عامل بر می گردونه بدون هیچ آگاهی ای ، SIGSEGV خطای کلی ای هست و می تونه دلایل زیادی داشته باشه ، توی بیشتر موارد باید فایل اسمبلی رو داشت و با ndk مجدداً کامپایل کرد و خطا یابی که دشواره

شما تو چه موردی بهش بر خوردین؟

من دقت کردم خطا زمانی بیشتر ایجاد میشه که :
از قبل یک نقطه ایی رو شروع به شلیک کردن میکنم (هرچی سرعت شلیک ها بیشتر باشه ، احتمال خطا بیشتر میشه ، چون کاراکتر دشمن ایجاد شده ، بلافاصله ازبین میره) و توی اون نقطه قراره یک کاراکتر دشمن ایجاد بشه ، اگر بلافاصله با ایجاد کاراکتر جدید خیلی سریع اونو از بین ببریم این خطا شکل میگیره !

پس یعنی ممکنه تخصیص حافظه برای کاراکتر دشمن کامل صورت نگرفته باشه که یه متدی از اون فراخوانی میشه؟ (مثلاً متد مربوط به از بین بردنش) یعنی یه چیزی که هنوز به صورت کامل به وجود نیومده رو میخواهیم از بین ببریم؟ 

احتمالا همین هست ، ولی توی تست های بعدی سعی کردم حتی چیزی رو از بین نبرم ! بازم کرش گرفتم !
از اونجایی که برای تولید خطا مجبورم سرعت شلیک هارو بالا ببرم مدیریت کردن تعداد شلیک ها سخت میشد ! یعنی بعد از کشته شدن و از بین بردن دشمن چند شلیک اضافه ایجاد میشد

بعضی موقع میتونستم این رو مدیریت کنم ، یعنی بعد از کشته شدن دشمن شلیک اضافه صورت نگیره ، اینجا بود که بلافاصله با کشته شدن دشمن خطایی صورت نمیگرفت و بعد از مدتی خطا صورت میگرفت ، این خطا بعضی موقع زمانش متفاوت بود ، اما حدس میزنم دقیقا بعد از اینکه یک دشمن رو خیلی سریع از بین بردیم با تولید شدن یک فیزیک جدید خطا ایجاد میشه (این فیزیک جدید میتونه ناشی از شکلیک جدید باشه یا ایجاد یک دشمن جدید که هر چند ثانیه به Scene اضاف میشه ! )

چطور میتونم در مورد این خطا و دلیل اون سرچ کنم ، تو کل نت بصورت دقیق کسی چیزی نگفته ، چطور و از کجا باید این خطا رو ریشه یابی کنم ?
خطا دقیقا از چی داره صورت میگیره ? از Box2D هست یا حافظه و مدل cpu ? یا نسخه اندروید ?
فایل so چی هست ?

دقیقاً تا توی پروژه نبینم نمی تونم بگم مشکل از کجاست ؟ ، فایل های so فایل های اسمبلی هستن و روی همه نسخه های اندروید تقریباً اجرا میشن ، من چند مورد شبیه ساز کنسول های مختلف (مثل آتاری و ...) میخواستم رو اندروید اجرا کنم با همچین مشکلاتی مواجه شدم و میتونم بگم از بدترین نوع خطاها هستن چون عملاً چیز زیادی نمیشه ازشون فهمید ، معمولاً باید فایل های اسمبلی یا سی که توسط ndk کامپایل میشن رو خودتون بخونید تا سر در بیارید (یا اینکه توی کد جاوا راه در رو پیدا کنید).

خطای code 1 از خط زیر هست :

http://s7.picofile.com/file/8244818084/LIBC_CODE_1.JPG

اکثرا دارم از خط بالا کرش میگیرم ، فعلا براب کد 1 خط بالا بیشتر از همه هست پشت تمام Body هایی که ایجاد میشدند رو برابر Null قرار دادم ، شرایط فعلا بهتر شده < کل پروژه رو دارم لاگ گیری میکنم ! ببینم دقیقا کجاها داره خطا میده
با اینکه توی تصویر بالا مقدار Body رو قبل از مقدار دهی برابر Null قرار دادم و حتی tryCtach هم گذاشتم ، این خط همچنان بعضی موقع خطا میده ، شرایط بهتر شده ، ولی کاملا رفع نشده !

ظاهرا خود نیکولاس هم درگیر این خطا بوده ! :| و نمیدونم مشکل رو حل کرده یا دورش زده !

https://groups.google.com/forum/#!topic/android-ndk/Szkxb9DXRlw

"فایل های اسمبلی یا سی که توسط ndk کامپایل میشن رو خودتون بخونید "

این فایل هارو از کجا میتونم پیدا کنم ؟ و بخونم ؟ روی گوشی قابل دسترس هست ؟

فایل های با پسوند so معمولاً توی کتابخونه های برنامه پیدا میشن (اگه برنامه به همچین کتابخونه ای نیاز داشته باشه) و قابل جایگزین کردن هم هستن ، مثلاً اگه برنامه ای رو از شخصی دیدین که با یه کتابخونه کار می کنه ولی مثلا برنامه شما با همون کتابخونه کار نمی کنه ، می تونید فایل apk برنامه نفر اول رو پسوندش رو تغییر بدین (ای پی کا رو به زیپ تغییر بدین) و بعد اکسترکت کنید و دنبال فایل های با پسوند so بگردین )

ولی فایل های سی اینجوری نیستن اگه به کد سی نیاز دارین باید خود نویسنده کتابخونه اون رو در اختیار بقیه گذاشته باشه 

http://bytesthink.com/blog/?p=133
http://s7.picofile.com/file/8244857750/tombstones.jpg

خوندن فایل های SO فقط آدرس خطی که ازش کرش صورت گرفته رو بهم میده ؟ یا دلیلش رو ؟؟ !

آدرس خط رو که میتونم خودم پیدا کنم ! ولی دلیلش چیه !

اگر ممکنه سر فرصت توضیح بدید

https://www.ibm.com/developerworks/community/blogs/theTechTrek/entry/cre...
+
http://www.andengine.org/forums/tutorials/google-admob-in-andengine-tuto...
+
دارم دنبال چنتا مقاله برای استفاده از nodeJs , AndEngineMultiPlayerExtention میگردم !

BuildableBitmapTextureAtlas atlas = new BuildableBitmapTextureAtlas(getTextureManager(), 1024, 1024);

پیشنهاد میکنید برای زمانی که Atlas دیگه جا نداره ، اندازه اون رو بیشتر کنیم < یا یک Atlas جدید بسازیم ؟

وقتی Atlas بزرگ میشه به خاطر اینکه ماتریس هست و ماتریس های بزرگ به خاطر نوع نگه داری در حافظه و شیوه آدرس دهی باعث ایجاد مشکلات تخصیص حافظه میشن بهتره که اجازه ندیم Atlas ها خیلی بزرگ بشن ، برای بیشتر گوشی ها و تبلت ها همون 1024 در 1024 معقوله و اگه به فضای بیشتری نیاز داشتیم بهتره یه Atlas دیگه ایجاد کنیم.

چطور میتونم ببینم Atlas چقدر جا داره ؟
و اینکه چطور میتونم Atlas رو کلا روی Scene ترسیم کنم و ببینم به چه شکل ایجاد شده ؟

اگه خیلی اشیایی که داریم همه مربعی باشن و Atlas هم مربعی باشه چیدمان خودکار کافیه ولی اگه حساسیت داشته باشیم بهترین کار اینه که اشکال رو به صورت دستی (غیر خودکار) توی Atlas جا بدیم.

چیدمان دستی توی آموزش ها قبلاً توضیح داده شده.

 

به بازی چند Spell اضاف کردم < که با برخورد به کاراکترهای دشمن اونها رو در جا میکشه و از جونشون کم نمیکنه ! ، این باعث شده که باز هم خطای LIBC بگیرم

فکر میکنم مشکل از نحوه کد نویسی من باشه : طریقه تشخیص برخورد دو Body با هم رو اینطوری نوشتم :
هر Body یک userdata مخصوص به خودش رو داره

بعد از تشخیص برخورد توی Listener مربوط به Body ها فقط userdata مربوط به اون sprite تغییر میکنه :
مثلا enemy میشه fireEnemy

حالا توی onManagedUpdate مربوط به Sprite همیشه چک میشه اگر userData تغییر کرده باشه با توجه به اون تغییر متد های لازم اجرا میشه ! و بعد از اجرای متد ها userData بر میگرده به اون چیزی که بوده

این روش اشتباه هست درسته :-؟

میخواستم بدونم وقتش رو دارید سورس رو براتون ارسال کنم ؟

سورس رو بفرستید مشکلی نیست ، وقت کردم نگاه می کنم بهتون میگم.

در کمال ناامیدی و همچنان که اندانجین رو خیلی دوست داشتم و واقعا ساده بود ، و هر کار دو بعدی رو میشد باهاش زد در کمال اینکه حجم خروجی واقعا م بود
اما این باگ LIBC SIGSEGV واقعا نفس مارو برید
فکر میکنم باید برم به سمت LIBGDX نظرتون چی هست ؟ خروجی ها فک میکنم همچنان کم حجم باشه و البته کراس پلتفرم هم هست

قبلاً در مورد libgdx گفتم تو کامنت ها ، قوی تر هست ، کراس پلتفرم هم هست ولی خب یادگیریش بیشتر طول می کشه و هر محیطی مشکلات خودشو داره اینطور نیست که شما الآن برید سمت اون دیگه مشکلات حل بشن.

 

https://en.wikipedia.org/wiki/Segmentation_fault#See_also

واقعا چطور باید جلوشو گرفت :-؟

ُSIGSEGV یک خطای کلیه ، به دلایل زیادی ممکنه اتفاق بیفته نمیشه یه راه حل کلی داد بگیم این کار رو بکنید دیگه SIGSEGV اتفاق نمی افته.

معمولاً مشکل از منطق برنامه تو ساخت و تخصیص حافظه برای اشیا است.

فک کنم مشکل من ناشی از این چیزهایی باشه که اینجا داره میگه :

https://c0deattack.wordpress.com/2011/01/06/andengine-using-the-object-p...

اگر ممکنه یه توضیح مختصری از ObjectPool بدید

این لینک می تونه براتون مفید باشه :

http://www.neilson.co.za/extending-andengines-genericpool-to-safely-add-...

 

اینجا هم یک بازی کامل آموزش داده شده که قسمت 22 اون در مورد pool هست

http://www.appsrox.com/android/tutorials/flappychick/7

 

تفاوت های بین GLES2-AnchorCenter و GLES2 چی هست ؟ چقد تغییر کرده ؟ چه دلایلی برای بهتر بودن داره ؟

تفاوت چندانی ندارن و فقط سیستم مختصاتیشون فرق داره که حتی قرار بود این دو کتابخونه با هم ترکیب شن.

http://www.andengine.org/blog/2012/06/andengine-gles2-old-and-new-news

http://www.matim-dev.com/gles2-anchor-center.html

این المنت در Manifest اندروید به جه معنی هست ؟ و چه کاری رو انجام میده ؟

<uses-feature android:glEsVersion="0x00020000" android:required="true"/>
<uses-feature android:name="android.hardware.touchscreen" android:required="false"/>

glEsVersion نسخه اوپن جی ال رو مشخص می کنه.

android.hardware.touchscreen خیلی قدیمی هست ، برای حالتی بود که مشخص کنه لازمه دستگاه مورد نظر تاچ باشه یا نه؟ الآن همه دستگاه های اندرویدی تاچن و این خط کاری انجام نمیده.

ساخت یک سرور مولتی پلیر با استفاده از گوگل به چه صورت هست ؟
رایگان هست ؟
کلا قضیه این مولتی پلیر گوگل چی هست ؟

چطور میشه این رو پیاده سازی کرد ؟
http://appwarp.shephertz.com/realtime-multiplayer-andengine/

چطور میشه یک انفجار رو شبیه سازی که Body های اطراف خودش رو تحت تاثیر قرار بده ؟ و یک موج انفجار با تمام کاراکتر های اطراف خودش برخورد داشته باشه ؟ چیزی شبیه به بازی انگری برد که با انفجار بمب ها عناصر توی بازی رو تحت تاثیر قرار میداد

انفجار رو با استفاده از particle system پیاده سازی می کنند. آموزش particle system توی سایت هست.

اینو هم ببینید :

http://www.programcreek.com/java-api-examples/index.php?api=org.andengin...

http://www.matim-dev.com/tips-and-tricks---how-to-improve-performance.html

این گزینه دقیقا چکاری رو انجام میده ؟ setCullingEnabled

در رابطه با Sprite Batches ها ، من مثالش رو نیگاه کردم و حتی مثالی که برای موع داینامیکش زده شده بود واقعا داینامیک نبود چون باید تعداد رو همون ابتدا مشخص کنیم << در حالی که من در بازی هر چند ثانیه به تعداد اسپرایت ها اضافه میشه چطور میتونم از Sprite Batches ها استفاده کنم چون نیاز دارم تعداد اسپرایت ها همیشه در حال افزایش باشه ! و روی سن اضافه بشه

در مورد Reuse your objects هم نیاز به تحقیق ، سرچ و چند نمونه سورس دیگه دارم ، هنوز کمی گنگ هستش !

No theme background منظورش اینه که اوی منیفست هیچ تمی رو ست نکنیم روی اپلیکیشن ؟

این ObjectPool هم خودش باگ داره < بعضی مواقع IndexOutOfBoundMide !

برای گذاشتن کلیک لیستنر روی یک Sprite دو روش رو بلد هستم
یکی اضافه کردن متد مربوطه بعد از تعریف و مقدار دهی
Sprite sCoinFree = new Sprite(0, -rCoinFree.getHeight(), rCoinFree, getVertexBufferObjectManager()) {

@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float X, float Y) {

و یکی دیگه استفاده از اینترفیس IOnAreaTouchListener

راه دیگه ایی هم برای اضافه کردن لیستنر به Sprite هست ؟ چرا نمیشه یک اسپرایت رو ساخت و بعدا بهش لیستنر داد ؟
Sprite mysprite= new Sprite()
mysprite.setlistener <<<<<

تا جایی که میدونم همچین قابلیتی نداره ، باید خودتون زیر کلاس بسازید طوری که بتونید لیسنر اضافه کنید ، کار ساده ای نیست و بهتره که از همین روشی که الآن استفاده می کنید استفاده کنید.

سلام میشه از مزیتای اندانجین نسبت به یونیتی بگید؟
من موندم برم سراغ یونیتی یا اندانجینو یاد بگیرم؟
کامنتای قبلیم تا حدودی خوندم.

سلام ، قبلاً توی کامنت ها در این مورد توضیح دادم ولی بازم یه توضیح مختصر میدم ، ببینید اند انجین فقط مخصوص اندروید هست ولی یونیتی نه ، یعنی وقتی با اندانجین بازی بسازید فقط روی اندروید اجرا میشه ولی بازی ای که با یونیتی نوشته میشه رو خیلی جاها میشه اجرا کرد ، اندانجین فقط مخصوص بازی های دوبعدی هست ولی یونیتی دوبعدی و سه بعدی رو هر دو رو پشتیبانی می کنه.

اندانجین یک کتابخانه ساده جاوایی که توی اندروید استفاده می شه ، یعنی یه کتابخونه به پروژه اندرویدیتون اضافه می کنید و بعدش خیلی راحت یه بازی اندرویدی می نویسید ، اندانجین زبان خاصی نداره و همون جاوایی که برای اندروید استفاده میشه برای اندانجین هم استفاده میشه برای همین یادگیریش برای یک برنامه نویس اندرویدی ساده است.

اندانجین امکانات کمتری نسبت به یونیتی داره ولی همین همیشه هم عیب نیست باعث میشه یادگیریش راحت باشه.

حالا چیزایی که باید از خودت بپرسی :

  1. میخوام واسه چه سیستمی بازی بنویسیم؟ دسکتاپ ؟ یا موبایل ؟
  2. برای موبایل آیا برای من کافیه که روی اندروید تمرکز کنم ؟ یا باید حتماً آی او اس و ویندوز موبایل رو هم پوشش بدم؟
  3. چه قدر جدی قراره بازی نویسی رو دنبال کنم؟
  4. قراره چندین محصول مثل فلپی برد ، انگری برد ، فرویت نینجا و ... بدم بیرون یا یکی دو تا مثل سابوی سارفر بنویسم؟ یا اصلاً یه دونه کال آف دیوتی بنویسم؟
  5. فعالیت اصلیم قراره تا چند سال بازی نویسی باشه؟ یا نه قراره برنامه نویس اندرویدی باشم که در کنارش بازی هم می تونم توسعه بدم؟
  6. تمرکزم روی بازی های دوبعدی قراره باشه یا سه بعدی؟
  7. دنبال گرافیک فوق العاده ام یا بازی هایی که طرح هایی ساده ای دارند رو بیشتر دوست دارم؟
  8. و ....

من برای بازیم به یه سری صدا به زبان فارسی نیاز دارم که می خوام خودم این صداها رو ضبط کنم. برای اینکه صدا با کیفیت بشه آیا تجهیزات خاصی نیاز داره مثلا میکروفون خاصی برای این کار وجود داره؟ این بازی های فارسی که الان وجود داره، صداهاش رو چجوری ضبط می کنن توی خونه یا استدیو؟

من برای اسپلش از Activity استفاده میکنم و اون رو با Intent به BaseGameActivity میبرم !
میخواستم بدونم این کار درستی هست که برای بازی هم همچین کاری کنم ؟ بجای استفاده از Scene های مختلف برای قسمت های مختلف بازی از BaseGameActivity استفاده کنم و با Intent جابجا بشم ؟ مثلا برای محیطی که بازی اصلی انجام میشه یک BaseGameActivity باشه و برای انتخاب مراحل یک BaseGameActivity دیگر که با انتخاب مرحله و انتخاب مختلف میشه بین این دو جابجا شد

مشکلی نداره ، سوئیچ بین صفحات رو به شکل های مختلفی میشه پیاده سازی کرد ، باید ببینی کدوم راحت تری

تنها یک مسئله باقی می مونه و اون هم زمان سوئیچ هست

اگه فاصله بین سوئیچ ها طولانی باشه این راه حل مشکلی نداره مثلاً وقتی کاربر یه مرحله رو انتخاب می کنه خب بعدش یه مدتی بازی می کنه و دیگه لازم نداره سریع به صفحه انتخاب مرحله برگرده پس این راه حل مشکلی نداره

ولی یه بازی رو تصور کن که چند تا قابلیت داره بازیکن و هربار یه تعداد محدودیش رو می تونه به خودش ببنده ، توی یه بازی ممکنه چندین و چند بار به این صفحه مراجعه کنه و قابلیت بازیکنش رو عوض کنه (مثلاً سپر رو بندازه دور به جاش شمشیر ببنده) تو این مورد انتقال با intent جالب نیست و کنده

 

چطور میشه TMXMAP و LevelLoader از روی SdCard خونده بشه ؟
نیاز به InputStream داره که باید از FileInputStream خونده بشه ولی هرکاری میکنم موفق نمیشه!

levelLoader.loadLevelFromStream(new InputStream() {

@Override
public int read() throws IOException {
return 0;
}
});

مشکل حل شد :|
یه خط رو بالاتر کامنت کرده بودم بخاطر همین هرچی تست میکردم جواب نمیگرفتم !!

File file = new File(G.DIR_APP + "/1.lvl");
InputStream targetStream = new FileInputStream(file);
levelLoader.loadLevelFromStream(targetStream);

در اندانجین چجوری میشه کیبورد را نمایش داد و متنی را از کاربر دریافت کرد؟

روش TextBreak را انجام دادم خوبه ولی دکمه Done نداره و بصورت landscape باز نمیشه. توی اکثر بازی ها من دیدم بصورت زیر نشون داده میشه:
http://uupload.ir/files/dzgc_screenshot_2017-02-11-02-48-21.jpg

من اصلا هواسم به تنظیم ScreenOrientation.LANDSCAPE_SENSOR نبود. الان درست شد دکمه Done هم اومد.

افزودن دیدگاه جدید

Plain text

  • تگ‌های HTML مجاز نیستند.
  • نشانی صفحه‌ها وب و پست الکترونیک بصورت خودکار به پیوند تبدیل می‌شوند.
  • خطوط و پاراگراف‌ها بطور خودکار اعمال می‌شوند.