Contacts
صفحه اصلی پورتال | صفحه اصلی تالار | ثبت نام | اعضاء | گروه ها | جستجو | پرسش و پاسخ | فروشگاه الکترونیکی | خرید پستی بازی های کامپیوتری





صفحه اول انجمنها -> برنامه نویسی با زبان های C++ و Delphi و VB -> سوالهايي در مورد ++C
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي
برو به صفحه قبلي  1, 2, 3, 4 ... 11, 12, 13  بعدي

نويسنده
پيغام
iran_adventure
مدیر انجمن
مدیر انجمن


تاريخ عضويت: شنبه 4 آذر 1385
تعداد ارسالها: 2069
محل سكونت: تهران


3 شنبه 15 آبان 1386 - 23:43
پاسخ بصورت نقل قول
فكر كنم منظورم رو نگرفتي .

نقل قول:

وقتی شما یک آبجکت می سازی ، برنامه (TGB) ، یک ارجا به onMouseEvent اون شی برای خودش نگه می داره و هر وقت event موس براش رسید ، به ترتیب تمام onMouseDown تمام اشیا رو صدا می زنه ...


خوب سوال منم همينه چه طور onMouseDown اشيا رو با كدهاي مورد نظر خودم پر كنم ؟؟
دقيقا مي خوام مثل يه تابع virtuel عمل كنه . شما در اونجا يه كلاس با يه تابع virtuel مي سازيد و كلاس هاي بعدي رو از اون مشتق مي گيريد تا اينجا مشكلي نيست . مشكل من آبجكتهايي هست كه از يه كلاس ساخته شده اند مثلا تو يه آبجكت 2dSprite مي خوام با كليك موس بازي شروع بشه و يه آبجكت 2dSprite ديگه با كليك موس صفحه بسته بشه ...
من الان مي تونم يه فلگ بزارم و تو حلقه اصلي بازي براي هر آبجكت كدهاي متفاوتي بنويسم ولي من مي خوام كدهام رو بيرون حلقه اصلي بنويسم كه در آينده به راحتي بتونم حلقه اصلي رو بردارم . مي دوني كه چي مي گم ؟؟!
نمي دونم منظورم رو رسوندم يا نه ؟؟!

_________________
Make something happen
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
iran_adventure
مدیر انجمن
مدیر انجمن


تاريخ عضويت: شنبه 4 آذر 1385
تعداد ارسالها: 2069
محل سكونت: تهران


4 شنبه 16 آبان 1386 - 00:00
پاسخ بصورت نقل قول
خوب فكر كنم جوابم رو گرفتم ! البته مطمين نيستم ...
براي هر آبجكتي كه كار خاصي مي كنه بايد يه كلاس درست كنم .
به طور مثال اگه يه كلاس به نام 2dSprite دارم و مي خواهم دو تا آبجكت ازش بسازم كه يكي كار خروج رو انجام بده و يكي كار شروع بازي براي هر كدوم يه كلاس جديد كه از 2dSprite مشتق شده اند مي سازم و در تابع مجازي onMouseDown كلاس جديدم كدهاي مورد نظرم رو مي زنم ...
الان كه فكر مي كنم يادم مياد كه TGB هم همين طور بود براي هر موجوديتي يه كلاس درست مي كرديم كه الان مي فهمم چه طور كار مي كرد ...
ولي آيا اين تنها راهه ؟؟

ممنون

_________________
Make something happen
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


4 شنبه 16 آبان 1386 - 18:43
پاسخ بصورت نقل قول
آره راهش همینه.
در حقیقت تا زمانی که تو نخوای کدی رو توی زمان اجرا مشخص کنی راه خوبی هم هست و در حقیقت نیازی به چیزی بیش از اون نداری.
اما خوب برخی زبانها هستند. که بهت اجازه تعیین کد در زمان اجرا رو هم میدن. به این امکان reflection میگن. تا جایی که می دونم، جاوا، روبی و پایتون از جمله این زبونها هستن. البته هنوز ندیدم این کجای جاوا هست!!

