Создание автомобиля с механической коробки передач 1)Создаём объект o_car, объект здания (или забор), и объект АЗС. В событии Create записываем следующий код: Code globalvar ntr; //количество закиси азота ntr=100; globalvar spd; //скорость в км/ч globalvar tah; //обороты двигателя tah=0; globalvar kpp; //номер передачи kpp=0; globalvar prb; //пробег globalvar bnz; //топливо bnz=10 globalvar money; //деньги money=1250; //Скорость spm[0]=-12 //максимальная скорость при задней передаче равна -12 spm[1]=0 spm[2]=12 //максимальная скорость при первой передаче равна 12 spm[3]=20 spm[4]=26 spm[5]=32 //Ускорение acc[0]=-0.2 acc[1]=0 acc[2]=0.2 acc[3]=0.15 acc[4]=0.13 acc[5]=0.1 //Коэффициент оборотов tahk[0]=-7.08 tahk[1]=0 tahk[2]=7.08 tahk[3]=4.25 tahk[4]=3.27 tahk[5]=2.65 Это будет некоторая быза данных. В событии Step: Code image_angle=direction; //поворот спрайта friction=0.05; //трение spd=speed*5; if !kpp=0 tah=speed*tahk[kpp+1]//обороты двигателя if kpp=0 and tah>0 tah-=1; if speed>0 prb+=speed/20250 else prb-=speed/20250; //высчитываем пробег if ntr<100 ntr+=0.05; //восстановление нитро со временем if keyboard_check(vk_up) and bnz>0 { if speed>0 bnz-=speed/202500 else bnz-=speed/202500; //расход топлива } Далее в событии нажатия клавиш: <Up> Code if bnz>0 /*если есть топливо*/{ if kpp>0/*если передача больше 0*/{ if speed<spm[kpp+1] speed+=acc[kpp+1]}//разгоняемся if kpp=-1/*если включена задняя передача*/{ if speed>spm[kpp+1] speed+=acc[kpp+1]} instance_create(x,y,o_smoke);//из трубы идёт дым if kpp=0 and tah<80 tah+=5//если включена нейтральная передача, то увеличиваются обороты двигателя } <Down> Code if speed>0 speed-=0.5; //тормозим if speed<0 speed+=0.5; //тормозим if not speed=0 instance_create(x,y,o_sledy) //если автомобиль движется, то оставляем следы <Left> Code if spd>-20 and spd<20 direction+=spd/5 else direction+=4; //поворачиваем влево speed*=0.9925; //скорость уменьшается if spd>60 instance_create(x,y,o_sledy); //оставляем следы <Right> Code if spd>-20 and spd<20 direction-=spd/5 else direction-=4; //поворачиваем вправо speed*=0.9925; //скорость уменьшается if spd>60 instance_create(x,y,o_sledy); //оставляем следы <Space> Code if keyboard_check(vk_up) and ntr>0 and kpp>0 /*если нажата клавша <Up>, есть нитро и передача выше 0*/{ speed+=0.2;//увеличивается скорость ntr-=1; //нитро уменьшается instance_create(x,y,o_nitro) //из трубы выходит сине-жёлтый дым } press <Shift> Code if kpp<4 kpp+=1; //переключаемся на повышенную передачу press <Ctrl> Code if kpp<4 kpp+=1; //переключаемся на повышенную передачу В событии столкновения с заправкой: Code if speed=0 and bnz<50 and money>0 /*если машина стоит, бак не полный и есть деньги*/ { bnz+=0.1 money-=2.5}; //заправляемся И в событии столкновения со зданием или другим твёрдым объектом: Code //столкновение с твёрдым объектом x=xprevious y=yprevious speed=-(speed/2) Машина у нас готова =) 2)Создаём объекты o_sledy, o_smoke, o_nitro (следы, дым, дым от нитро) В o_sledy: В событии Create: Code image_angle=o_car.direction //направление спрайта следов timer=0 В событии Step: Code timer+=1 if timer=100 {instance_destroy()} //время жизни следов В o_smoke и o_nitro: В Create: Code image_angle=o_car.direction direction=o_car.direction speed=spd/5-1; //скорость дыма tmr=0 В Step Code direction=o_car.direction tmr+=1 if tmr>25 instance_destroy() //время жизни дыма 3)Создаём объекты: o_hud, o_arrows, o_kpp. В событии Draw пишем: В o_hud: Code draw_sprite(s_speedometr,-1,view_xview+800,view_yview+600); //рисуем спидометр draw_text_color(view_xview+670,view_yview+530,prb,c_white,c_white,c_white,c_white,1); //пробег draw_text_color(view_xview+10,view_yview+10,money,c_white,c_white,c_white,c_white,1); //деньги draw_text_color(view_xview+60,view_yview+10,'RUB',c_white,c_white,c_white,c_white,1); draw_rectangle_color(view_xview+10,view_yview+590,view_xview+40,view_yview+590-ntr,c_blue,c_aqua,c_blue,c_navy,false); //нитро В o_arrows: Code if spd>0 draw_sprite_ext(s_arrow,-1,view_xview+680,view_yview+560,1,1,13-spd*1.3,c_red,1) else draw_sprite_ext(s_arrow,-1,view_xview+680,view_yview+560,1,1,13+spd*1.3,c_red,1);//стрелка спидометра draw_sprite_ext(s_arrow,-1,view_xview+560,view_yview+560,1,1,13-tah*1.3,c_red,1); //тахометра draw_sprite_ext(s_arrow,-1,view_xview+380,view_yview+584,0.3,1,-bnz*3.6,c_red,1); //и уровня топлива if bnz<5 draw_sprite(s_lamp,-1,view_xview+408,view_yview+552); //если топлива меньше 5 литров, светится лампочка В o_kpp: Code draw_sprite(s_kpp,kpp+1,view_xview+720,view_yview+550); //рисуем номер передачи Чтобы это код работал, у вас должен быть спрайт s_kpp: Вот и всё! Пример |