aloneinthedark در حال رشد
تاريخ عضويت: 2 شنبه 20 مهر 1383 تعداد ارسالها: 37 محل سكونت: كرج
1 شنبه 20 فروردين 1385 - 21:55 |
|
|
براي ايجاد تير يا گلوله در زمان اجرا :
مثلا ميخواهيم در زمان اجرا براي يك تفنگ تير بسازيم كه هم شليك بشه و هم پس از برخورد
به در و ديوار عكسل العمل داشته باشه
يه نكته اينه كه تير بايد در نوك لوله تفنگ ايجاد بشه وگرنه مثلا اگر داخل تقنگ ايجاد بشه تو تفنگ گير ميكنه
براي اينكه مكان نوك لوله رو داشته باشيم از دستور زير استفاده ميكنيم
;(vec_for_vertex (vector, entity, number
اين دستور مختصات vertex با شماره number كه متعلق به entity است رو در بردار vector
قرار مي دهد
براي به دست آوردن شماره vertex در vertex ,med مورد نظر رو انتخاب كرده و در نوار وضعيت
شمارهvertex رو ببينيد
برنامه ز ير با فشردن كليد a يك تير ايجاد كرده كه پس از برخورد به block يا entity در اون مكان ذراتي ايجاد ميشه
وقتي كليد a را فشار داديم ممكن دستور ايجاد تير مثلا 5 بار اجرا بشه و 5 تير پشت سر هم ايجاد بشه كه اين مطلوب نيست
براي جلوگيري از اين عمل تير در هر نيم ثانيه ايجاد ميشه كه براي داشتن زمان گذشته
از متغيير از پيش تعريف total_secs استفاده ميكنيم
كد:
///////////////////////////////////////////particle_arrow
Function P_arrow_spec_fun()
{
my.alpha -= 4*time;
IF(My.alpha <= 0) { my.alpha = 0; my.lifespan = 0; }
}
Function P_arrowspezial()
{
my.red = 128 ;
my.green = 128 ;
my.blue = 64 ;
my.bmap = null;
my.vel_x = random( 4 ) - 2 ;
my.vel_y = random( 4 ) - 2 ;
my.vel_z = random( 4 ) - 2 ;
my.size = 10 ;
my.alpha = 60 ;
my.gravity = 0 ;
my.streak = off;
my.flare = on;
my.bright = on;
my.beam = on;
my.move = on;
my.transparent = on;
my.function = P_arrow_spec_fun;
}
///////////////////////////////////////////endof particle_arrow
var vec_pos_p_arrow[3];
function arrow_event
{
if((event_type==event_block)||(event_entity))
{
vec_set(vec_pos_p_arrow.x,my.x)
effect(P_arrowspezial,1,vec_pos_p_arrow.x,nullvector);
my.event = null;
ent_remove(my);
}
}
action shoot_arrow
{
my.pan = you.pan;
my.event = arrow_event;
my.enable_block = on;
my.enable_entity = on;
arrow_time = total_secs;
while(my)
{
ent_move(vector(80*time,0,0),nullvector);
wait(1);
}
}
////////////////////////////////
var arrow_time;
entity* arrow;
action player
{
var vec_arrow_pos[3];
while(1)
{
if((key_a)&&((arrow_time+0.5)<=total_secs))
{
vec_for_vertex(vec_arrow_pos.x,my,vertexnumber);
arrow = ent_create("filename",vec_arrow_pos,act_arrow);
}
wait(1);
}
} |
|
|