برگردیم سر بحثت. به نظر من باید دقیق بررسی کنی ببینی چی میخوای و بعد ببینی چی داری.
درباره اینکه هر کسی یک اونت رو یک جور پردازش کنه توی ++C دو راه وجود داره. که خودت هر دوش رو گفتی. خیلی بعیده که به چیزی بیش از اینا احتیاج باشه.

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
iran_adventure
مدیر انجمن
مدیر انجمن


تاريخ عضويت: شنبه 4 آذر 1385
تعداد ارسالها: 2069
محل سكونت: تهران


5 شنبه 17 آبان 1386 - 04:10
پاسخ بصورت نقل قول
نقل قول:

اما خوب برخی زبانها هستند. که بهت اجازه تعیین کد در زمان اجرا رو هم میدن. به این امکان reflection میگن. تا جایی که می دونم، جاوا، روبی و پایتون از جمله این زبونها هستن. البته هنوز ندیدم این کجای جاوا هست!!


چه جالب ! تو ++C هم اين امكان هست ؟؟

نقل قول:

درباره اینکه هر کسی یک اونت رو یک جور پردازش کنه توی ++C دو راه وجود داره. که خودت هر دوش رو گفتی


منظورت از روش اول همون فلگ هستش ؟ اگه آره به نظر خودم دردسر زياد داره ...

نقل قول:

برگردیم سر بحثت. به نظر من باید دقیق بررسی کنی ببینی چی میخوای و بعد ببینی چی داری.


خوب من يه سري level مي خواهم كه هر كدوم شامل تصاوير ثابت و تصاوير متحرك و نوشته هستند كه event هاي موس رو هم handle كنه !
يه سوال : همون طور كه پيمان گفت يه كلاس abstract مي سازم به نام EventObject كه مشخصه اصليش تابع هايي به اين شكله :

كد:
   virtual void   onMouseDown( int keyDownID ) = 0;
   virtual void   onKeyboardUp( int keyUpID ) = 0;
   // .... all events need ..!


حالا من مي خوام كلاس 2dAnimSprite رو بسازم و مشتق EventObject هستش . حالا سوالم اينه كه تولبع ( onMouseDown و ... ) رو چه طوري در كلاس 2dAnimSprite معرفي كنم كه امكان ساخت كلاس هاي مشتق جديد باشه كه در كلاس هاي جديد onMouseDown و ... رو تعريف كنم ...
متوجه شديد ؟؟!
نمي دونم خوب گفتم يا نه منظورم اينه كه در دو (n) كلاس مشتق شده توابع مجازي رو به هم پاس بديم تا در كلاس آخري بشه كدهاي خودمون رو وارد كنيم ...
به نظرم تو اين كد نمي شه :
كد:
class Sprite : public EventObject {
public:
   virtual void   onMouseDown( int keyDownID ) {
      //   doo somthing !
   }
   virtual void   onKeyboardUp( int keyUpID ){
      //  doo somthing !
   }
};


يعني اگه كلاس جديدي از Sprite مشتق كنيم نمي شه onMouseDown و ... رو جايگزين كنيم ...

_________________
Make something happen
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
eta
مدیر سایت
مدیر سایت


تاريخ عضويت: 2 شنبه 27 تير 1384
تعداد ارسالها: 2153
محل سكونت: شاهين شهر


1 شنبه 20 آبان 1386 - 13:21
پاسخ بصورت نقل قول
نه تو ++‍C نيست.
خوب فايده virtual‌بودن تابع همينه ديگه چرا ميگي نميشه.

ببين اينو مي دوني!
كد:

class A
{
virtual void a(){printf("A");}
}

class B : public class A
{
virtual void a(){printf("B");}
}

-----------

B b_instance;
A a-instance;
vector<A*> my_vec;
my_vec.push_back(&b_instance);
my_vec.push_back(&a_instance);
my_vec[0]->a();
my_vec[1]->a();

output:
AB

_________________
تالار اصول ->صفحه ها، مقالات و تاپیکهای مفید

ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

نويسنده
پيغام
iran_adventure
مدیر انجمن
مدیر انجمن


تاريخ عضويت: شنبه 4 آذر 1385
تعداد ارسالها: 2069
محل سكونت: تهران


1 شنبه 20 آبان 1386 - 14:38
پاسخ بصورت نقل قول
eta,
ممنون
يه چند ساعت پيش به كتاب يه نگاه كردم نوشته بود تابع هايي كه به صورت مجازي معرفي مي شند در تمام كلاس هاي مشتق شده به صورت مجازي هستند حتي اگه صريحا عنوان نشه ...

