Название: Обучение Extreme Physics. Второй Урок. Отправлено: lucheus от Март 27, 2012, 09:42:16 Обучение Extreme Physics. Второй урок
Перед этим уроком вам следует прочитать первый (http://forum.hellroom.ru/index.php?topic=9180.msg98683#msg98683) Вообще-то в этом уроке должно быть гораздо больше чем написано. К большому сожалению потерял первую часть урока, где рассказывал про формы (shape), так что пока расскажу про то как сделать хватающиеся кубики. Итак, как и раньше Добавить ресурс => Определить константы Имя: usedebugdraw Переменная: true Имя: collide1a Переменная: 1 Имя: collide1b Переменная: 1 Теперь создаем обьект system и комнату. Что бы не забыть сразу помещаем его туда и в нем Код: (create) global.world = ep_world_create(); // Мир ep_world_set_settings(global.world,1,30,20,0.1,0.5,0.002,0.6,0.8); // Настройки ep_world_set_sleeping(global.world,true,60,0,0.01,0.001)// Спять mousebody = ep_body_create_static(global.world); // Исскуственный обьект на мышке mousehingejoint = -1;// Перменная захвата Код: (step) // Математика? неееееееет) var vx,vy,d; // Перменные vx = 1*(mouse_x-ep_body_get_x_center(global.world,mousebody)); //Хватаем за нужную часть x vy = 1*(mouse_y-ep_body_get_y_center(global.world,mousebody)); //Хватаем за нужную часть y if mousehingejoint!=-1 { // Если можно взять d = sqrt(vx*vx+vy*vy); // Бла-бла-бла // Гравитация if d>10 { vx *= 10/d; vy *= 10/d; } } ep_body_set_velocity_center(global.world,mousebody,vx,vy,0); // И вот устанавливаем точку взятия Код: (end step) // Всегда ep_world_update_contacts(global.world); ep_world_simulate_step(global.world); Код: (glob left pressed) var xx,yy;// Переменные with block1 { // Для block1 xx = ep_body_coord_world_to_local_x(global.world,body,mouse_x,mouse_y); // Ищем прошлую x точку yy = ep_body_coord_world_to_local_y(global.world,body,mouse_x,mouse_y); // Ищем прошлуюy точку if -16<xx and xx<16 and -16<yy and yy<16 { // Если мы в форме обьекта. Половину спрайта вместо 16 пишите other.mousehingejoint = ep_hingejoint_create(global.world,body,other.mousebody,xx,yy,0,0,0);// Устанавливаем связь ep_hingejoint_set_max_force(global.world,other.mousehingejoint,10000); // Максимальная сила связи } } // Итак для всех остальных Код: (glob left released) if mousehingejoint!=-1 { // Если взят как либо обьект ep_hingejoint_destroy(global.world,mousehingejoint); // Уничтожаем связь mousehingejoint = -1; // Приходим в норму } Загружаем два спрайта статистического и динамического обьекта с названиями: static и block1 (помним, что центрируем спрайты). Пусть оба спрайта будут квадраты 32*32px. Создаем два обьекта с такими же названиями... В static пишем знакомый код: Код: (create) // Стандарт body = ep_body_create_dynamic(global.world,false); shape1 = ep_shape_create_box(global.world,body,32,32,0,0,0,1); ep_shape_set_collision(global.world,body,shape1,collide1a,collide1b,0); ep_shape_set_material(global.world,body,shape1,0.4,0.4,0,0); ep_body_calculate_mass(global.world,body); ep_body_set_gravity(global.world,body,0,0.2); ep_body_set_position(global.world,body,x,y,degtorad(image_angle)); // И зачем мы тогда делали эти скрипты? Код: (destroy) ep_body_destroy(global.world,body); // Убиваем В block1 Код: (create) // Обычно body = ep_body_create_dynamic(global.world,false); shape1 = ep_shape_create_box(global.world,body,32,32,0,0,0,1); ep_shape_set_collision(global.world,body,shape1,collide1a,collide1b,0); ep_shape_set_material(global.world,body,shape1,0.4,0.4,0,0); ep_body_calculate_mass(global.world,body); ep_body_set_gravity(global.world,body,0,0.2); ep_body_set_position(global.world,body,x,y,degtorad(image_angle)); Код: (destroy) ep_body_destroy(global.world,body); // Пиф Код: (end step) // Висим там где надо x = ep_body_get_x(global.world,body); y = ep_body_get_y(global.world,body); image_angle = radtodeg(ep_body_get_rot(global.world,body)); // Незабываем про угол Так же сделайте с другими обьектами (в примере показал). Сохраните эту заготовку и всегда будете делать просто - по анологии. Ну, теперь можно поиграться этими кубиками. И постарайтесь наизусть запомнить коды Название: Re: Обучение Extreme Physics. Второй Урок. Отправлено: t111 от Август 31, 2013, 16:06:39 слушай, а можешь написать как сделать имитацию вылета ядра из пушки. Чтобы ядро было физический объект и при нажатии на пушку-вылетало из пушки?
Название: Re: Обучение Extreme Physics. Второй Урок. Отправлено: CrazyPony от Декабрь 05, 2014, 18:21:15 А как можно сделать, чтобы объект тянулся в сторону при нажатии на клавишу?
|