تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 5 از 10 اولاول 123456789 ... آخرآخر
نمايش نتايج 41 به 50 از 100

نام تاپيک: آموزش مقدماتی و فشرده شروع برنامه نویسی گرافیکی سه بعدی تحت XNA و زبان های VB.Net و C#.Net

  1. #41
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    1 شروع برنامه نویسی و کدنویسی در محیط XNA

    سلام


    ضربت خوردن و شهادت مولای متقیان، امیر المومنین، علی بن ابی طالب (علیه السلام) را بر عموم دوستان تسلیط میگم.

    علی ای همای رحمت تو چه آیتی خدا را ///// که به ماسوا فکندی همه سایه‌ی هما را
    دل اگر خداشناسی همه در رخ علی بین ///// به علی شناختم به خدا قسم خدا را
    به خدا که در دو عالم اثر از فنا نماند ///// چو علی گرفته باشد سر چشمه‌ی بقا را
    مگر ای سحاب رحمت تو بباری ارنه دوزخ ///// به شرار قهر سوزد همه جان ماسوا را
    برو ای گدای مسکین در خانه‌ی علی زن ///// که نگین پادشاهی دهد از کرم گدا را
    جز از علی که گوید به پسر که قاتل من ///// چو اسیر تست اکنون به اسیر کن مدارا
    بجز از علی که آرد پسری ابوالعجائب ///// که علم کند به عالم شهدای کربلا را
    چو به دوست عهد بندد ز میان پاکبازان ///// چو علی که میتواند که بسر برد وفا را
    نه خدا توانمش خواند نه بشر توانمش گفت ///// متحیرم چه نامم شه ملک لافتی را
    بدو چشم خون فشانم هله ای نسیم رحمت ///// که ز کوی او غباری به من آر توتیا را
    به امید آن که شاید برسد به خاک پایت ///// چه پیامها سپردم همه سوز دل صبا را
    چو تویی قضای گردان به دعای مستمندان ///// که ز جان ما بگردان ره آفت قضا را
    چه زنم چونای هردم ز نوای شوق او دم / که لسان غیب خوشتر بنوازد این نوا را
    همه شب در این امیدم که نسیم صبحگاهی ///// به پیام آشنائی بنوازد و آشنا را
    ز نوای مرغ یا حق بشنو که در دل شب ///// غم دل به دوست گفتن چه خوشست شهریارا

    ========================================

    قرار بود مطالب دیگری برای این پست اختصاص دهم ولی دیدم داریم وارد کد نویسی میشویم ولی هنوز مبانی و متدهای مهم و چگونگی آغاز کدنویسی XNA را توضیح نداده ایم.

    کدنویسی در محیط XNA3.1 با وراثتی از کلاس XNA.Game آغاز میشود.
    کلاس مذکور متدها و توابعی دارد که میتوان با بازتعریف انها عملیاتهای پایه ای خود را پیاده سازی کرد.
    تک تک این پرکاربردترین متدها را در زیر بررسی خواهیم کرد.

    ==============

    سازنده کلاس (در VB.Net با نام New و در C#.Net با نام خود کلاس)
    طبیعتاً این اولین متد اجرایی است که دقیقاً بعد از ایجاد کلاس XNA.Game میتوانیم کدهای خودمان را در ان مستقر کنیم.
    (پر شدن اشاره گر this در C#.Net و Me در VB.Net)

    در این محل هنوز همه اشیا ایجاد نشده و نمیتوان هر کاری کرد و در اصل برای خیلی از دستورات زود است!
    ولی معمولاً XNA.Game.Content.RootDirectory در یک پروژه عادی اینجا مقدار دهی میشود و نمونه ای از شی XNA.GraphicsDeviceManager هم برای کارهای اتی ساخته میشود.
    (برخی از عملیات های New سازی عادی و مجزا را هم میتوان در این محل یا در متد بعدی انجام داد.)

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    برخی از کاربرهای شی GraphicsDeviceManager را در متد بعدی خواهیم گفت.

    XNA.Game.Content.RootDirectory هم پوشه کاری شامل دیتهای xnb برنامه را (در کنار exe یا dll) مشخص میکند.
    همانطوری که گفتیم XNA تمام فایلهای دیتا (شامل سوت و تصویر و شی سه بعدی و افکت و فونت و...) را به روش خاص پردازش و همه را به پسوند xnb.* سریالی میکند.
    تنظیم مقدار مذکور نام پوشه ریشه حاوی این xnb.* ها را مشخص میکند.
    تا در دستورات عادی دیگر ما نیازی نباشد مسیر فایلها را بدهیم و خود XNA بداند فایلها را از کجا میتواند پیدا کند.

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

    ولی ما در این آموزش همواره یک Content با همین نام "Content" داریم که همینوطری تنظیمش میکنیم (پیش فرض XNA)

    ==============

    متد Initialize :
    این متد اولین متد رسمی است که بعد از New اجرا میشود و در این مرحله کارهای بیشتری میتوان انجام داد و تنظیمات خاصی را برای برنامه اعمال کرد.
    مثلاً میتوان Resolution مانیتور را تنظیم کرد (پیش فرض XNA برای محیط Windows مقدار 800-600 است)
    و یا مشخص کرد که ماوس مرئی باشد یا نه و نیز وضعیت اجرای تمام صفحه را مشخص کرد.
    (
    هسته DirectX برای تحت کنترلر گرفتن کل صفحه نمایش و اجرای fullscreen بهینه سازی شده و در حالت واقعی حالت fullscreen میتواند بازدهی برنامه شمار ا افزایش دهد.
    ولی DirectX مشکلاتی بابت خروج نابهنگام و یکباره از حالت fullscreen پیش می آورد و در این حالت استفاده از فرامینی که پنجره ویندوزی را ظاهر کند باعث مشکل برای برنامه میشود ...
    مثلاً وسط حالت fullscreen دکمه Win و یا Alt+Ctrl+Delete و... را بزنید در بازهای رایانه ای دیگر هم میبینید مشکل ایجاد میکند.
    این وضعیت برای trace و debug در داخل VS هم وجود دارد و برای debug راحت در VS در حین مراحل طراحی بهتر است fullscreen نباشد.
    )

    تنظیمات فوق از موارد کاربرهای XNA.GraphicsDeviceManager هستند.

    یا در این متد میتوان مشخصات و پارامترهای کلی دوربین و فضای دید را مشخص کرد.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    گمانم دستورات فوق واضح هستند.
    فقط دستورات ابتدایی تنظیم دوربین باید به این دستورات اضافه شود که در پست مخصوص کنترل دوربین این دستورات بیان خواهد شد و در خصوص ProjectionMatrix و تک تک مقاویر داده شده به CreatePerspectiveFieldOfView هم در همان پست توضیح داده خواهد سد.

    ==============

    متد LoadContent
    این متد بعد از فراخوانی Initialize از کلاس base اجرا خواهد شد و همانطور کهع از نامش مشخص است، محل پیشفرض برای بارگذاری Content ها (همان فایلهای xnb.*) داخل اشیای مناسب به داخل برنامه است.

    برای بارگذاری دیتاهای فایلی برنامه از متد XNA.Game.Content.Load استفاده میکنیم که Generic است و نوع شی تولیدی و نام فایل xnb.* را میگیرد.

    در صورت نیاز میتوان کراهای لازم دیگر را هم انجام داد، مثل تولید XNA.Graphics.SpriteBatch جهت ترسیمات دوبعدی
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    میتوان فایلهای دیتاها در زیر پوشه های Content هم قرار داد و انها را منظم و دسته بندی کرد که در این صورت نام زیر پوشه ها مثل حالت عادی مسیر فایلها با یک اسلش اضافه خواهد شد.

    (متدها و نحوه استفاده XNA.Graphics.SpriteBatch در پست ویژه ترسیمات دوبعدی بیان خواهد شد.)

    ==============

    متد UnloadContent
    این متد برعکس متد قبلی است و از ان میتوان در پایان برنامه برای آزاد سازی منابع و حافظه و... استفاده کرد.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ==============

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

    مثلاً گرفتن فرامین ورودی کاربر از ماوس و کیبورد و جوی استیک و... و ترتیب اثر دادن به فرامین کاربر ...

    در صورت نیاز :
    حرکت دوربین و چرخش آن به محل جدبد
    حرکت یا چرخش اشیای صجنه به مختصات های جدید
    برسی و پردازش برخورد اشیا و انجام عمل و دستور مناسب و...
    و...

    خلاصه تمام بار پردازش برنامه بر دوش این متد است.

    (
    اگر شما هر یک از متدهای قبلی را سنگین بنویسید و در آنها دقت کافی نکنید، خیلی ایراد ندارد، چون انها یکبار اجرا میشوند و فوقش برنامه میخواهید 5 ثانیه ای لود شود 6 قانیه ای لود میشود!

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

    چون این متد بار پردازشی زیادی دارد در جهت شفافیت کدها و لایه بندی و استفاده از قدرت شی گرایی میتوان کد این بخش را در کلاسهای مجزایی شکست و از واسط XNA.IUpdateable هم در انها استفاده کرد و در این متد فقط این کلاسها فراخوانی شوند.

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

    =====

    این متد آرگومانی از نوع XNA.GameTime هم میگیرد که حاوی اطلاعاتی زمانی بازی است که میتواند معیار حرکت و پردازش قرار بگیرید.
    مثلاً شاید نیاز باشد شی ای از نقظه A به B رود ولی این حرکت نباید لحظه ای باشد و نباید در رایانه قوی تر و سریعتر و رایانه ضعیف تر و کندتر فرقی کند، مثل حرکت یک خودرو
    در مواردی از این دست میتوان از XNA.GameTime پاس داده شده در پردازش ها استفاده کرد.

    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ==============

    متد Draw
    این متد از خیلی از لحاظ شبیه متد قبلی است ولی شما در این متد وظیفه نوشتن دستورات ترسیم برای هر فریم را دارید.
    بازدهی هم در این متد بسیار مهم است و باید تمام کنترلرهای دوبعدی و اجزای سه بعدی و زره ای در این متد ترسیم شوند.

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

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

    کدهای فوق به همراه نمونه کد ساده رسم دوبعدی در قالب پوشه XNAEmpty به نمونه کدهای پک تاپیک افزوده شده.
    support.h02.ir/fwlink/?LinkId=1005808167

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

    موفق باشید.

  2. 3 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  3. #42
    مدیر انجمن برنامه نویسی Payman_62's Avatar
    تاريخ عضويت
    Dec 2005
    محل سكونت
    تهران
    پست ها
    2,445

    پيش فرض

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

    دوستان لطفا از ارسال پست برای تشکر یا سوال یا مطالب بی ربط خودداری کنید.

  4. 4 کاربر از Payman_62 بخاطر این مطلب مفید تشکر کرده اند


  5. #43
    اگه نباشه جاش خالی می مونه L u K e !'s Avatar
    تاريخ عضويت
    Mar 2009
    محل سكونت
    Qazvin
    پست ها
    441

    پيش فرض

    محمد اقا فکر نمی کنم اینجا کسی با Vb.net xna کار کنه
    خوب Xna مخصوص C# هست و در VB کاربرد چندانی ندارد
    و لازم نیست کدهاتون رو به زبان VB بزارید
    یه چیز دیگه بدون Content چطوری می شه Spritefont یا Model یا ... رو Load کرد ؟



    اگه می شه یکم در مورد این حلقه هایی که زیاد اجرا می شن بگین ، چطورین ؟
    Last edited by L u K e !; 20-09-2009 at 10:25.

  6. #44
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    1 ترسیمات دوبعدی شناور روی صفحه (بخش اول)

    سلام
    تریسمات دوبعدی XNA در واقع محدود به تصویر دوبعدی است.
    البته امکان ساده ترسیم متن هم وجود دارد ولی در واقع خود متون هم توسط XNA به تصویر دوبعدی تبدیل شده و به هسته ترسیم ارسال میشوند.

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


    برای ترسیمات دوبعدی نیاز به تعریف یک نمونه از شی XNA.Graphics.SpriteBatch است.
    نمونه سازی این شی میتواند با کدی مثل این و یکبار در شروع برنامه (یعنی متد XNA.Game.Initialize یا XNA.Game.LoadContent) صورت بگیرید.
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    متدهای ترسیمی XNA.Graphics.SpriteBatch طبیعتاً باید در متد XNA.Game.Draw کدنویسی شوند.
    - متد Begin
    این متد باید اجباراً قبل از انجام هر ترسیم دوبعدی توسط این کلاس و یکبار فراخوانی شود.

    - متد End
    این متد باید اجباراً پس از انجام همه ترسیمات دوبعدی و در پایان کار ترسیم دوبعدی و یکبار فراخوانی شود.

    - متد Draw
    این متد وظیفه ترسیم تصاویر دوبعدی را بر عهده دارد.
    (همانطور که در پست قبلی بیان شد تصاویر را میتوانید در Content قرار دهید و با کدی که بیان شد بارگذاری کنید)
    این متد Overloads های متعدد دارد که در اینجا به اختصار به توضیح هر پارامتر با نامش خواهیم پرداخت:

    texture As XNA.Graphics.Texture2D
    شی تصویری که باید ترسیم شود.

    position As XNA.Vector2
    موقعیت دوبعدی نقطه شروع ترسیم در روی صفحه نمایش

    sourceRectangle As XNA.Rectangle
    محدوده مربعی از فایل تصویر اصلی که باید ترسیم شود، اگر محدوده ای داده نشود کل تصویر ترسیم خواهد شد.
    با کمک این پارامتر میتوانید یک تصویر بزرگ داشته باشید که از بخشهای مختلف آن در جاهای متعدد برنامه با دادن مختصاتش استفاده کنید.

    color As XNA.Graphics.Color
    فیلتر رنگی برای ترسیم که به عنوان نمونه میتوانید تصویر را نیمه شفاف ترسیم کنید.

    rotation As Single
    یک زاویه چرخش به رادیگان را دوران ترسیم مشخص میکند.

    origin As XNA.Vector2
    یک نقطه مختصات مبنا برای ترسیم مشخص میکند.

    scale As XNA.Vector2
    یک عدد تناسب برای هر بعد ترسیم مشخص میکنند.
    (
    در واقع همان بزرگنمایی و Zoom است که به درصد و یک صدم الفاظ گفتاری انسانی است (!)
    مثلاً عدد 0/75 یعنی همان 75% خودمان که باعث کوچک شدن تصویر میشود
    )

    - متد DrawString
    این متد وظیفه ترسیم متون یا همان نوشته و String را بر عهده دارد.
    البته اگر نوشته هایی در برنامه شما ثابت و فیکس و همیشگی هستند شاید بد نباشد که آنها را به تصویر png تبدیل کنید و با همان متد Draw ترسیمش کنید.
    (این متد و ترسیم متون در پست بعدی بررسی خواهد شد.)



    برای کد نمونه و سمپل همانطور که در پست قبلی بیان شد:
    نقل قول نوشته شده توسط _H2
    کدهای فوق به همراه نمونه کد ساده رسم دوبعدی در قالب پوشه XNAEmpty به نمونه کدهای پک تاپیک افزوده شده.
    support.h02.ir/fwlink/?LinkId=1005808167
    ==============

    ترسیمات دوبعدی به کمک ghnet.xna.dll

    چندنکته در استفاده از ghnet.xna.dll
    1) کلاس اصلی شما به جای وراثت از XNA.Game باید از GHNet.Xna.Engine وراثت بگیرد.

    2) در جهت سرعت بیشتر مستقیماً اکثر خود فیلدهای کلاسها در dll مذکور Public و در دسترس هستند و برای خواندن از انها Property-Get و لایه اضافه ای وجود دارد تا سرعت به حداکثر ممکن برسد ولی برای تغییر این فیلد ها باید از متد های SetXXXXX استفاده کنید.
    (این عمل کدنویسی مطمئنی نیست و توصیه نمیشود و عامل خطای انسانی را به شدت افزایش میدهد ولی اول انکه قصد نداشتم dll مذکور باعث افت سرعت شود و دوم هم اصلاً قصد انتشار عمومی dll مذکور را نداشتم.)

    کد اشتباه در استفاده از ghnet.xna.dll
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد صحیح در استفاده از ghnet.xna.dll
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    =====

    در ghnet.xna.dll مکانیزمی بسیار شبیه خود دات نت در مدیریت فرمهای ویندوزی پیاده سازی شده.
    شما میتوانید مثل طراحی فرمها کنترلرهای متعدد دو بعدی روی برنامه داشته باشید که وراثتی از GHNet.Xna.Drawable2D هستند.
    کافی است کنترلر را بسازید و خصیصه ها را Set کنید و رویدادهای مورد نیاز را هندلر کنید و در نهایت ان را به مجموعه Objects اضافه کنید.

    کلاس GHNet.Xna.Drawable2D خصیصه های تنظیمی فراوانی دارد و حتی مدیریت رویدادگرایی ماوس را هم دارد.
    در ضمن امکان تغییر تصویر پسضمینه با توجه به وضعیت ماوس را هم دارد (غیر فعال-فعال-ماوس روی کنترلر-ماوس فشرده شده)

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

    =====

    در نهایت برای ترسیم اشیای دوبعدی داخل Objects باید متد (Draw2D(gameTime در داخل متد Draw اصلی کلاس اضافه شود.
    پروژه نمونه در همان پک support.h02.ir/fwlink/?LinkId=1005808167 موجود است.

    ==============

    نقل قول نوشته شده توسط L u K e !
    فکر نمی کنم اینجا کسی با Vb.net xna کار کنه
    من مثل شما مطمئن نیستم.
    اول آنکه خود من پروه سه بعدی را قبول کردم که با XNA انجام دادم و با تاکید و سفارش مشتری که سورس VB.Net میخواست من هم برایش با VB.Net نوشتم.
    دوم انکه (همانطور که احتمالاً متوجه شدید) دوستان و همکاران VB.Net کار همچنان در این تالار و انجمن حضور فعال دارند.

    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] همین تاپیک:
    نقل قول نوشته شده توسط _H2
    کاملاً برای استفاده در دات نت مجهز و آماده و یک دست است ولی برای سایر زبانها و محیطهای غیر دات نتی قابل استفاده نیست
    نقل قول نوشته شده توسط L u K e !
    خوب Xna مخصوص C# هست و در VB کاربرد چندانی ندارد
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] همین تاپیک:
    نقل قول نوشته شده توسط _H2_
    گرچه به ظاهر زبان کاری XNA زبان C#.Net است ولی جالب است که اگر جستجو کنید حتی سایتهایی پیدا میکنید که در خصوص طراحی بازی با XNA تحت Delphi.Net آموزش داده اند!
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] همین تاپیک:
    نقل قول نوشته شده توسط _H2_
    در واقع XNA خیلی شبیه خود Framework است، چیز عجیب غریبی نیست!
    یک مجموعه از کلاسهای آماده است که حدودا (و کیلویی !) یک سوم Framework2.0 میشود به پروزه شما Reference میشوند و شما میتوانید از آن کلاسها و متدها استفاده کنید.
    نقل قول نوشته شده توسط L u K e !
    یه چیز دیگه بدون Content چطوری می شه Spritefont یا Model یا ... رو Load کرد ؟
    اگر منظورتان در VB.Net است این مسئله کامل در [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] بررسی شده و پک فوق العاده کوچکی معرفی شده که این مشکل را در VB.Net بکل حل میکند.
    و حتی اگر VB.Netر ا نصب داشته و سمپلهای این تاپیک را باز کرده باشید، متوجه میشدید که پروژه های VB.Net این تاپیک حاوی Content کامل و عین C#.Net هستند.
    یک نسخه کامل پروژه تبدیل شده به VB.Net هم در پست 15 موجود است (تبدیل شده با همین سایتهای معمولی تبدیل کد)
    نقل قول نوشته شده توسط L u K e !
    اگه می شه یکم در مورد این حلقه هایی که زیاد اجرا می شن بگین ، چطورین ؟
    گمانم توضیحات کافی بوده؟؟؟
    این مطالب در پست های 20 تا 30 بررسی شده اند.
    باز هم چشم، کوتاه به عنوان نمونه و مثال عرض میکنم:
    نمونه های متدهای اجرای مکرر در خود XNA میتواند متدهای Update و Draw باشد که تا اخر برنامه مدام اجرا خواهند شد.
    نمونه های حلقه های پنهانی سایر کدها هم میتواند دسترسی به عناصر داخل یک Collection-Dictionary باشد که معمولاً کلیدی داده شده و Collection در داخل خود حلقه را اغاز میکند تا عنصر نظیر ان کلید را پیدا کند.

    پست 20 -> سرعت و بازدهی کدهای مختلف 1 -> رابطه خصاصت و تنبلی و تعریف متغییر !
    [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]

    =====

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

  7. 3 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  8. #45
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض ترسیمات دوبعدی متن (بخش دوم و پایانی)

    سلام

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


    خودمانیم، این پست های من هم همش می افتد وسط یک مناسبتی!!!
    ==============

    فونت در XNA:
    برای ترسیم متون و نوشته ها طبق عادت ویندوزی نیاز به Font است.
    ولی Font در XNA تفاوتهای پیاده سازی با انچه قبلاً دیده بودید دارد.

    برای اضافه کردن فونت و استفاده از فونت های رایانه شما باید یک فایل spritefont.* به پروژه تان اضافه کنید.
    برای ان کار آیتم Content را SolutionExplorer انتخاب کرده و فرامین زیر را دنبال کنید:
    Project->Add New Item->Sprite Font

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

    [[[
    (اختیاری)
    اجازه دهید کمی بیشتر در مورد ساختار داخلی پردازش فونت ها در XNA بدانیم ...
    Pipline مربوط به SpriteFont در XNA در واقع از این XML فقط به عنوان تنظیمات استفاده میکند و xnb.* نهایی کاملاً متفاوتی میسازد.
    در زمان کامپایل و با توجه به مشخصاتی که در XML تان درج کرده اید XNA پردازشی حلقه ای را شروع میکند و یک تصویر png مانند بزرگ تولید میکند که همه کاراکترهای مورد نیاز فونت مورد نظر شما در روی آن رسم شده اند ...

    یک تصویر که پر است از حروف الفبا و علائم و نشانه ها ...
    و در واقع این تصویر است که به xnb.* نهایی تبدیل شده و به پروژه شما اضافه میشود.
    و در واقع در زمان ترسیم XNA می آید و محل کاراکتر به کاراکتر String شما را در این تصویر طبق یک جدول Sort شده و سریع به دست اورده و یک دستور ترسیم تصویر روی صفحه برای همان یک کاراکتر و در محلهای مشخص فایل تصویر فونت و صفحه نمایش اجرا میکند و بعد کاراکتر بعد ...

    این الگوریتم چندین پیامد منطقی دارد:
    ]]]

    1) مثل برنامه های عادی ویندوزی و وبی نیاز به وجود فایل فونت در مقصد نیست و در واقع فایل فونت شما همان xnb.* است که همراه exe تان قرار دارد، نتیجتاً میتوانید با خیال راحت و بدون نگرانی از هر فونتی که دوست دارید استفاده کنید.

    2) فونت های شما در هر سیستم Windows و XBox و Zune با بالاترین تضمین و بدون نگرانی کار خواهد کرد.

    3) فونت و سایز و حتی محدوده کاراکتری مورد نیازی که قصد استفاده از آن را دارید باید در زمان کامپایل مشخص باشد ولی میتوانید به تعداد دلخواه spritefont.* داشته باشید.

    =====

    مطلب مهم دیگری که وجود دارد ان است که اگر قرار است متن همواره ثابت و مشخصی را در محیط سه بعدی خود استفاده کنید که تغییری ندارد، از نظر بازدهی و سرعت و حتی گرافیک بهتر است متن مورد نظر را خود به وسیله برنامه های کمکی مثل Paint.Net یا Photoshop و... به فایل تصویر شفاف با فرمت png تبدیل کنید و سپس به جای دستور ترسیم متن، در کدها دستور ترسیم تصویر را در مختصات مورد نظر بدهید.
    این کار هم خیلی مطمئن تر است و میتوانید به سادگی به متن سایه و سایر افکت ها را بدهد و هم سرعت و بازدهی ترسیم هم بیشتر خواهد بود.

    =====

    و اما کد ...

    برای رسم باز هم نیاز به یک SpriteBatch و استفاده از متد DrawString وجود دارد.
    متد DrawString:
    یکی از ساده ترین Overload های این متد چهار پارامتر میگیرد.
    spriteFont As XNA.Graphics.SpriteFont
    که همان شی فونت بارگذاری شده است.

    text As String
    که متنی است که باید نمایش داده شود.

    position As XNA.Vector2
    محل نمایش متن است

    color As XNA.Graphics.Color
    رنگ متن است.

    طبق معمول برای بارگذاری xnb.* ها از Content میتوانید در متد LoadContent عمل کنید و در متد Draw هم ترسیم مورد نظر را انجام دهید:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    این کد فایل فونت xnbfontfilename.spritefont را بارگذاری کرده و متن "Microsoft XNA Game Studio 3.1" در مختصات صفر و صفر ترسیم میکند.

    =====

    ترسیم متن با کمک GHNet.Xna.dll:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    =====

    ترسیم متون فارسی و RightToLeft:
    همانطور که گفته شد سعی کنید تا حد امکان برای متون ثابت از تصاویر png استفاده میکنید. متاسفانه XNA3.1 جاری از ترسیم Runtime اعداد و متن فارسی RightToLeft پشتیبانی نمیکند.
    ولی جای نگرانی هم وجود دارد. میتوان با کدنویسی این قابلیت را اضافه کرد.

    تابعی در GHNet.Xna.dll و در مسیر GHNet.Text.PersianText.GetDrawablePersianText وجود دارد که قابلیت مذکور را ارائه خواهد کرد.
    شما میتوانید بدون استفاده از سایر امکانات این dll فقط با همین یک تابع مشکل نمایش متون Runtime فارسی را حل کنید.

    قبل از بررسی کد لازم است فایل spritefont.* مجاز را برای ترسیم کلیه حروف استاندارد زبان فارسی بررسی کنیم.
    همانطور که میدانید بخش CharacterRegion در XML این فایل محدوده کاراکترهای مورد نیاز را ثبت میکند که باید کاراکترهای فارسی را به آن اضافه کرد.

    یک فایل spritefont.* صحیح با پشتیبانی هم کاراکترهای استاندارد انگلیسی و هم فارسی میتواند چیزی شبیه این باشد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    (فاصله (Space) بین اعداد را حذف کنید. بدون فاصله اینجا خراب نشان داده میشد.)

    که چهار بخش قسمت پر رنگ آخر، حروف و کاراکترهای فارسی را طبق استاندارد جهانی Unicode اضافه میکند.
    (البته میتوان فاصله بین 64345 تا 64378 که حدود 33 کاراکتر است به هم چسباند و یک تکه کرد کار را ساده تر میکند ولی فایل .*xnb نهایی را کمی حجیم تر میکند.)

    اما کد لازم:
    استفاده از تابع GHNet.Text.PersianText.GetDrawablePersianText خیلی ساده است.
    همانطور که گفته شد برای ترسیم عادی یک متن میتوان از کدی شبیه این استفاده کرد:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    حالا برای ترسیم حروف و متون مخلوط فارسی و انگلیسی بعد از اضافه کردن Reference فایل GHNet.Xna.dll کدی مثل این کافی است:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    که نتیجه این کد نمایش متن "برنامه نویسی با XNA نسخه 3" خواهد بود.
    (میتوان برای بازدهی بیشتر خروجی این تابع را هم کش کرد)

    البته اگر کسی بخواهد از امکانات کامل GHNet.Xna.dll و کلاسهای GHNet.Xna.Engine و GHNet.Xna.Drawable2D و... استفاده کند، برای پشتیبانی فارسی و RightToLeft فقط کافی است EnabledRightToLeftPersianText لایه مورد نظر را True کند.
    (خود کلاس Drawable2D برای بازدهی بیشتر کش را انجام میدهد)
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    کد نمونه مرتبط با مباحث این پست را میتوانید در پک مختص این آموزش پیدا کنید:
    support.h02.ir/fwlink/?LinkId=1005808167

    ==============

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

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

  9. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  10. #46
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض ارائه یک سمپل سه بعدی ساده - Ship

    سلام
    فعلاً و بدون توضیحات یک سمپل بسیار ساده نمایش شی سه بعدی طراحی شده در 3DS-MAX را به پک مخصوص تاپیک اضافه کردم.
    خیلی ساده است ولی امیدوارم مفید باشد.

    این سمپل در قالب چهار پروژه ارائه شده است.
    دو سمپل با VB.Net و دو سمپل با C#.Net
    دو سمپل با ghnet.xna.dll و دو سمپل بدون آن.
    که در نهایت میشود چهار پروژه نمونه برای یک کار ثابت.
    (Ship_CS و Ship_VB و Ship_GHNet_CS و Ship_GHNet_VB)

    خروجی دیداری هر چهار پروژه دقیق مثل یکدیگر است، یک ناوچه جنگی طراحی شده با 3DS-MAX است که در برنامه و از محور وسط (حول محور Y) با سرعت یک دور در شش ثانیه میچرخد.

    در پوشه یا دایرکتوری _EXE_ میتوانید نسخه های کامپایل شده و exe سمپل ها را پیدا کنید.


    (((
    لینک دانلود معرفی شده در پست اول: (حجم تا این پست و فعلاً 2MB)
    support.h02.ir/fwlink/?LinkId=1005808167
    )))

    روز خوش.
    Last edited by _H2_; 02-01-2010 at 19:02.

  11. 3 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


  12. #47
    اگه نباشه جاش خالی می مونه cd3's Avatar
    تاريخ عضويت
    Jan 2007
    پست ها
    267

    پيش فرض

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

  13. #48
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    نقل قول نوشته شده توسط cd3
    می خواستم بدون از XNA فقط برای بازی استفاده می شود یا کار دیگه میشه باهاش انجام داد؟
    پست اول:
    نقل قول نوشته شده توسط _H2_
    ... تولید برنامه های سه بعدی از قبیل شبیه سازها و بازیهای رایانه ای ...
    خیلی واضح است.
    هر چیزی که نیاز به گزافیک پیشرفته دو و سه بعدی داشته باشد.
    معمولاً بازی ها و برنامه های شبیه ساز را شامل میشود.
    شبیه سازی یک ساختما یا خودرو و ... قبل از ساخت و طراحی سه بعدی در رایانه !
    برنامه های شبیه سازی آموزشی، مثل شبیه سازهای کابین های خلبان و یا حتی شبیه سازهای تاثیر قوانین فیزیک و رویدادها روی اجسام با قوانین و الگوریتم های خاص و سفارشی محاسباتی.

    XNA رابط زبانهای دات نتی با DirectX برای استفاده از کارت گرافیک و نمایش محیط سه بعدی (و دو بعدی) و همچین مدیریت اصوات در یک فضای سه بعدی مجازی است.

    ولی در ضمینه دو بعدی واسط دم دست تر +GDI هم وجود دارد.

  14. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


  15. #49
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    11 Sample های XNA Game Studio

    سلام دوستان خسته نباشید.
    چند تا Sample براتون آپ کردم ای شالله مورد استفاده قرار بگیره.

    کار با سایه و نور:


    دانلود:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    ُُکار با Sample آب:


    دانلود:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    بدون شرح !!!:


    دانلود:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    موفق باشید و سربلند.

  16. این کاربر از عــــلی بخاطر این مطلب مفید تشکر کرده است


  17. #50
    کاربر فعال انجمن دات نت عــــلی's Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    زیر سایه عرش الهی
    پست ها
    2,335

    11 Xna Samples

    سلام.

    Corsur جالب ماوس:



    دانلود:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    Sample راعد و برق:



    دانلود:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    اینم Sample جالب نور:



    دانلود:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید

  18. این کاربر از عــــلی بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •