Четверг, 28 Марта 2024, 20:21

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Движение за объектом (Двигается не так быстро, как хотелось бы)
Движение за объектом
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
Форум игроделов » Конструкторы игр и лёгкие в освоении системы разработки игр » Game Maker » Движение за объектом (Двигается не так быстро, как хотелось бы)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг