حل مشکل VB.Net کارها برای نوشتن کد تحت XNA
سلام
دوستانی که میخواهند با VB.Net کار کنند قابلیت Pipeline ها را و تبدیل فایلها یه xnb.* را به صورت عادی در محیط Visual Studio نخواهند داشت و یکسری مشکلات ریز دیگر هم خواهند داشت ولی نگرانی وجود ندارد ...
همانطور که قبلاً هم گفتم سایت هایی هم در ضمینه Delphi.Net در این خصوص فعال هستند.
برای رفع مشکل این دوستان من یک پک را آماده کردم که با نصب این پک مشکل از جهات مختلف تا حدود زیادی حل میشود.
در این بسته بسیاری تنظیمات ریز و درشت برای NewProject-XNA لحاظ شده که میتواند حداکثر هماهنگی VB.Net را با XNA و ابزار توسعه آن و استفاده در شرایط گوناگون ایجاد کنند.
دوستان VB.Net کار باید از این پک استفاده کنند و بعد از NewProject تنظیمات پروژه مذکور را تغییر ندهند.
==============
- نام این پک Install_XNA_VB و نام فایل Install_XNA3.1_VB9.0.exe است
- پس از نصب VS و XNA3 میتوانید اجرایش کنید.
- هیچ ضرری ندارد و برای #C کار ها هم تفاوتی ایجاد نمیکند
- خودکار و سریع عمل میکند و هیچ دیالوگ خاصی ندارد و منتظر فرم و Next و چیز خاصی نباشید!
لینک دانلود اختصاصی این پک به حجم حدود 40 کیلو بایت
support.h02.ir/fwlink/?LinkId=1005960377
یا
h02.ir/Downloads/?familyid=5D990F13-4128-444F-A8F8-E2DC0EEF5243
در حال حاضر و با توجه به کوچک بودن پک فوق، این فایل به بسته مختص این آموزش که لینک دانلودش در پست اول آمده هم اضافه شده و از طریق لینک دانلود پست اول هم قابل دانلود است.
==============
شروع یک پروژه جدید عادی XNA برای زبان C#.Net
کد:
File->New->Project->C#.Net->XNA Game Studio 3.1->Windows Game (3.1)
- با این کار یک پروزه exe به همراه یک پروژه درونی Content ساخته میشود ...
- برنامه نویس میتوانید این Content را حذف یا تغییر نام بدهد و نیز در صورت نیاز میتواند چندین Content دیگر هم به پروژه خود اضافه کند.
==============
شروع یک پروژه جدید عادی XNA برای زبان VB.Net (البته بعد از نصب پک معرفی شده)
کد:
File->New->Project->VB.Net->XNA Game Studio 3.1->Windows Game (3.1)
- با این کار فقط یک پروژه exe ساخته میشود و برنامه نویس باید به دلخواه خود و به تعدادی که میخواهید Content را هم جدا بسازد که البته معمولاً یکی کافی است.
یعنی پس از NewProject فایل exe دستورات زیر را هم برای داشتن یک Content پیگیری کنید.
کد:
File->Add->New Project->VB.Net->XNA Game Studio 3.1->Content Pipeline (3.1)
ولی دو نکته را دقت کنید ...
1- بهتر است نام پروژه را به جای پیشفرض Content1 نام Content قرار دهید (وگرنه باید کد را هم تغییر دهید)
2- حتماً حتماً حتماً پروژه های Content را در پوشه ای بسازید که فایلهای exe اصلی مثل vbproj و Game1.vb و Program.vb و... قرار دارند ...
(انجام این عمل بسیار ضروری است و برای صحت کارکرد پروژه لازم است.)
اینکار به صورت خودکار برای C#.Net انجام میشود ولی VB.Net کارها با این پکی که من دادم باید خودشان یک بار در شروع پروزه جدید حواسشان به این مطلب باشد.
یعنی مثلاً اگر فایل vbproj و یا Game1.vb در مسیر C:\AAA\BBB\CCC\Game1.vb قرار دارد، شما باید پروژه Content را در مسیر C:\AAA\BBB\CCC بسازید.
==============
با توجه به زیاد بدون سمپلهای XNA به زبان #C، دوستان VB کار میتوانند از سایتهای زیر برای تبدیل آنلاین کد بین دو زبان #C و VB استفاده کنند.
کد:
http://www.developerfusion.com/tools/convert/csharp-to-vb
http://www.developerfusion.com/tools/convert/vb-to-csharp
http://www.carlosag.net/Tools/CodeTranslator
و...
========================================
فعلاً برای آن دسته از دوستان که کم کم دارند صبر خود را از دست میدهند یک مثال ساده دو بعدی معرفی میکنیم! (بدون هیچ توضیح و شرحی)
(یک چیز تو مایه های قارچ خور آتاری های قدیم ولی یکم دولوکس تر! همان دستگاه های سیاه با دسته گوشکوب های دو دکمه ای ... !)
- exe این سمپل حدود 400 کیلو بایت است ولی بیش از 11 مگ حجم فایلهای گرافیکی و صوتی و... است!
- پروژه خیلی ساده و دوبعدی است ولی مطلب آموزشی دارد.
- در HighResolutionContent و Levels میتوانید فایلهای هر مرحله را مشاهده و ویرایش کنید و یا فایل جدیدی برای یک مرحله جدید با شکلی که شما میخواهید ایجاد کنید!
(
در فایل متنی مرحله ...
کاراکتر "1" نقطه شروع است
کاراکتر "X" نقطه پایان است.
کاراکتر "#" و "-" دو نوع سکو هستند.
کاراکتر "A" و "B" و "C" هم دشمن است (یک اسکلت عصبانی و... !)
)
گرچه دوبعدی است ولی پیشنهاد میکنم حتماً ببینید.
===== شروع سمپل برای C#.Net
این پروژه خودکار با XNA3 در VS اضافه میشود.
کد:
File->New->Project->VB.Net->XNA Game Studio 3.1->Platformer Starter Kit (3.1)
- البته باید در دیالگوی که باز میشود ورژن Framework3.5 را انتخاب کنید تا پروژه نمایان شود.
===== شروع برای VB.Net
سورس تبدیل شده پروژه فوق به VB.Net را میتوانید از لینک زیر دانلود کنید:
rapidshare.com/files/258892639/XNA3.1_VB9.0_Platformer.rar
این پک حدود 9 مگ است و کامل و آماده کامپایل و اجرا است.
برای افرادی که میخواهند سورس VB را هم ببینند ولی دانلود 9 مگ برایشان سخت است، فایل دیتا را حذف کرده ام، که باید آن را از یک پروژه C#-Platformer مجدد کپی کنند، در عوض حجم به حدود 190 کیلو بایت رسیده.
حتماً قبل از اجرای این پروزه بدون فایلهای دیتا فایل توضیحی Help_ReadMe را به دقت خوانده و عمل کنید.
rapidshare.com/files/258987753/XNA3.1_VB9.0_Platformer_Small.rar
==============
کمی لذت ببرید!
بیان استانداردها و قرار داد های من و شما و XNA !
سلام
لطفاً حتماً بخوانید تا بعداً مباحث برایتان مبهم و گیج کننده نشود و سوالی پیش نیاید ...
اکثریت کدهای XNA که خواهید یافت برای سادگی و کم کردن تایپ namespace ها را import و دیگر از تایپ انها خودداری کرده اند ...
ولی من شخصاً نمیتوانم با حذف namespace کنار بیایم و از این کار بشدت بدم می اید !!!
مثلاً شاید در جایی شما کدهای این تیپی زیاد ببینید ...
کد:
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;
namespace WindowsGame1
{
class Game1 : Game
{
GraphicsDeviceManager m_Graphics;
ولی من شخصاً کد زیر را ترجیح میدهم! هر چند کدنویسی بیشتری داشته باشد.
کد:
using System;
namespace WindowsGame1
{
publicclass Game1 : Microsoft.Xna.Framework.Game
{
private Microsoft.Xna.Framework.GraphicsDeviceManager m_Graphics;
و اما راه حلی که نه زیاد تایپ بخواهد و نه namespace را حذف کند (و من هنگ کنم!):
کد:
//C#.Net
using System;
using XNA = Microsoft.Xna.Framework;
namespace WindowsGame1
{
publicclass Game1 : XNA.Game
{
private XNA.GraphicsDeviceManager m_Graphics;
'VB.Net
Imports System
Imports XNA = Microsoft.Xna.Framework
Namespace WindowsGame1
Public Class Game1
Inherits XNA.Game
Private m_Graphics As XNA.GraphicsDeviceManager
همانطور که بهتر از من میدانید ...
این سینتکس نام درج عبارت XNA را برابر فضای Microsoft.Xna.Framework قرار خواهد داد.
هم تایپ کمی دارد و هم namespcae حذف نشده و تعلق کلاس کاملاً مشخص است.
این سینتکس را در کل این تاپیک هم حفظ خواهم کرد
و اگر مثلاً جایی گفتیم کلاس XNA.Graphics.Texture2D
منظور کلاس Microsoft.Xna.Framework.Graphics.Texture2D خواهد بود.
امیدوارم دوستان این پست را به دقت خوانده باشند و مطمئن باشند که متوجه مطلب شده اند.
==============
نقل قول:
نوشته شده توسط mohsen_3
اقا می شه یکم در مورد ساخت بازی های تحت شبکه با Xna توضیح و اموزش بدید
این بحث و چند بحث دیگر به علت آنکه تاپیک آموزش مقدماتی است، جزء "هدف " تاپیک نبوده، حالا اجازه دهید به اهداف مشخص شده برسیم و چیزهایی روی مانیتور بیاید، سپس اگر شد به مباحث پیشرفته تر هم خواهیم پرداخت.
نقل قول:
نوشته شده توسط test84
رو لطفا برای دانلود دوباره لینک بدین
من جملات بعدی تان را درست متوجه نشدم،ولی به نظر میرسد لینک شکسته و دیگر صحیح نیست.
چشم یک جستجویی میکنم، با پست بعدی لینک جدید خواهم گذاشت.
خوب از پست بعدی مطالب آموزشی شروع خواهد شد که انشا ا... با صبر دوستان به نتیجه خواهد رسید!
(هم باید بر روی مسائل فکر شود و هم بعضاً اشکالی مناسب برای فهم مطالب تهیه شود ... ولی انشاا... به مرور زمان و با کمک دوستان "اهداف" را تامین خواهیم کرد.
آشنایی با موقعیتهای فضایی و بردارهای اصلی جهت در XNA و DirectX
سلام
همانطور که میدانید در فضا و محیط نمایشی سه بعد داریم که این ابعاد به صورت پیشفرض چیدمانی طبق شکل زیر دارند:
یعنی اگر روبروی مانیتور باشید بردار X در جهت راست و بردار Y در بالا Z مثل یک پیکان از سمت مانیتور به سمت شما بیرون امده (حواستان باشد زخمی نشوید!!!)
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
مثلاً با کم کردن Z یک شی سه بعدی میتوانید آن را از دوربین دور کرده و به عمق ببرید.
نکته بسیار مهم ان است که دید شما از این جهت وابستگی مستقیم به محل و هدف و زاویه دوربین دارد!
یعنی شما منظره خود را درون مانیتور از با توجه به محل جاری دوربین + محلی که دوربین به آن نگاه میکند + زاویه دوربین خواهید دید!
تصور کنید، دوربین بالای محور Y است و به سمت پایین نگاه میکند ...
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
فکر کنید ...چه خواهید؟ با تغییر X و Y و Z اشیای موجود در صحنه، اشیا به کدام سمت مانیتور خواهند رفت؟
مشخص است در این حالت Y است که از مانیتور بیرون زده و مثلاً با کم و زیاد کردن Y یک شی، ان شی به عمق رفته و یا به دوربین نزدیک تر و بزرگتر میشود!
(یعنی درست برخلاف گفته قبلی من)
پس جهت در فضا نسبی است و چیز مطلقی وجود ندارد ...
یعنی شما باید بتواند بجز دید دوربین که روی مانیتور خواهد بود، یک دید جهانی هم داشته باشد، که از آن منظر در ذهن خود بتوانید خود دوربین را هم ببینید ...
دوربین میتواند در هر جایی در فضا باشد و اصلاً هم نیاز نیست روی یکی از محور های اصلی و به سمت انها باشد ...
هرجایی باشد و به هر سمتی نگاه کند!
پس در عمل نمیتوان گفت سمت راست مانیتور فلان محور است و سمت بالا ان یکی محور است!
شما باید برای کنترل و حرکت دوربین به سمت راست و چپش به جای کم و زیاد کردن مستقیم X و Y و Z آن، محاسبات برداری انجام دهید و گرنه با کنترل دوربین به شدت مشکل خواهید داشت ...
در زمان مناسب یک پست اختصاصی در خصوص پارامترها (13 عدد تاثیر گذار بر دید) و کنترل دوربین در فضای سه بعدی خواهیم داشت.
=====
در این میان یک قانون ریاضی به نام "قانون و روش دست راست" وجود دارد که در محاسبات ریاضی خیلی به کار می آید و کمک میکند.
این روش به راحتی میتواند در شرایط خاص برای سه بردار در سه جهت و تشخیص سمت بردار سوم استفاده شود.
برای اینکار باید دست را صاف در راستای بردار اول گرفت طوری که انگشتان بتوانند به سمت جهت بردار دوم خم شوند، در این حالت انگشت شست جهت بردار نتیجه و سومی را (حاصل ضرب خارجی بردار اول در دوم) نشان خواهد داد.
در جایی که میتوان جهت برداری را به کمک دو بردار دیگر به دست اورد، این مطلب بیان خواهد شد و فعلاً باید اصول این کار را بلد باشید.
همانطور که در شکل زیر میبینید ...
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
دست در راستای محور X است و انگشتان در راستای محور Y و نتیجه انکه انگشت شست جهت بردار Z را نشان خواهد داد از آزمایش فوق حداقل حداقل خواهیم فهمید که ....
جهت و سمت ضرب خارجی بردار X در بردار Y برابر خواهد بود با جهت و سمت بردار Z
جهت و سمت ضرب خارجی بردار Y در بردار X برابر خواهد بود با عکس جهت و سمت بردار Z
در زمان مناسب یک پست اختصاصی در خصوص مباحث ریاضی و هندسه سه بعدی خواهیم داشت.
(فعلاً بد نیست سعی کنید و این روش را حداقل با خود سه بردار اصلی و ترکیبهای مختلف امتحان کنید)
=====
یک سری تصاویر دو بعدی هم دارید که بعضاً روی مانیتور شناور خواهند بود و تغییر دوربین روی انها اثری ندارد.
از جمله این ترسیمات دو بعدی میتواند به پنل های کنترلری بازی ها در اطرف صحنه اصلی اشاره کرد، مثل نمایش میزان تیرها و نمایش نقشه و...
برای ترسیمات دوبعدی XNA که در عمق قرار نمیگیرند و روی کار نهایی شما شناور خواهند بود محورهای مختصات مطابق شکل زیر خواهند بود:
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
مثلاً با زیاد کردن X یک تصویر شناور دو بعدی، آن تصویر به سمت راست مانیتور حرکت خواهد کرد.
نکته مهم ان است که این تصاویر روی صفحه مانتیور شناور هستند و وابسته به محل و جهت دید دوربین نیستند، مثل یک برچسب که روی لنز دوربین چسبانده باشند!
=====
البته میتوان تصاویر را وابسته به موقعیت دوربین هم کرد و از آنها برای پوشاندن کف و دیوار و آسمان و... استفاده که در این حالت موقعیت راسهای محل نمایش در مختصات فضایی سه بعدی سنجیده خواهد شد ولی چیدمان تصاویر پوشانده شده روی صفحه ای مثلث یا مستطیلی که حضور دارند یک دستگاه دو بعدی خواهد بود که انشا ا... در جای مناسب بحث خواهد شد.
==============
نقل قول:
نوشته شده توسط _H2_
چشم یک جستجویی میکنم، با پست بعدی لینک جدید خواهم گذاشت.
متاسفم، شرمنده، تقریباً بهترین کلمات و فیلترها را در گوگل استفاده کردم و تمام نتایج را بررسی کردم ولی متاسسفانه لینکی پیدا نکردم.
شاید چند ماه دیگر چند لینک دانلود پیدا شود.
سرعت و بازدهی کدهای مختلف 1
سلام
این مسئله بسیار مهم است ولی واقعاً یک پست برای آن کافی نیست و به همین دلیل هم اصلاً نمیخواستم وارد این بحث شوم...
ولی با پیشنهاد یکی از دوستان و توجه به این نکته که تعداد زیادی از افراد ا سرعت و بازدهی کدهای خودشان در XNA مشکل دارند، تصمیم گرفتم هر چند ناقص حداقل یک پست را به این مطلب اختصاص دهم.
اول لازم میدانم متذکر شوم که رعایت اصول بازدهی و سرعت در برنامه های سه بعدی بسیار بسیار مهم تر از هر محیط دیگری است، چون برنامه در یک حلقه بینهایت با یک تعداد مشخص فریم در ثانیه (مثلاً حدود 60 فریم در ثانیه) تمام عملیات های لازم را مجدداً انجام میدهد و با توجه به تعداد اشیای در صحنه و تعداد مثلث های مصرف شده و... خود برنامه شما و نیز هسته DirectX و کارت گرافیکی باید حجم زیادی از اعمال را انجام دهد و کوچکترین بیدقتی پردازشی میتواند تاثیرات مخربی در سرعت و بازدهی عمومی برنامه بگذارد.
نکته بعدی آنجا است که شما همواره هم باید مراقب کد نویسی مستقیم خودتان باشد و هم کدنویسی داخلی ناپیدا توابع آماده.
در صورت رعایت صحیح نکات و کدنویسی خوب با XNA میتواند به حدود 70 درصد سرعت برنامه های سه بعدی VC++,DirectX برسید که سرعت و بازدهی مناسبی است به سادگی و سرعت تولید محصول XNA و زبانهای VB.Net و C#.Net در مقابل ++VC و DirectX می صرفه!
اصلی ترین موارد کاهش سرعت و بازدهی به ترتیب چنین هستند:
==============
----- رابطه خصاصت و تنبلی و تعریف متغییر !
=====
اصولا مسئله این است که کار باید انجام شود و کسی نمیگوید که دستور باید حذف شود ولی باید از تکرار عملیتهای موازی و مشابه جلوگیری کرد و حاصل انجام یک عملیت را بارها مورد استفاده قرار داد و مجدد بار تولید ان نتیجه را به برنامه تحمیل نکرد.
ساده ترین کدهای خصاصت میتواند چیزهایی شبیه این باشد ...
کد:
کد اشتباه
//C#.Net
a = x * y + z / 2 * w + 25 + f;
b = x * y + z / 2 * w + 13 + e;
//VB.Net
a = x * y + z / 2 * w + 25 + f
b = x * y + z / 2 * w + 13 + e
کد:
کد صحیح
//C#.Net
t = x * y + z / 2 * w;
a = t + 25 + f;
b = t + 13 + e;
//VB.Net
t = x * y + z / 2 * w
a = t + 25 + f
b = t + 13 + e
=====
موارد بدتر و وحشتناک تر میتواند چنین باشد:
کد:
کد اشتباه
//C#.Net
a = Function1(collection["ItemName"]);
b = Function2(collection["ItemName"]);
//VB.Net
a = Function1(collection("ItemName"))
b = Function2(collection("ItemName"))
کد:
کد صحیح
//C#.Net
t = collection["ItemName"];
a = Function1(t);
b = Function2(t);
//VB.Net
t = collection("ItemName")
a = Function1(t)
b = Function2(t)
دقت کنید که ارجاع به یک آیم مجموعه یک خط دستور ساده نیست ...
مواردی کلید String و بیشتر تایپ های دیگر را دارند در ذات دو حلقله for تو در توی سنگین را به برنامه شما تحمیل میکنند ...
حلقه اول تک تک عناصر مجموعه کلید را با کلید داده شده شما چک میکند تا عنصر دلخواه شما را پیدا کند و حلقه دوم که کمتر به آن دقت و توجه میشود حلقه ای است که تک تک کاراکترهای دو String را با هم مقایسه میکند تا بفهمد دو String برابر هستند یا خیر ...
در واقع دسترسی به عناصر یک مجموعه معمولاً یک اسکن حجیم را به سیستم تحمیل میکند تا عنصر مورد نظر پیدا شود.
در مواردی که این مجموعه ثابت است بهتر است اشاره گر عنصر مربوطه فقط و فقط یک بار در برنامه به دست آورده و در متغییری محلی در سطح کلاس ذخیره کنید.
کد:
کد اشتباه
//C#.Net
public class Class1
: XNA.Game
{
private XNA.Graphics.Effect m_Effect;
protected override void LoadContent()
{
var content = this.Content;
this.m_Effect = content.Load<XNA.Graphics.Effect>("...");
}
protected override void Update(XNA.GameTime gameTime)
{
value = ...;
this.m_Effect.Parameters["Name"].SetValue(value);
}
//VB.Net
Public Class Class1
Private m_Effect As XNA.Graphics.Effect
Protected Overrides Sub LoadContent()
Dim content = Me.Content
Me.m_Effect = content.Load(Of XNA.Graphics.Effect)("...")
End Sub
Protected Overrides Sub Update(ByVal gameTime As XNA.GameTime)
value = ...
Me.m_Effect.Parameters("Name").SetValue(value)
End Sub
کد:
کد صحیح
//C#.Net
public class Class1
: XNA.Game
{
private XNA.Graphics.Effect m_Effect;
private XNA.Graphics.EffectParameter m_Effect_Name;
protected override void LoadContent()
{
var content = this.Content;
this.m_Effect = content.Load<XNA.Graphics.Effect>("...");
this.m_Effect_Name = this.m_Effect.Parameters["Name"];
}
protected override void Update(XNA.GameTime gameTime)
{
value = ...;
this.m_Effect_Name.SetValue(value);
}
//VB.Net
Public Class Class1
Private m_Effect As XNA.Graphics.Effect
Private m_Effect_Name As XNA.Graphics.EffectParameter
Protected Overrides Sub LoadContent()
Dim content = Me.Content
Me.m_Effect = content.Load(Of XNA.Graphics.Effect)("...")
Me.m_Effect_Name = Me.m_Effect.Parameters("Name")
End Sub
Protected Overrides Sub Update(ByVal gameTime As XNA.GameTime)
value = ...
Me.m_Effect_Name.SetValue(value)
End Sub
=====
نوع دیگری از مسئله فوق خود را در حلقه های for و while و... آشکار و پنهان نشان میدهد ...
دستوری که در داخل حلقه نوشته میشود یک خط نیست، به معنای انکه شاید به نظر شما یک خط باشد ولی اگر حلقه 100 بار تکرار شود آن یک خط شما 100 بار اجرا میشود و معادل 100 خط کدنویسی فشار به برنامه تحمیل میکند.
حلقه های آشکار for و while هستند که ما داریم و حلقه های پنهان جایی هستند که ما نمیبینیم مثل حلقه for ای که یک مجموعه را برای پیدا کردن عنصری جستجو میکند یا حلقه while که Game.Update کد قبلی را مدام و تا انتهای برنامه اجرا میکند.
شما اگر یک عملیات و یک خط کد را از داخل حلقه ای کم کنید و در عوضش مجبور شویبد 10 یا 20 خط کد خارج آن حلقه اضافه کنید (تا آن یک خط داخل حلقه کم شود) باز هم سود کرده اید !!!
چون یک خط داخل حلقه با 100 بار معادل 100 خط کد نویسی را به برنامه تحمیل میکند و در حالی 10 یا 20 خط خارج حلقه همان 10 یا 20 خط است.
مثال قبلی هم در مبحث گفتاری الآن میگنجد ...
در مثال قبلی هم ما با یک تعریف متغییر کد جستجوی یک مجموعه را از متد مادام الاجرای Game.Update به متد یکبار اجرا شوند Game.LoadContent منتقل کردیم و جالب آنکه دیگر بحث حلقه 100 یا 200 دوری نیست! متد Game.Update نزدیک 60 بار فقط در هر یک ثانیه میتواند اجرا شود (کری به دقیقهع و ساعت نداریم) و یک عملیات کمتر ما نتیجه 60 عملیات کمتر در هر ثانیه را بر عهده دارد.
(بگذریم که خود جستجو در یک مجموعه برای یافتن یک عنصر هم همانطور که قبلاً بیان شد یک عملیات ساده نیست و خودش دو تا حلقه تو در تو است!!!)
به علت حجم زیاد نوشته ها مبحث "سرعت و بازدهی کدهای مختلف" در پست بعدی و انشا ا... قبل از 24 ساعت باز مطالب ادامه می یابد ...
(خیلی سعی کردم zip کنم ولی این مبحث را هر جور zip میکنی بازم بیرون میزنه!)
==============
نقل قول:
نوشته شده توسط pishi0014
ولی فکر کنم z محور بالایی باشه و y سمت چپی
طبق مستندات، سیستم مختصاتی XNA همان است که در پست قبلی درج شد.
کد:
XNA uses a right-handed coordinate system, which means that when you’re looking at the origin from a traditional angle where X moves positively to the right and Y moves positively upward, Z moves positively toward you.
میتوانید برای اطلاعات بیشتر به منابع آنلاین معتبر معرفی شده در پست 8 زیر مراجه کنید و اگر احیاناً مطلب قابل توجهی پیدا کردید منتشر کنید.
مجدداً تاکید میکنم که دید شما روی صفحه مانیتور وابسته به موقعیت فعلی خود دوربین (و 13 پارامتر ان) در مختصات جهانی XNA میباشد.