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

Letos

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

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

  • Посещение

  • Победитель дней

    2

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

  1. 34 минуты назад, #WAMACO сказал:

    Геймдев штука специфичная, много ньюансов, хитрых приемов... почитайте, поразмышляйте... 

    Вот я и размышляю, и пытаюсь привлечь к этому уважаемых участников форума.

    35 минут назад, #WAMACO сказал:

    видел игрушки на Delphi все плавно и хорошо было.

    И я о том же.

  2. Помню, на Спектруме в ассемблере (Z80) была команда HALT, чтобы дождаться обратного хода луча на кинескопе (если успел прорисовать) и тем самым обеспечить плавность. Тут же, в FMX синхронизация с дисплеем обеспечивается размещением прорисовки в OnPaint? Тогда почему же дёргается фон?

    И да, видал эмуляторы приставок, там фон двигается плавно, значит, как-то можно.

  3. В 25.02.2019 в 11:37, Barbanel сказал:

    И внезапно, эта приставка использует всем известный OpenGL в котором нет специальной функции для сдвига фона.

    В приставках есть видео-сопроцессор (был даже ещё в Амиге в 80-х годах), и в Амиге сколлировалось именно аппаратно. А в моём примере - скроллируется программно, процессором. Неужели графическая видеокарта PC не умеет? Умеет, но как?

  4. В 25.02.2019 в 11:37, Barbanel сказал:

    Ну, как бы да

    Это понятно. Перерисовывать фон не жалко. Но как сделать плавный скроллинг? Вы видели мой пример? Все же рывками двигается фон. 

    В 25.02.2019 в 11:37, Barbanel сказал:

    чипы проектировались специально под определенные задачи, а не как сегодняшний процессор - комбайн для любой задачи

    Сейчас специально делается видеокарта - со своим(и) процессором(и). (Это тогда процессор, как Z80 в ZX Spectrum, должен был справляться со всеми задачами.)

  5. В 03.03.2018 в 07:12, Malena сказал:

    У меня проблема такого рода: когда я открываю в своей Delphi XE10 Seattle раздел Options - неважно, в меню Project или Tools, у меня это окно отображается совершенно неадекватно: все элементы меню налезают друг на друга, так что пользоваться совершенно невозможно. Я прикрепила скриншот, на котором вы можете наблюдать сие безобразие. Что это такое и как это устранить? 

    В настройках ОС у тебя не стоит увеличение шрифта? (вредная вещь, сталкивался с такой, даже в своей библиотеке функцию написал для нивелирования этой дури)

  6. Здравствуйте. Подскажите, пожалуйста, правильно ли я делаю скроллинг фона? Собственно интересует, рационально ли здесь использовать метод DrawBitmap? При этом же прорисовывается вся канва. (И да, помещать картинку на TImage и двигать её я пробовал, так ГОРАЗДО медленнее.) Ведь даже на игровых приставках имелась аппаратная функция скроллинга экрана, реализовано ли это как-то в FMX? Пример я прилагаю, включая exe файл. Как видим, двигается не идеально плавно.

    //---------------------------------------------------------------------------
    
    #include <fmx.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.fmx"
    TForm1 *Form1;
    
    TBitmap *MapBmImage = new TBitmap;
    String InitialDirectory;
    
    
    float MapVx=150; // скорость по X, пиксели в секунду
    
    float MapOutX=0, MapOutY=0; // координаты левого верхнего угла, с которого выводится фон
    float ScreenMapWidth, ScreenMapHeight; // ширина и высота фона на экране
    float MapOutXLimit; //крайняя правая точка карты, которая может быть отражена
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    boolean LoadMapFile() //загрузка карты
    {
        String filename=InitialDirectory+"\\2dbackground_b.png";
        if(!FileExists(filename)) return false;
    
        MapBmImage->LoadFromFile(filename);
    
        return true;
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
        InitialDirectory=ExtractFileDir(ParamStr(0)); // the path and file name of the executing program
        LoadMapFile();
    }
    //---------------------------------------------------------------------------
    
    
    void DrawBackground()
    {
        TPaintBox *ScreenMap=Form1->PaintBox1; //где отрисовывается карта на экране
    
        TRectF MapRect = TRectF(MapOutX, MapOutY, MapOutX+ScreenMapWidth, MapOutY+ScreenMapHeight);
        TRectF ScreenRect = TRectF(0, 0, ScreenMapWidth, ScreenMapHeight);
    
        ScreenMap->Canvas->BeginScene();
        ScreenMap->Canvas->DrawBitmap(MapBmImage,MapRect,ScreenRect,255);
        ScreenMap->Canvas->EndScene();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormShow(TObject *Sender)
    {
        ScreenMapWidth=PaintBox1->Width;
        ScreenMapHeight=PaintBox1->Height;
    
        MapOutXLimit=MapBmImage->Width-ScreenMapWidth;
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
        if (MapOutX>=MapOutXLimit) MapVx=-1* abs(MapVx);
        else if (MapOutX<=0) MapVx=abs(MapVx);
    
    
        static DWORD LastTick=0; //из-за неравномерного срабатывания таймера
        DWORD Tick;
        float step;
        Tick=GetTickCount();
        if(LastTick!=0)
        {
            step=(float)(Tick-LastTick)/1000; // столько секунд прошло
        }
        else
        {
            step=(float)Timer1->Interval/1000;
        }
    
    
        LastTick=Tick;
    
    
        float dx; //на столько сдвигаем карту по X
        dx=MapVx*step;
    
        MapOutX+=dx;
        if (MapOutX>MapOutXLimit) MapOutX=MapOutXLimit;
        if (MapOutX<0) MapOutX=0;
    
        PaintBox1->Repaint();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::PaintBox1Paint(TObject *Sender, TCanvas *Canvas)
    {
        DrawBackground();
    }
    //---------------------------------------------------------------------------


    BackgroundScroll.zip

  7. 1 час назад, mmover сказал:

     cw :=  Grid1.Content.Width;
     ch :=  Grid1.Content.Height;

     

    Спасибо. Хоть это не совсем то, что ClientWidth в VCL (как начинаю понимать, прямого аналога нет), так Content.Width меняется при появлении полосы прокрутки и при изменении ширины колонок, но из этого уже можно что-то слепить...

  8. Вот решение

    void __fastcall TForm1::StayingGridApplyStyleLookup(TObject *Sender)
    {
    	THeader *Header;
    	Header=(THeader*) (Form1->StayingGrid ->FindStyleResource("header"));
    
    	if(Header!=NULL)
    		{
    		for (int i = 0; i < Header->Count; i++) {
    			THeaderItem *HeaderItem;
    			HeaderItem=(THeaderItem*) (Header->Items[i]);
    
    			HeaderItem->TextSettings->HorzAlign=TTextAlign::Center;
    
    		}
    
    	}
    }

     

  9. Здравствуйте. Не могу найти в FMX у многих компонентов такие свойства как ClientWidth и ClientHeight. В частности, я хочу установить в TStringGrid ширину колонок, чтобы избежать появления вертикальной полосы прокрутки, но ширину клиентской области узнать не могу (в отличие от VCL, где пользовался ClientWidth). Или хотя бы, как узнать ширину полосы прокрутки, если напрямую ClientWidth не узнать?

  10. А я разобрался от чего такое было. Это моя ошибка. В событии OnPaint у меня было условие:

    void __fastcall TForm1::MapImagePaint(TObject *Sender, TCanvas *Canvas, const TRectF &ARect)
    
    {
    	if(MapRepainting) DisplayMap();
    }

    А так работает:

    void __fastcall TForm1::MapImagePaint(TObject *Sender, TCanvas *Canvas, const TRectF &ARect)
    
    {
    //	if(MapRepainting) DisplayMap();
    	DisplayMap();
    }

     

    Почему-то действия на другом компоненте затрагивают перерисовку TImage...

  11. 10 минут назад, POV сказал:

    Попробуй на делфи то же самое - сделать.  Я билдером пользуюсь чаще - там глюк га глюке в сравнении с делфи.

    test.zip

    Да, вижу, добавил в примере на твою форму Memo, набираю там текст, канва не нарушается.

    Но я с FMX очень мало работал, может разница в том, что мы по-разному рисуем канву? Я свою рисую в событии OnPaint (которое по необходимости вызывается), где вызывается функция, отрисовывающая карту и то, что на ней. И рисую, в отличие от твоего примера, между BeginScene и EndScene:

    	ScreenMap->Canvas->BeginScene();
    	ScreenMap->Canvas->DrawBitmap(MapBmImage,MapRect,ScreenRect,1);
    	DisplayTrolls(ScreenMap);
    	ScreenMap->Canvas->EndScene();

     

  12. 7 минут назад, POV сказал:

    Готов поспорить у тебя использована конструкция with и ты обращаешься в полям которых нет, т.е. к чему-то другому публичному обращаешься.

    Да нет, обращаюсь к Memo по-простому (тут по событию таймера):

    ...
    
            //отмечаем события троллейбусов
            for (unsigned int i = 0; i < TrollPositions_main.size(); i++) {
                sTrollPosition &P=TrollPositions_main[i];
    
                String S=P.Description;
                if(S!=NoNameSite)
                {
                    TMemo *m= Form1->Memo1;
    
                    S=P.TrollNum+": "+S;
                    S+=", "+P.preDescription;
                    S+=", "+P.LastKon;
                    m->Lines->Add(S);
                    vfScrollMemoDown(m);
    
    //                MapRepaint();
                }
            }
    
    ...

    Вызов своей функции по перерисовке карты MapRepaint(), который тут закомментирован, помогает, но не вставлять же его после каждого действия с компонентами...

  13. 3 часа назад, Dev сказал:

    Кинуть на форму GridPanelLayout, разместить выше StringGrida задать в нем количество и ширину колонок под таблицу и накидать в него Label  и выравнивать как угодно

    Например, нет у меня никокого  GridPanelLayout. Есть Form1->StringGrid1, например. ГДЕ  там Header?

     

  14. Доступ к заголовку TGrid

    подскажите, пожалуйста, как например, выровнять текст в заголовке таблиц StringGrid, скажем, по центру

    да, я нашёл тут https://stackoverflow.com/questions/32131522/change-theader-font-size-in-fmx-tstringgrid

    но мне нужно на C++, я немогу перевести, компилятор затыкается уже на типе  THeader - не знает такого.

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