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





صفحه اول انجمنها -> بررسی سوالات و اشکالات کاربران -> یه مشکل تو کد نویسی
 

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

یه مشکل تو کد نویسی
نويسنده
پيغام
Parham
متخصص ساخت بازی
متخصص ساخت بازی


تاريخ عضويت: 4 شنبه 28 دي 1390
تعداد ارسالها: 408
محل سكونت: somewhere behind a lot of troubles...


5 شنبه 21 دي 1391 - 13:06
پاسخ بصورت نقل قول
سلام دوستان عزیز.
من می خوام یه چیزی مثل تابع GetComponent توی یونیتی در بیارم،توجه کنید:
كد:


using System.Data;
using System.Collections.Generic;

public class Transform
{
    public Vector2 Position = new Vector2();
    public Gyratory Rotation = new Gyratory();
    public string Tag = "Untagged";

    public Transform(Vector2 _position,Gyratory _rotation)
    {
        Position = _position;
        Rotation = _rotation;
    }

    public Transform(float _x, float _y,float _degree)
    {
        Position = new Vector2(_x, _y);
        Rotation = new Gyratory(_degree);
    }

    public void GetComponent<CT>()
   {
    ///اینجا باید چی بنویسم؟
    }
}



خب در جایی که مشخص کردم باید چی بنویسم تا کلاس انتخاب شده در CT به این اسکریپت داده بشه و عمل کنه؟

با سپاس
Arrow

_________________
برای رسیدن به موفقیت آسانسوری وجود ندارد،باید پله پله بالا رفت؛
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

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


تاريخ عضويت: 2 شنبه 23 آذر 1388
تعداد ارسالها: 1034


5 شنبه 21 دي 1391 - 16:48
پاسخ بصورت نقل قول
سلام

اولا برا Component ها باید یه Interface درست کنی ...
دوما باید یه لیستی از کامپوننت ها رو داشته باشی ...
سوما GetComponent باید مقدار T برگردونه نه void ...
چهارما نوع T برا GetComponent رو باید محدود کنی وگرنه کاربر عدد ، رشته یا هر کلاسی که دوست داره میده بهش !!

به این صورت :

كد:
    public interface IComponent
    {
        void Update();
    }

    public class Component_A : IComponent
    {
        public void Update()
        {
            Console.WriteLine("Component A"); // Component A Test
        }
    }

    public class Component_B : IComponent
    {
        public void Update()
        {
            Console.WriteLine("Component B"); // Component B Test
        }
    }

    public class Transform
    {

        public Transform() // ctor
        {

        }

        public void AddComponent<T>() where T : IComponent , new()
        {
            foreach (IComponent comp in _components)
                if (typeof(T) == comp.GetType())
                    return; // already exist ... return

            _components.AddLast(new T());
        }

        public T GetComponent<T>() where T : IComponent
        {
            foreach (IComponent comp in _components)
                if (typeof(T) == comp.GetType())
                    return (T)comp;

            return default(T);
        }

        public void PrintAllComponents()
        {
            foreach (IComponent comp in _components)
                comp.Update();
        }

        LinkedList<IComponent> _components = new LinkedList<IComponent>();
    }


این هم کد تست :

كد:
            Transform t = new Transform();
            t.AddComponent<Component_A>();
            t.AddComponent<Component_A>();
            t.AddComponent<Component_A>();
            t.AddComponent<Component_A>();

            t.AddComponent<Component_B>();
            t.AddComponent<Component_B>();
            t.AddComponent<Component_B>();

            t.PrintAllComponents();
            Console.ReadLine();
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

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


تاريخ عضويت: 4 شنبه 28 دي 1390
تعداد ارسالها: 408
محل سكونت: somewhere behind a lot of troubles...


5 شنبه 21 دي 1391 - 18:21
پاسخ بصورت نقل قول
سلام.
خب امین جان یکم سخت شد...من تقریبا 90 درصدش رو نفهمیدم.
وب سایتی...کتابی...جایی هست که از پایه آموزش بده این مبحث رو؟ Shocked Confused

_________________
برای رسیدن به موفقیت آسانسوری وجود ندارد،باید پله پله بالا رفت؛
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

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


تاريخ عضويت: 2 شنبه 23 آذر 1388
تعداد ارسالها: 1034


5 شنبه 21 دي 1391 - 19:03
پاسخ بصورت نقل قول
Parham,

برا اون چیزهایی که به زبان C# مربوطه خب با یه کتاب باید پیش بری ...
برا معماری component هم توی گوگل کلماتی مثل component base design/pattern و ... رو جستجو کن ، منابع زیاد هست ...
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

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


تاريخ عضويت: 4 شنبه 28 دي 1390
تعداد ارسالها: 408
محل سكونت: somewhere behind a lot of troubles...


