| Game Programming | |
|
|
نويسنده | پيام |
---|
00110
تعداد پستها : 123 Location : Tab Registration date : 2008-05-03
| عنوان: Game Programming الثلاثاء سبتمبر 02, 2008 8:30 am | |
| | |
|
| |
00110
تعداد پستها : 123 Location : Tab Registration date : 2008-05-03
| عنوان: !!! الثلاثاء سبتمبر 02, 2008 8:36 am | |
| من سوالامو شروع میکنم بپرسم تا شما هم خجالت نکشید : ایا میشه برنامه رو طوری نوشت که تو گوشی هایی با اندازه صفحه متفاوت کار کنه ؟؟؟ دوم اینکه چطور میشه فهمید که کدام گوشی ها اندازشون مثلا 240 در 320 هست ؟؟؟ به طور کلی شما واسه کدوم اندازه بازی تون رو طراحی میکنید که بیشترین تعداد گوشی رو داشته باشه ؟؟؟ | |
|
| |
haamoon
تعداد پستها : 308 Registration date : 2008-02-07
| عنوان: رد: Game Programming الأربعاء سبتمبر 03, 2008 2:04 am | |
| خوب یک بازی یک سری resource داره که وابسته به اندازه ی صفحه هستند. مثلا تصویر بازیکن شما که برای screen های بزرگ باید بزرگ تر باشه. دقت کنید که همیشه کد رو میتونید یه جوری بزنید که کاملا مستقل به اندازه screen باشه. یا طول و عرض رو بگیره و طبق اون رفتار کنه.
پس فقط می مونه resource ها. شرکت های بازی سازی چون می خوان یک بازی رو به یک نفر بفروشن و اونم می تونه فقط روی یک گوشی نصبش کنه براساس نوع گوشی طرف فایل مربوط به اون گوشی رو با resource های مربوط به اون اندازه ی صفحه بهش می ده.
ولی تو برنامه های free که دوست دارید یک فایل رو پخش کنید و رو همه ی گوشی ها اجرا بشه تا به سرعت به دست همه برسه چندتا کار بکنید: 1- resource ها رو تبدیل کنید، مثلا اندازه ی عکس ها رو بصورت run time تغییر بدین و بعد ازش استفاده کنید. مشکل این کار اینه که resize عکس های بزرگ زمان زیادی می بره و عکس ها بعد از resize شدن فضای زیادی از heap اشغال می کنن. مثلا یک عکس 100X100 حدودا 40KB فضا می گیره.
2- خوب برای چندتا screen size مهم resource ها رو بسازید و همه رو تو jar قرار بدین و وقتی برنامه اجرا می شه بر حسب اندازه ی صفحه از یکی شونه استفاده می کنه. 95% ها 3 تا screen size دارن. تو این کار مشکل سرعت و ram رو ندارین ولی حجم jar بالاتره.
3-راه حل سوم که خیلی ازش استفاده می شه. اینجوری هست که شما اصلا resource ها رو تو برنامه نمی ذارید وقتی برای اولین بار برنامه اجرا می شه به سرور وصل می شه و بر حسب اندازه ی صفحه resource ها رو دانلود می کنه و تو RecordStore ذخیره می کنه و از اون به بعد ازش استفاده می کنه. این روش مشکل حجم رو خیلی خوب حل می کنه چون اصلا resource ها رو تو برنامه نذاشتید و مشکل سرعت هم نداره ولی خوب مشکل نبود GPRS تو ایران استفاده ازش رو محدود می کنه. | |
|
| |
00110
تعداد پستها : 123 Location : Tab Registration date : 2008-05-03
| عنوان: !!! الخميس سبتمبر 04, 2008 1:35 am | |
| ممنون امیر جان خیلی کمک کرد ...
یه سوال دیگه من دارم یه بازی تانک البته خیلی ابتدایی و واسه یادگیری خودم درست میکنم من تانک رو با توسعه دادن کلاس Sprite درست کردم و توپ ( بمب ) اون رو هم یه Sprite ساده تعریف کردم در این حالت فقط یک توپ میشه شلیک کرد و تا زمانی که اون توپ به جایی برخورد نکرده نمیشه توپ دیگه ای رو شلیک کرد واسه حل این مشکل چه راه حلی رو پیش نهاد میکنید ؟؟؟ | |
|
| |
haamoon
تعداد پستها : 308 Registration date : 2008-02-07
| عنوان: رد: Game Programming الخميس سبتمبر 04, 2008 3:07 am | |
| خوب این کار ربطی به j2me نداره! ولی شما مختصات توپ رو انقدر تغییر می دی تا بالاخره به زمین برخورد کنه. خوب یک متغییر boolean canKickABall تعریف کن که وقتی توپ رو شلیک می کنی false کنش و وقتی توپ به زمین رسید و ترکید true بکنش. و وقتی هم طرف می خواد بمب بزنه چک کن ببین اگر این متغییر true هست بمب رو پرتاب کن. | |
|
| |
00110
تعداد پستها : 123 Location : Tab Registration date : 2008-05-03
| عنوان: !!! الخميس سبتمبر 04, 2008 8:14 am | |
| - haamoon نوشته است:
- خوب این کار ربطی به j2me نداره! ولی شما مختصات توپ رو انقدر تغییر می دی تا بالاخره به زمین برخورد کنه. خوب یک متغییر boolean canKickABall تعریف کن که وقتی توپ رو شلیک می کنی false کنش و وقتی توپ به زمین رسید و ترکید true بکنش. و وقتی هم طرف می خواد بمب بزنه چک کن ببین اگر این متغییر true هست بمب رو پرتاب کن.
من سوالم رو بد مطرح کردم ممنون من الان همین کار رو کردم ولی میخوام که کاربر بتونه بیش از یک توپ رو شلیک کنه یعنی وقتی یدونه شلیک کرد اگه دوباره شلیک کرد و توپ قبلی هنوز به جایی برخورد نکرده توپ دوم هم شلیک بشه ... | |
|
| |
haamoon
تعداد پستها : 308 Registration date : 2008-02-07
| عنوان: رد: Game Programming الخميس سبتمبر 04, 2008 1:00 pm | |
| خوب، برای هر شلیک یک new sprite بکن و وقتی به زمین رسید بندازش دور. برای اینکه بتونی موقیت هموشون رو هم update بکنی همه رو تو یک Vector نگه دار و به جای اینکه هر چند وقت که موقعیت یک توپ رو update می کنی این بار موقعیت تمام توپ ها رو آپدیت کن. | |
|
| |
00110
تعداد پستها : 123 Location : Tab Registration date : 2008-05-03
| عنوان: !!! الإثنين سبتمبر 08, 2008 1:30 pm | |
| - haamoon نوشته است:
- خوب، برای هر شلیک یک new sprite بکن و وقتی به زمین رسید بندازش دور. برای اینکه بتونی موقیت هموشون رو هم update بکنی همه رو تو یک Vector نگه دار و به جای اینکه هر چند وقت که موقعیت یک توپ رو update می کنی این بار موقعیت تمام توپ ها رو آپدیت کن.
ممنون از کمکتون من هر کاری کردم با این Vector کنار نیومدم من چند مدل امتحان کردم ولی نشد لطفا کمک کنید یه بار خود Sprite رو به صورت ارایه در نظر گرفتم : - كد:
-
TankSprite[] Bomb; این TankSprite همون Sprite توسعه داده شده هست بعد - كد:
-
G = VBomb.size(); Bomb[G] = new TankSprite(BImg); Bomb[G].TDirection = Tank.TDirection; Bomb[G].setPosition(Tank.getRefPixelX(), Tank.getRefPixelY()); VBomb.addElement(Bomb[G]); این نشد که خطای NullPointer پرتاب میکنه ... بعد اینطوری کردم : - كد:
-
TankSprite Bomb; // Bomb Bomb = new TankSprite(BImg); Bomb.TDirection = Tank.TDirection; Bomb.setPosition(Tank.getRefPixelX(),Tank.getRefPixelY()); VBomb.addElement(Bomb); که از اینم سر در نیاوردم ... 110 تا کاره دیگه هم کردم خلاصه نشد ما دوتا با هم کنار نیومدیم یکی بیاد مارو آشتی بده ... لطفا راهنمایی کنید و در ضمن بعد این مرحله من می خوام که مثلا یکی از خصوصیات یکی از این Sprite هارو تغییر بدم چه طور باید به این عناصر دسترسی پیدا کنم ؟؟؟ | |
|
| |
haamoon
تعداد پستها : 308 Registration date : 2008-02-07
| عنوان: رد: Game Programming الإثنين سبتمبر 08, 2008 11:07 pm | |
| Vector VBomb = new Vector(); a که یادت نرفته؟
اینجوری می تونی یک شی در مکان i ام رو بگیری: Bomb bomb = (Bomb) VBomb..elementAt(i); a بعد هم یک قرار دادی هست که می گن: اسم کلاس ها با حرف بزرگ شروع بشه و اسم متغییرها با حرف کوچیک مثلا vBomb بهتره.
اون کاری هم که اول کردی و یه آرایه هم گرفتی که فاجعه است! Vector یک آرایه است که اندازه اش dynamic هست و هر چی توش بریزی بزرگ تر می شه. | |
|
| |
00110
تعداد پستها : 123 Location : Tab Registration date : 2008-05-03
| عنوان: !!! الثلاثاء سبتمبر 09, 2008 7:23 am | |
| - haamoon نوشته است:
- Vector VBomb = new Vector();
a که يادت نرفته؟
امير آقا اماتور هستم ولي ديگه نه تا اين اندازه ... - haamoon نوشته است:
اينجوري مي توني يک شي در مکان i ام رو بگيري: Bomb bomb = (Bomb) VBomb..elementAt(i);
اين فکر ميکنم اينطوري بايد باشه : - كد:
-
Bomb = (TankSprite)vBomb.elementAt(Index); - haamoon نوشته است:
بعد هم يک قرار دادي هست که مي گن: اسم کلاس ها با حرف بزرگ شروع بشه و اسم متغييرها با حرف کوچيک مثلا vBomb بهتره.
آره ممنون ميشه بيشتر توضيح بدي اينجا اخه Bomb که اسم کلاس نيست ... - haamoon نوشته است:
اون کاري هم که اول کردي و يه آرايه هم گرفتي که فاجعه است! Vector يک آرايه است که اندازه اش dynamic هست و هر چي توش بريزي بزرگ تر مي شه. حالا کارهايي که قبل از اين انجام دادم رو نديدي با ارايه چه کارايي که نکردم اگه يه کمي هم ادامه ميدادم خود اين Vector رو داشتم شبيه سازي ميکردم ... ممنون عاقبت بخير شي با 3-4 خط حل شد ... | |
|
| |
| Game Programming | |
|