|
دو سوال : 1)جاذبه طبيعي 2)تغيير x,y
|
|
|
--
|
|
|
|
|
|
|
|
نويسنده |
پيغام |
مهمان
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 دقت کن که چقدر ساده ، یک تصویر را به آسمان تبدیل میکند . واقعا زیباست ...
پیروز و موفق باشی : ستاره |
|
|
بازگشت به بالا |
|
|
|
|
|
--
|
|
|
صفحه 1 از 1 |
تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد
|
|
شما نمي توانيد در اين انجمن نامه ارسال كنيد. شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد
|
|
|