Перейти к содержанию
Fire Monkey от А до Я

zloid

Пользователи
  • Постов

    7
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные zloid

  1. procedure TfMain.Timer1Timer(Sender: TObject);
    begin
    
      if not(m.State in [TMediaState.Unavailable, TMediaState.Stopped]) then
        exit;
    
      m.CurrentTime := 0;
      m.filename :=GetNextSoundFile;
      m.Volume := 1;
      m.Play;  
    
    end;

    Такой код работает под Android. Под виндой не работает.

     

    Также, если выводить в лог 

        Memo1.Lines.Add(m.Duration.ToString);
        Memo1.Lines.Add(m.CurrentTime.ToString);

    То что под Андроидом, что под виндой, значения нулевые. То есть на них опираться нельзя.

     

    Помогите, как под виндой убедиться, что файл отыграл?

  2. слабоват планшет. я на таком проце покупал по моему года три назад. попробуй на другом планшете. сейчас идут как минимум двух ядерные. 

    Хорошо, спишу всё на высокие требования Delphi+FMX и слабость планшета, хотя всякие игрушки на нём идут, а там не просто четыре квадратика выводятся.

     

    Спасибо всем за ответы. 

  3. так у тебя тестовый планшет на интеле что ли? 

    Нет, ONDA Vi40

    ARM Cortex-A8, Allwinner A10 1GHz

    Если Ваш ответ к моему примечанию о том, что я скидываю галку, то я обновил своё сообщение. С галочкой всё проседает точно так же.

  4.  

    вот видео

    вот текст

    
    
    
    
    
    
    
    
    

     

     

    Ваш код на моём планшете (ONDA, разрешение 1024x768) не дал прироста в скорости, элементы всё так же впадают в транс.

     

    Хотел уж было подвести печальный итог, что FMX тормозит на разрешениях выше 360х615, как в Вашем видео, но

     

    протестировал на Huawei MediaPad 10, все прекрасно двигается никаких зависании

    только я исправил Width -> ClientWidth и Height -> ClientHeight

    Обнадёжило, у MediaPad разрешение ещё выше. Может быть у меня просто слабый планшет.

     

     

     

    Забыл сказать: я скидываю галочку

    bCrijgLYHPM.jpg

    Иначе планшет просто выдаёт огромное сообщение, что приложение не поддерживает данное устройство.

     

    UPD: наше тестовое приложение с летающими TTExt работает и с галочкой, но скорость такая же. Но для любого другого приложения сложнее HelloWorld, галочку надо скидывать.

  5. Чтобы было понятнее о каких лагах речь, создал мини-приложение, на форме которого всего четыре TText, они движутся по кругу (квадрату, конечно). Код привожу в конце под спойлером.

     

    https://www.youtube.com/watch?v=UQSS-BeXSAA

     

    На этом видео я последовательно снимаю работу приложения в Windows, в симуляторе IOS и на Android-планшете. В первых двух случаях элементы движутся плавно, а на планшете заметны регулярные рывки. На Android-телефоне, кстати, всё работает плавно (снять не могу, но поверьте на слово).

     

    
    
    const
    SPEED = 10;
    MARGIN = 20;
    
    procedure RenderingSetupCallback(const Sender, Context: TObject;
    var ColorBits, DepthBits: Integer; var Stencil: Boolean;
    var Multisamples: Integer);
    begin
    // Override OpenGL rendering setup to use custom values.
    ColorBits := 16; // default is 24
    DepthBits := 0; // default is 24
    Stencil := False; // default is True
    Multisamples := 0; // default depends on TForm.Quality or TForm3D.Multisample
    end;
    
    procedure RegisterRenderingSetup;
    var
    SetupService: IFMXRenderingSetupService;
    begin
    if TPlatformServices.Current.SupportsPlatformService
    (IFMXRenderingSetupService, IInterface(SetupService)) then
    SetupService.Subscribe(RenderingSetupCallback);
    // There is also SetupService.Unsubscribe, which removes the hook.
    end;
    
    procedure TForm2.Timer1Timer(Sender: TObject);
    var
    I: Integer;
    T: TText;
    begin
    for I := 1 to 4 do
    begin
    T := TText(Self.FindComponent('Text' + inttostr(I)));
    
    if T.Tag = 1 then
    begin
    T.Position.X := T.Position.X + SPEED;
    if T.Width + T.Position.X + MARGIN >= Self.Width then
    begin
    T.Tag := 2;
    Continue;
    end;
    end;
    
    if T.Tag = 2 then
    begin
    T.Position.Y := T.Position.Y + SPEED;
    if T.Height + T.Position.Y + MARGIN >= Self.Height then
    begin
    T.Tag := 3;
    Continue;
    end;
    end;
    
    if T.Tag = 3 then
    begin
    T.Position.X := T.Position.X - SPEED;
    if T.Position.X - MARGIN <= 0 then
    begin
    T.Tag := 4;
    Continue;
    end;
    end;
    
    if T.Tag = 4 then
    begin
    T.Position.Y := T.Position.Y - SPEED;
    if T.Position.Y - MARGIN <= 0 then
    begin
    T.Tag := 1;
    Continue;
    end;
    end;
    end;
    
    end;
    
    initialization
    
    RegisterRenderingSetup;
    
    end.
  6. Хоть код покажите - как реализовано перемещение.

    На форме таймер лежит с Interval=60 (пробовал разные значения), который делает так:

    Self.BeginUpdate;
    Тут я перебираю все TText'ы, которые хранятся в TList и изменяю плавно их координаты
    Self.EndUpdate;
    
    

    Пробовал вместо таймера приделывать к ним компонент TFloatAnimation - не быстрее.

     

     

    Ну и про Canvas тоже рассказывал. В таймере говорил

    PaintBox.Repaint; 

    А в методе Draw() у ПаинтБокса делал так:

    Canvas.BeginScene;
    Отрисовываю в цикле все тексты при помощи FillText
    Canvas.EndScene;

    ...

    Спасибо. Не знал о таком. Нашёл то же самое в справке:

    http://docwiki.embarcadero.com/RADStudio/XE6/en/Overriding_OpenGL_Rendering_Parameters

    Но не помогло. TText'ы ведут себя всё так же - иногда подлагивают.

     

    В Вашем случае добавление RenderingSetupCallback само по себе лекарство, или Вы как-то по-другому выводите графику на экран? Тоже пользуетесь FMX-компонентами или "рендерите" графику на канву?

  7. Здравствуйте.

     

    Пишу приложение на Delphi XE8. Суть его в том, чтобы показывать на экране некие данные, присылаемые по сети. Данные очень простые: короткие тексты разных цветов в разных частях экрана. При этом эти тексты должны иногда перемещаться туда-сюда. Этакий информер.

     

    Я использовал компонент TText для вывода. Больше на форме ничего нет, только с десяток этих TText'ов, которые в основном ничего не делают, но по команде перемещаются.

     

    Приложение простое и прекрасно работает. Нет, не прекрасно: если в windows всё плавно, на android-телефоне плавно, то на Android-планшете заметны неприятные подтормаживания: элементы двгаются с заметными рывками, иногда случается общий лаг на долю секунды.

     

    Пробовал вместо TText'ов кинуть на форму TPaintBox и выводить на Canvas тексты вручную. Не заметил прироста скорости.

     

    Помогите. ) Подскажите метод, которым на Android можно быстро выводить простую графику. Желательно пример исходного кода, чтобы я сразу его запустил и сказал "ага, действительно плавно", а там уж я адаптирую свой проект.

     

    Просто обидно: всё работает - база, сервер, логика на клиенте, но вот показать пользователю симпатично не выходит, сразу бросается в глаза, что приложение "тормозит".

     

    Спасибо.

×
×
  • Создать...