سوال جديد :

من الان يه پروژ با sdl ساختم كه هيچ مشكلي نداره و اجرا مي شه و درضمن اصلا از وكتور استفاده نكردم ( اين رو گفتم كه مطمين باشيد ايراد از جاي ديگه نيست 1 )

خوب حالا من اين رو به هدر هام اضافه مي كنم :

كد:
#include <vector>


الان هم پروژه به خوبي اجرا مي شه .

و حالا اين خط رو در main اضافه مي كنم :

كد:
vector<animSprite*> test;


بعد از اجرا اين error ها رو مي ده :

كد:
1>c:\documents and settings\mojtaba\my documents\visual studio 2005\projects\sdl_05\sdl_05\run.cpp(53) : error C2065: 'vector' : undeclared identifier
1>c:\documents and settings\mojtaba\my documents\visual studio 2005\projects\sdl_05\sdl_05\run.cpp(53) : error C2059: syntax error : '>'


از وكتوري هم كه پيمان داد استفاده كردم همين error رو مي ده ...

اگه به جاي اون خط اين رو اضافه كنم :

كد:
something<animSprite*> test;


اين error رو ميده :

كد:
1>c:\documents and settings\mojtaba\my documents\visual studio 2005\projects\sdl_05\sdl_05\run.cpp(53) : error C2065: 'something' : undeclared identifier
1>c:\documents and settings\mojtaba\my documents\visual studio 2005\projects\sdl_05\sdl_05\run.cpp(53) : error C2059: syntax error : '>'


!! يعني اصلا ربطي به vector نداره .
مشكل از كجاست ؟؟؟

_________________
Make something happen
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
lord_akinak
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: شنبه 15 ارديبهشت 1386
تعداد ارسالها: 349
محل سكونت: Hell


1 شنبه 20 آبان 1386 - 19:07
پاسخ بصورت نقل قول
بايد بالاي فايلت بنويسي اين vector ماله کیه !
یعنی جزئی از کدوم nameSpace هست...

كد:

using std::vector;

برای فایل من:
using X2D::core::xVector;

اگه تعداد کلاس هایی که از اون namespace می خواهی استفاده کنی زیاد هست:
using namespace std;

_________________
And hell was so cold
All the vases are so broken
And the roses tear our hands all open
Mother mary miscarry
But we pray just like insects
The world is so ugly now
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
iran_adventure
مدیر انجمن
مدیر انجمن


تاريخ عضويت: شنبه 4 آذر 1385
تعداد ارسالها: 2069
محل سكونت: تهران


1 شنبه 20 آبان 1386 - 22:58
پاسخ بصورت نقل قول
ممنون

باز هم سوال دارم !

خوب همه چيز داره خوب پيش مي ره ! من مي خوام كار با انجين ( اسمش انجين مي شه ؟؟! ) راحت باشه . تو انجيني كه احسان گذاشته بايد وكتور رو بسازي و بعد آبجكت ها رو اضافه كني من مي خوام اين قسمت هم توسط كانستراكتور animSprite انجام بشه .
چند راه حل كه به نظر خودم رسيد :

1 ) معرفي وكتوري از animSprite در private كلاس animSprite كه حالت const داشته باشه به صورتي كه در اولين استفاده تعريف بشه و در دفعه هاي بعد تعريف نشه و فقط عمل زير كه در كانستراكتور هست انجام بده :

Obj.put(this);

من بدون const درست كردم ولي به ازاي هر آبجكت از animSprite وكتور جداگانه ايجاد مي شه ... اين فكر رو كردم كه وكتور رو قبل از كلاس animSprite تعريف كنم ولي خوب animSprite اي وجود نداره كه بخوام وكتور از اون درست كنم !

2 ) راه طولاني هستش ولي كار مي كنه :
براي animSprite دو تا كلاس مي سازم animSprite و بعد از اون animSpr . اين طوري مشكل وجود نداشتن animSprite وجود نداره . بعد از تعريف animSprite وكتوري ازش درست مي كنم و سپس animSpr رو مي سازم . كار animSpr يك نوع واسطه گري هستش و همه آرگومانتها رو به animSprite مي فرسته و آبجكت رو به وكتور اضافه مي كنه ...

