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





صفحه اول انجمنها -> ساخت بازی با نرم افزار 3D Game Studio -> دو سوال : 1)جاذبه طبيعي 2)تغيير x,y با توجه به ميزان Pan
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي

دو سوال : 1)جاذبه طبيعي 2)تغيير x,y
نويسنده
پيغام
شهروز
مدیر انجمن
مدیر انجمن


تاريخ عضويت: جمعه 16 مرداد 1383
تعداد ارسالها: 3279
محل سكونت: Germany


جمعه 21 بهمن 1384 - 20:47
پاسخ بصورت نقل قول
دوستان اگر لطف کنند و جواب این دو سوال را بدهند ، کمک بزرگی کرده اند :


1) طریقه ساخت جاذبه ای که در زمینهای ناهموار ، کراکتر بتواند از روی زمین به راحتی عبور کند.

2) طریقه حرکت دادن کراکتر به نحوی که با تغییر Pan ، میزان x,y به طور مناسب تغيير كند تا دقيقا به جهت Pan حركت كند.


با تشكر.

_________________




استدیوی نرم افزاری بلوبالک
www.Bluebulk.info
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر
 

نويسنده
پيغام
مهمان







1 شنبه 23 بهمن 1384 - 11:24
پاسخ بصورت نقل قول
نقل قول:

2) طریقه حرکت دادن کراکتر به نحوی که با تغییر Pan ، میزان x,y به طور مناسب تغيير كند تا دقيقا به جهت Pan حركت كند.



