Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.07.2017, 16:25   #1
users1
Пользователь
 
Регистрация: 12.01.2017
Сообщений: 19
По умолчанию Игровой цикл на Pascal ABC.Net

Вот посмотрите пожалуйста. Почему не работает. Вроде правильно же?

Код:
    var Game := true; 
    var lastTime := Milliseconds;
    var partTime: double := 1000 / 60;
    var delta: double := 0;
   
    while Game do
    begin
        var now := MillisecondsDelta;
        delta += (now - lastTime);
        lastTime := now;
        if (delta >= partTime) then
        begin
            Update();
            delta := 0;
        end;
        Render();
        
    end;
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось users1; 17.07.2017 в 16:55.
users1 вне форума Ответить с цитированием
Старый 17.07.2017, 16:37   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от users1 Посмотреть сообщение
var now := MillisecondsDelta;
1) что есть "MillisecondsDelta" ?
Цитата:
function MillisecondsDelta: integer;

Возвращает количество миллисекунд с момента начала работы программы или предыдущего вызова функций Milliseconds или MillisecondsDelta.
т.е. Вы уже абсолютно зря пишете про (now - lastTime) - Вам уже вернули количество миллисекунд с прошлого вызова.

2) зачем Вам подобные циклы вообще. Это же неэффективно и крайне нагружает процессор.
PascalABC.NET имеет нормальный, событийно-управляемый интерфейс + доступ к Win API.
Например, можно использовать таймер:
Цитата:
Модуль Timers

Модуль Timers содержит класс Timer, позволяющий выполнять определенные действия через равные промежутки времени. В конструкторе класса Timer указывается промежуток времени и имя процедуры без параметров - обработчика события таймера, вызываемой через указанный промежуток времени.

Последний раз редактировалось Serge_Bliznykov; 17.07.2017 в 16:41.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.07.2017, 16:40   #3
users1
Пользователь
 
Регистрация: 12.01.2017
Сообщений: 19
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) что есть "MillisecondsDelta" ?
function MillisecondsDelta: integer;
Возвращает количество миллисекунд с момента последнего вызова Milliseconds или MillisecondsDelta
users1 вне форума Ответить с цитированием
Старый 17.07.2017, 16:43   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от users1 Посмотреть сообщение
function MillisecondsDelta: integer;
да, не актуально. я уже нашёл это и откорректировал свой предыдущий пост.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.07.2017, 16:55   #5
users1
Пользователь
 
Регистрация: 12.01.2017
Сообщений: 19
По умолчанию

Так как иначе-то без while. Всегда же так делают игровые циклы или нет?
users1 вне форума Ответить с цитированием
Старый 17.07.2017, 16:58   #6
users1
Пользователь
 
Регистрация: 12.01.2017
Сообщений: 19
По умолчанию

может так
Код:
var timeGame := new timer(1000/60, Update);
,
где в Update() есть какая-нибудь Calculete() и Render()?
users1 вне форума Ответить с цитированием
Старый 17.07.2017, 17:20   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от users1 Посмотреть сообщение
var timeGame := new timer(1000/60, Update);
нет, значение интервала таймера должно быть целым числом.

тогда уже:
Код:
var t : Timer;
......
begin

 t := new Timer(1000 div 60, MyUpdateProc);
а вообще, зайдите в папку, куда Вы установили PascalABC.NET и посмотрите папку Samples \ Games
(например, "С:\Program Files (x86)\PascalABC.NET\Samples\Games")
там есть готовый код, посмотрите, как там всё реализовано.

p.s. А, честно говоря, непонятно, чем обусловлен выбор в качестве основы именно Pascal ABC.NET - это же химера,
монстр, жуткая помесь Паскаля и MS Framework .NET.
Если Вам нужен .NET - то лучше возьмите C#, он ближе к .NET и "роднее"

Последний раз редактировалось Serge_Bliznykov; 17.07.2017 в 17:23.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Graph ABC.NET users1 Помощь студентам 0 29.03.2017 15:06
Помогите переделать из паскаля abc в паскаль abc.net Smile189 Паскаль, Turbo Pascal, PascalABC.NET 3 09.11.2016 08:12
Pascal ABC.NET gogomon93 Помощь студентам 4 01.12.2013 17:56
Pascal ABC цикл с предусловием Александр 19 Помощь студентам 0 17.12.2012 10:42