5 شنبه 21 دي 1391 - 21:34
پاسخ بصورت نقل قول
با سپاس.
ببینم با tao framework که مطمئنا آشنایی داری؟
www.taoframework.com
من با نسخه 2.1.0 دارم سعی می کنم یه انجین دو بعدی ساده بسازم.
اما 2 تا مشکل دارم.
یکی همین getcomponent بود که تقریبا باید حل شده بدونمش،دومی لود کردن تکسچر با Tao.Devil هست.
من چیزی ازش سر در نمیارم.
می تونی کمکم کنی؟ Shocked Mad Wink

_________________
برای رسیدن به موفقیت آسانسوری وجود ندارد،باید پله پله بالا رفت؛
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

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


تاريخ عضويت: 4 شنبه 28 دي 1390
تعداد ارسالها: 408
محل سكونت: somewhere behind a lot of troubles...


5 شنبه 21 دي 1391 - 21:36
پاسخ بصورت نقل قول
با سپاس.
ببینم با tao framework که مطمئنا آشنایی داری؟
www.taoframework.com
من با نسخه 2.1.0 دارم سعی می کنم یه انجین دو بعدی ساده بسازم.
اما 2 تا مشکل دارم.
یکی همین getcomponent بود که تقریبا باید حل شده بدونمش،دومی لود کردن تکسچر با Tao.Devil هست.
من چیزی ازش سر در نمیارم.
می تونی کمکم کنی؟ Shocked Mad Wink

_________________
برای رسیدن به موفقیت آسانسوری وجود ندارد،باید پله پله بالا رفت؛
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

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


تاريخ عضويت: 2 شنبه 23 آذر 1388
تعداد ارسالها: 1034


5 شنبه 21 دي 1391 - 23:19
پاسخ بصورت نقل قول
کتابخونه tao دیگه Discontinue شده و جاش رو OpenTK گرفته ...
البته OpenTK هم مدت زیادی هست که release نداشته ولی باز بهتره ...

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

در مورد لود کردن تکسچر هم با خود system.drawing میشه ... نمونه :
كد:

int tex0 = GL.GenTexture();

    Bitmap bmp = Bitmap.FromFile(@"C:\myImage.png") as Bitmap;
    Rectangle bmpRect = new Rectangle(Point.Empty, bmp.Size);
    BitmapData bmpdata = bmp.LockBits(bmpRect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);
    GL.BindTexture(TextureTarget.Texture2D, tex0);
    GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, bmpdata.Width, bmpdata.Height, 0, PixelFormat.Bgr, PixelType.UnsignedByte, bmpdata.Scan0);
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل
 

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


تاريخ عضويت: 4 شنبه 28 دي 1390
تعداد ارسالها: 408
محل سكونت: somewhere behind a lot of troubles...


جمعه 22 دي 1391 - 17:23
پاسخ بصورت نقل قول
ای بابا!
ما که میریم سراغ هر چی discontinue می شه!!!
به هر حال
با سپاس Rolling Eyes

_________________
برای رسیدن به موفقیت آسانسوری وجود ندارد،باید پله پله بالا رفت؛
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ارسال ايميل نام كاربري در پيغامگير Yahoo
 

نويسنده
پيغام
HGGI
در حال رشد
در حال رشد


تاريخ عضويت: شنبه 20 خرداد 1391
تعداد ارسالها: 32
محل سكونت: هرجا خدا بخواهد.


جمعه 22 دي 1391 - 19:35
پاسخ بصورت نقل قول
/*
ای بابا!
ما که میریم سراغ هر چی discontinue می شه!!!
*/
خب دات نته دیگه
:شکلک سبزه:
این رو تو دات نت راحت پیاده سازی می شه ولی خیلی کند و افتضاهه
لگه سی پلاسش هم خواستی بگو بدم
این رو با نت پد نوشم یکم مشکل داره
سی شارپ یادم نیست زیاد

class Compnent
{
bool enable;
GameObject owner;

virtual void onStart();
virtual void onUpdate();
}
class GameObject
{
bool active;
list<Compnent> components;
Compnent addCompnent(Compnent _comp)
{
components.add(_comp);
_comp.owner = this;
_comp.enable = true;
_comp.onStart();
return _comp;
}
Compnent getComponent(Type _t)
{
for(int i = 0; i < components.size; i++)
{
if(typeof(components[i]) == _t)
return components[i];
}
return null;
}
}

class Transform : Component
{
Vec3 Pos;
Vec3 Scale;
Vec3 Rotation;
int Layer;
string Tag;
}

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

نويسنده
پيغام
HGGI
در حال رشد
در حال رشد


تاريخ عضويت: شنبه 20 خرداد 1391
تعداد ارسالها: 32
محل سكونت: هرجا خدا بخواهد.


جمعه 22 دي 1391 - 19:36
پاسخ بصورت نقل قول
همین addCompnent رو با جنریک می تونی درستش کنی !

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

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


 
پرش به:  


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


unity3d

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