while (1)
{
player.pan -= 10 * mouse_force.x * time - 1.5 * (key_a - key_d);
camera.x = player.x - camera_distance * cos(player.pan);
camera.y = player.y - camera_distance * sin(player.pan);
camera.z = player.z + camera_height + 0.8 * sin(my.skill46 * 3.6);
camera.pan = player.pan;
camera.tilt += 7 * mouse_force.y * time;
camera_distance = min (max (camera_distance, 5), 500);
if (key_w + key_s > 0)
{
ent_cycle("walk", my.skill46);
my.skill46 += 10 * (1 + key_shift * 0.5) * time;
my.skill46 %= 100;
}
else
{
ent_cycle("stand", my.skill48);
my.skill48 += 2 * time;
my.skill48 %= 100;
}

موفق باشی : ستاره
ارسال  بازگشت به بالا
 

--
نويسنده
پيغام
شهروز
مدیر انجمن
مدیر انجمن


تاريخ عضويت: جمعه 16 مرداد 1383
تعداد ارسالها: 3279
محل سكونت: Germany


1 شنبه 23 بهمن 1384 - 18:32
پاسخ بصورت نقل قول
خيلي ممنون.
ميشه يك توضيح كوتاه در موردش بديد.
در ضمن پارامترهاي camera_distance و camera_height را نمي شناسد.

با تشكر.

_________________




استدیوی نرم افزاری بلوبالک
www.Bluebulk.info
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر
 

نويسنده
پيغام
مهمان







1 شنبه 23 بهمن 1384 - 23:22
پاسخ بصورت نقل قول
نقل قول:

در ضمن پارامترهاي camera_distance و camera_height را نمي شناسد.


وای ! منو ببخش شهروز جان ! در این مورد کوتاهی کردم . ببین ، این دو در واقع دو متغیر هستند که گام حرکتی دوربین را همراه با بازیگر تعیین میکنند . ( اگر اشتباه نکنم)

میتونی این متغیر ها را قبل از اجرای حلقه While تعریف و مقدار دهی کنی . مثلا :

camera_distance = player.skill40;
camera_height = player.skill41;

while (1)
{
player.pan -= 10 * mouse_force.x * time - 1.5 * (key_a - key_d);
camera.x = player.x - camera_distance * cos(player.pan

....

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

این کد ها در واقع قسمتی از یک مثال در مورد ساخت بازیگر و دوربین همراه آن در یکی از مجلات سایت www.3dgamestudio.com بود که من در زیر کد های کامل آنرا برات مینویسم تا بصورت صحیح و کامل آن را تست کنی :

function main()
{
fps_max = 60;
on_f2 = null;
on_f4 = null;
on_f5 = null;
on_f6 = null;
on_f7 = null;
on_f8 = null;
on_f9 = null;
on_f10 = null;
on_f11 = null;
on_f12 = null;
level_load (level1_wmb);
wait (3);
mouse_map = pointer_pcx;
while (1)
{
if (key_space == on)
{
mouse_mode = 2;
}
else
{
mouse_mode = 0;
}
mouse_pos.x = pointer.x;
mouse_pos.y = pointer.y;
wait (1);
}
}

action player1
{
player = my;
my.x = -2700;
my.y = -2500;
my.z = -2000;
my.pan = 160;
my.transparent = on;
my.alpha = 100;
my.skill40 = camera_distance;
my.skill41 = camera_height;
camera_mode = 3;

while (1)
{
player.pan -= 10 * mouse_force.x * time - 1.5 * (key_a - key_d);
camera.x = player.x - camera_distance * cos(player.pan);
camera.y = player.y - camera_distance * sin(player.pan);
camera.z = player.z + camera_height + 0.8 * sin(my.skill46 * 3.6);
camera.pan = player.pan;
camera.tilt += 7 * mouse_force.y * time;
camera_distance = min (max (camera_distance, 5), 500);
if (key_w + key_s > 0)
{
ent_cycle("walk", my.skill46);
my.skill46 += 10 * (1 + key_shift * 0.5) * time;
my.skill46 %= 100;
}
else
{
ent_cycle("stand", my.skill48);
my.skill48 += 2 * time;
my.skill48 %= 100;
}

if (camera_mode == 3)
{
avoid_obstacles();
}
vec_set (temp, my.x);
temp.z -= 10000;
trace_mode = ignore_me + ignore_passable + use_box;
temp.z = -trace (my.x, temp);
temp.x = 10 * (key_w - key_s) * (1 + 1 * key_shift) * time;
temp.y = 0;
my.skill47 += ent_move (temp, nullvector);
if (my.skill47 > 50)
{
snd_play(step_wav, 30, 0);
my.skill47 = 0;
}
wait (1);
}
}

function avoid_obstacles()
{
trace_mode = ignore_me + ignore_passable;
vec_set (temporary_distance.x, camera.x);
temporary_distance.z -= 50; // 50 = experimental value
distance_traced = trace (player.x, temporary_distance.x); // trace between the player and temporary_distance
if (distance_traced == 0) // no obstacles on the way?
{
my.alpha = min (100, my.alpha + 3 * time); // then increase player's alpha up to 100
if (camera_distance < my.skill40) // if the camera got closer to the player
{
camera_distance += 1; // restore the initial camera_distance slowly
}
}
else // obstacles encountered?
{
distance_traced -= 2; // then bring the camera 2 quants closer to the player!
my.alpha = (distance_traced / (my.skill40 + 1)) * 100; // decrease player's alpha; don't allow a division by zero
camera.x = player.x - distance_traced * cos(camera.pan); // place the camera behind the player
camera.y = player.y - distance_traced * sin(camera.pan); // at the new distance given by distance_traced
}
}

function first_person_camera() // press "F1" to run this function
{
camera_distance = 0; // place the camera at player's position
camera_height = 20; // play with this value
player.invisible = on; // make the player model invisible
camera_mode = 1; // set the camera_mode variable to 1st person
}

function third_person_camera() // press "F3" to run this function
{
camera_distance = player.skill40; // restore the distance from the player to the camera
camera_height = player.skill41; // as well as its height
player.invisible = off; // and show the player
camera_mode = 3; // set the camera_mode variable to 3rd person
}

on_f1 = first_person_camera;
on_f3 = third_person_camera;

sky level1_cube
{
type = <free2+6.tga>;
z = 100;
layer = 20;
flags = cube, visible;
}



مطمئن هستم این کد ها آنقدر با ارزش هستند که آنها را تست کنی . فقط چند نکته :

ممکن است اسکریپت برای اجرای خود به مدل ها و تصاویر گرافیکی نیاز داشته باشد که طبق کد ، مدل ها و تصاویر را Rename کن و در شاخه ای که اسکریپت را اجرا میکنی قرار بده . مدل سرباز که فکر کنم همه آنرا داشته باشند . همچنین به اسکریپت کوچک Sky دقت کن که چقدر ساده ، یک تصویر را به آسمان تبدیل میکند . واقعا زیباست ...

پیروز و موفق باشی : ستاره Idea Idea
ارسال  بازگشت به بالا
 

--
نويسنده
پيغام
شهروز
مدیر انجمن
مدیر انجمن


تاريخ عضويت: جمعه 16 مرداد 1383
تعداد ارسالها: 3279
محل سكونت: Germany


2 شنبه 24 بهمن 1384 - 18:58
پاسخ بصورت نقل قول
خيلي ممنون.
درست شد.

_________________




استدیوی نرم افزاری بلوبالک
www.Bluebulk.info
ارسال  بازگشت به بالا
ديدن مشخصات كاربر ارسال پيغام خصوصي ديدن وب سايت كاربر
 

نويسنده
پيغام
مهمان







2 شنبه 24 بهمن 1384 - 19:41
پاسخ بصورت نقل قول
خوشحالم ! همیشه موفق باشی

ستاره
ارسال  بازگشت به بالا
 

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


 
پرش به:  


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


unity3d

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