"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" нет никаких событий.