Движение за объектом
| |
foxed | Дата: Суббота, 08 Июля 2017, 08:40 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| У меня есть объект, который двигается за мышкой (y=mouse_y). Но проблема в том, что он двигается слишком медленно, то есть если мышку резко дернуть, то объект только через некоторое время будет в той же точке, а мне надо, чтобы этой разницы не было заметно.
Тестирую я это на телефоне, если это важно.
Что можно сделать?
|
|
| |
TLT | Дата: Суббота, 08 Июля 2017, 14:49 | Сообщение # 2 |
Сейчас нет на сайте
| Объект двигается как в RTS на место клика или всё же мгновенно перемещается на координаты мыши? Объясни понятнее.
Дао, выраженное словами, не есть истинное Дао.
|
|
| |
foxed | Дата: Суббота, 08 Июля 2017, 19:02 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Мгновенно перемещается на координаты мыши.
|
|
| |
Интернет | Дата: Суббота, 08 Июля 2017, 20:23 | Сообщение # 4 |
постоянный участник
Сейчас нет на сайте
| Цитата foxed ( ) У меня есть объект, который двигается за мышкой ? Может эффект движения происходит из-за отставания? Поробуй End Step
Сообщение отредактировал Интернет - Суббота, 08 Июля 2017, 20:25 |
|
| |
Морриарте | Дата: Суббота, 08 Июля 2017, 21:24 | Сообщение # 5 |
LINUX ФАНАТ
Сейчас нет на сайте
| foxed, увеличь скорость комнаты до 60 и убедись что на телефоне она не падает.
|
|
| |
foxed | Дата: Воскресенье, 09 Июля 2017, 06:57 | Сообщение # 6 |
был не раз
Сейчас нет на сайте
| "End Step" не помог. Увеличил "room_speed" до 60 - стабильно держится на 60 без колебаний, а вот FPS падает до 10-15.
FPS падает, скорее всего, потому что я отрисовываю surface.
Это у меня создается меню выбора блютус-устройства со scroll bar'ом.
Распишу все поподробнее: У меня есть объект "obj_control_bluetooth_choose_window", в котором все контролируется. Есть объект "obj_k_a_choose_window_button" - это кнопка, на которую можно нажать. И объект "obj_k_a_choose_window_move_control", к которому привязаны все кнопки.
1) Объект "obj_control_bluetooth_choose_window", событие create:
Код pressOnButtonId=-1; //ID объекта-кнопки, на которую нажали. pressOnButtonFlag=false; //true - нажали на какую-то кнопку, false - не нажали ни на одну.
xDrawSurface=-1; //X, в котором рисуем surface. yDrawSurface=-1; //Y, в котором рисуем surface.
mouse_yy=-1; //Y мышки в том месте, где нажали на кнопку. yy=-1; //Y объекта "obj_k_a_choose_window_move_control", когда нажали на кнопку. bottomBorder=-1; //Нижняя граница scroll bar'а. upperBorder=-1; //Верхняя граница scroll bar'а.
Событие Step:
Код //Код, отвечающий за проверку нажатия\\ var freeVar, freeVar1; freeVar=spr_k_a_choose_window_mini_bg; freeVar1=spr_k_a_choose_window_button; bottomBorder=obj_k_a_choose_window_mini_bg.y+sprite_get_height(freeVar); upperBorder=bottomBorder-sprite_get_height(freeVar1)*instance_number(obj_k_a_choose_window_button)+surface_get_height(mySurfaceID);
if (mouse_check_button_pressed(mb_left)) { with (obj_parent_for_k_a_choose_window) { if (distance_to_point(mouse_x, mouse_y)<=0) { other.pressOnButtonId=object_index; other.pressOnButtonFlag=true; image_index=1; } else { if (other.pressOnButtonFlag==false) { with (obj_k_a_choose_window_background) { if !(distance_to_point(mouse_x, mouse_y)<=0) { scr_bluetooth_choose_window_delete(); } } } } } with (obj_k_a_choose_window_button) { if (distance_to_point(mouse_x, mouse_y)<=0) { other.pressOnButtonId=object_index; other.pressOnButtonFlag=true; other.mouse_yy=mouse_y; other.yy=obj_k_a_choose_window_move_control.y; image_index=1; } } } else if (mouse_check_button_released(mb_left)) { if (pressOnButtonFlag==true) { //Изначально была нажата кнопка. with (pressOnButtonId) { image_index=0; if (distance_to_point(mouse_x, mouse_y)<=0) { //Мышка(палец) остался на той же кнопке. event_perform(ev_other, ev_user0); //Выполняем нажатие кнопки. } } } pressOnButtonId=-1; pressOnButtonFlag=false; mouse_yy=-1; yy=-1; }
if (pressOnButtonFlag==true) { if ((obj_k_a_choose_window_move_control.y>=upperBorder) && (obj_k_a_choose_window_move_control.y<=bottomBorder)) { obj_k_a_choose_window_move_control.y=yy+mouse_y-mouse_yy; } if (obj_k_a_choose_window_move_control.y<upperBorder) {obj_k_a_choose_window_move_control.y=upperBorder;} if (obj_k_a_choose_window_move_control.y>bottomBorder) {obj_k_a_choose_window_move_control.y=bottomBorder;} }
Событие Draw:
Код var xDrawPaired, yDrawPaired, xDrawBt, yDrawBt, xDrawStr, yDrawStr; var freeVar, freeVar1;
xDrawSurface=obj_k_a_choose_window_background.x; yDrawSurface=obj_k_a_choose_window_mini_bg.y+sprite_get_height(spr_k_a_choose_window_mini_bg);
if (surface_exists(mySurfaceID)) { surface_set_target(mySurfaceID); draw_clear_alpha(make_color_rgb(77, 77, 77), 1); surface_reset_target();
with (obj_k_a_choose_window_button) { if (global.idConnectDevice==global.DeviceAddress[ID]) {image_index=2;} surface_set_target(obj_control_bluetooth_choose_window.mySurfaceID); draw_sprite(sprite_index, image_index, 0, y-obj_control_bluetooth_choose_window.yDrawSurface);
draw_set_font(global.fontRoomStart);
myStr=string(global.DeviceName[ID])+chr(13)+string(global.DeviceAddress[ID]);
//Координаты для отрисовки PAIRED, BT и ТЕКСТА var xDrawPaired=x+2; var yDrawPaired=y-obj_control_bluetooth_choose_window.yDrawSurface+sprite_height/2-sprite_get_height(indexSprPaired)/2;
var xDrawBt=xDrawPaired+sprite_get_width(indexSprPaired)+2; var yDrawBt=y-obj_control_bluetooth_choose_window.yDrawSurface+sprite_height/2-sprite_get_height(indexSprBt)/2;
var xDrawStr=xDrawBt+sprite_get_width(indexSprBt)+2; var yDrawStr=y-obj_control_bluetooth_choose_window.yDrawSurface+sprite_height/2-string_height(myStr)/2+2.5;
if (global.idConnectDevice==global.DeviceAddress[ID]) {draw_sprite(indexSprPaired, 0, xDrawPaired, yDrawPaired);} //отрисовываем значок Paired.
draw_set_color(c_white); draw_text(xDrawStr, yDrawStr, myStr); draw_sprite(indexSprBt, 0, xDrawBt, yDrawBt);
surface_reset_target(); } draw_surface(mySurfaceID, xDrawSurface, yDrawSurface); } else { freeVar=spr_k_a_choose_window_background; freeVar1=spr_k_a_choose_window_mini_bg; mySurfaceID=surface_create(sprite_get_width(freeVar), sprite_get_height(freeVar)-sprite_get_height(freeVar1)-12); }
2) Объект "obj_k_a_choose_window_button", событие create:
Код indexSprPaired=spr_k_a_choose_window_paired; indexSprBt=spr_k_a_choose_window_bt;
myStr="";
Событие Step:
Код y=obj_k_a_choose_window_move_control.y+sprite_height*ID;
Событие User Event 0:
Код Bluetooth_CancelDiscovery();
global.idConnectedDevice=global.DeviceAddress[ID]; Bluetooth_ConnectAsClient(global.DeviceAddress[ID]);
3) В объекте "obj_k_a_choose_window_move_control" нет никаких событий.
Сообщение отредактировал foxed - Воскресенье, 09 Июля 2017, 06:58 |
|
| |
Морриарте | Дата: Воскресенье, 09 Июля 2017, 18:27 | Сообщение # 7 |
LINUX ФАНАТ
Сейчас нет на сайте
| foxed, сурфейсы на телефоне - плохая идея. На слабых-средних устройствах тормоза обеспечены.
|
|
| |
foxed | Дата: Понедельник, 10 Июля 2017, 06:55 | Сообщение # 8 |
был не раз
Сейчас нет на сайте
| А как тогда сделать такой скролл-бар? У меня просто идей нет(
|
|
| |
Christopher | Дата: Среда, 12 Июля 2017, 21:13 | Сообщение # 9 |
участник
Сейчас нет на сайте
| Цитата foxed ( ) А как тогда сделать такой скролл-бар? У меня просто идей нет( Easy Scrollbar
|
|
| |
|