_________________
Make something happen
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
iran_adventure
مدیر انجمن
مدیر انجمن


تاريخ عضويت: شنبه 4 آذر 1385
تعداد ارسالها: 2069
محل سكونت: تهران


1 شنبه 20 آبان 1386 - 23:27
پاسخ بصورت نقل قول
گفتم ( گفتش ! ) نامفهومه بيشتر توضيح بدم :

اول از همه اينكه من اين تاپيك رو با SDL اشتباهي گرفتم !
تو تاپيكي كه احسان براي SDL زده تو main اين ها رو مي بينيد :

كد:
   vector<GameLoop*> loops;
   menu = new Menu(subMenues, IMG_Load("menu back.png"));
   loops.push_back(menu);
   level1 = new Level1(IMG_Load("level1.png"));
   loops.push_back(level1);


خوب مي بينيد كه به ازاي هر آبجكتي كه بخواد به loops اضافه بشه بايد يك بار دستور push_backانجام بشه من در نظر دارم كه اين عمل به صورت اتوماتيك انجام بشه يعني ( در برنامه خودم ) وقتي كد زير رو مي نويسم آبجكتي از animSprite ايجاد بشه و به وكتوري از animSprite اضافه بشه :

كد:
   animSprite Test( "foo.png", 50, 75, 64, 205, 4, 1, true );


كه براي اين موضوع دو راه حل در پست قبليم به ذهن خودم رسيد . البته از اول هم مي دونستم راه خوبي نمي شه ولي مي خواستم اول سعي خودم رو بكنم !

_________________
Make something happen
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
lord_akinak
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: شنبه 15 ارديبهشت 1386
تعداد ارسالها: 349
محل سكونت: Hell


1 شنبه 20 آبان 1386 - 23:39
پاسخ بصورت نقل قول
نقل قول:

من در نظر دارم كه اين عمل به صورت اتوماتيك انجام بشه

اين كار رو نكن...!
به چند دليل :
1 - اگه بخواي همه كلاس ها مثل animSprite به Vector دسترسی داشته باشن ، یا باید global تعریف بشه ، یا باید توی یک کلاس به صورت public و static که در هر صورت برای حافظه گرون تموم می شه !
2 - اگه هر کسی ( هر animSprite ) بتونه به Vector اصلی دسترسی داشته باشه ، Vector بی صاحاب می شه ( مثل مملکت ما! ) و هر کسی می تونه توش تغییر ایجاد کنه!
3 - Vector شما ، یه جورایی جایی که آدرس تمام Resource ها اونجا قرار داره ، بنا بر این ، وقتی می خواهی که یک سری از Resource ها رو آزاد کنی ، باید به اون Resource ها دسترسی داشته باشی ( که خوب ، اگه قرار بود به Resource دسترسی داشته باشیم ، دیگه Vector نمی ساختیم )!
4 - ...!

در کل ، همین حالت کافیه و فقط بهتره ، Vector به صورت global نباشه و داخل یه کلاس به صورت private تعریف بشه که اون کلاس توانایی اضافه و کم کردن اسپریت رو داشته باشه ( معمولا به اون کلاس می گن : SceneManager ) ... و در موقع لازم تمام صحنه رو Render کنه ...

_________________
And hell was so cold
All the vases are so broken
And the roses tear our hands all open
Mother mary miscarry
But we pray just like insects
The world is so ugly now
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر نام كاربري در پيغامگير Yahoo
 

نمايش نامه هاي ارسال شده قبلي:   
ارسال يك موضوع جديد   پاسخ به يك موضوع    صفحه 3 از 13 تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد
برو به صفحه قبلي  1, 2, 3, 4 ... 11, 12, 13  بعدي


 
پرش به:  


شما نمي توانيد در اين انجمن نامه ارسال كنيد.
شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد
شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد


unity3d

بازگردانی به فارسی : علی کسایی @ توسعه مجازی کادوس 2004-2011
Powered by phpBB © 2001, 2011 phpBB Group
| Home | عضويت | ليست اعضا | گروه هاي كاربران | جستجو | راهنماي اين انجمن | Log In |