Ошибки PascalABC.NET


#1555

А, понял


#1556

В принципе, да. Он написан хорошим студентом 5 лет назад, идеи реализации мы уже забыли, он никем не поддерживается. Если хотим среду без багов, эту часть надо закрыть


#1557

Это ваша ошибка. Вы запускаете несколько анимаций одного и того же параллельно и сразу. Так нельзя. On относительно текущей точки, to — к абсолютной точке


#1558

Мы можем это поддерживать. Баги в интеллисенс потихоньку исправлять будем, но он у нас в силу общего алгоритма все равно останется нечувствительным к некоторым вещам. Баги в компиляторе это конечно наша основная ответственность. И пожалуйста имейте в виду, что всякие новые хотелки в языке будут потенциально множить баги. Так что предложения об улучшении должны быть самые необходимые, а не “давайте замутим это”


#1559

Хорошо, а можно тогда оформить эту удаляемую часть в виде плагина или опциональной dll-ки (с пустой заглушкой в базовом дистрибутиве), чтобы можно было как-то просто ручками добавлять её назад тем, кто находит её все-таки еще полезной, несмотря на все глюки? Она же будет пока неизменяемой, один раз адаптировал её таким образом и впоследствии никакой доп. работы по поддержке от вас не потребуется. В идеале – в инсталляторе отдельную галочку завести (по дефолту выключенную), с предупреждением для тех, кто её выбирает, о том, что компонент нестабильный и снят с поддержки, мол, ставьте только на свой страх и риск.


#1560

Вы запускаете несколько анимаций одного и того же параллельно и сразу.

Я специально заккоментировал остальные операторы в теле цикла, поэтому выполняется только один вид анимации. Просто логика ее выполнения мне была не ясна. Я думал, что анимация будет выполнятся последовательно по мере цикла, а она выполняется в конце цикла, например, если поставить такой оператор в цикле с i от 0 до 4:

    Pz.AnimMoveon(1, 0.05*i*i*i, 0, 2).begin;

то анимация тела будет не по гиперболе, а по прямой из исходной точки в точку с координатами {1, 5}


#1561

Нет, тут другая логика. Когда мы делали формы, мы думали, что активно будем использовать это в обучении. Мы ошиблись. Не используем вообще. Кроме того, предложенная нами технология оказалась весьма несовершенной. Например, создание второй формы не поддерживается. И потом сейчас все таки технология wpf сильно прогрессивнее, а редактор форм для нее надо делать с нуля.

Так что я скептически отношусь к этому функционалу. Хотя простые вещи можно делать быстро.


#1562

Именно в этом и резон! Быстренько накидать простой, но аккуратный прототип, без особых изысков – ручками ведь выравнивать замучаешься даже небольшую формочку. Понятно, что сложный или изысканный интерфейс на нем не сделать, но так это же и не профессиональная среда! А глюки и странности, ну да, есть, но все же, когда нет другой нормальной альтернативы это лучше, чем ничего. А WPF, конечно, богаче и функциональнее, но вручную его писать… Вы уж попробуйте выделить пока то, что есть, в какой-нибудь отдельный модуль.


#1563

Ну вам так и сказали. Когда вы выполняете .Begin для анимации - она только начинает выполнятся. И выполнение кода не ожидает пока анимация закончится, а сразу выполняет следующую итерацию цикла. Таком образом, до того как первая анимация закончилась - вызываются все сразу.

Чтоб анимации выполнялись последовательно - их надо сначала присвоить отдельной переменной, так:

uses Graph3D;

begin
  Window.Maximize;
  Camera.UpDirection := V3D(0, 1, 0);
  Camera.Position := P3D(0, 0, 30);
  Camera.LookDirection := V3D(0, 0, -30);
  
  var Pz := Sphere(0, 0, 0, 0.2, colors.Blue);
  
  Sleep(1000);//чтоб сразу не началось, а сначала запустилось до конца
  
  var anim:=Pz.AnimMoveTo(0, 0, 0, 0);
  for var i := 0 to 4 do
    anim := anim + Pz.AnimMoveOn(1, 0.05*i*i*i, 0, 1);
  
  anim.Begin;
  
end.

Если прибавлять анимации - они будут выполнятся последовательно, а если умножать - одновременно.

Но и это работает не идеально. К примеру так - лучше:

uses Graph3D;

begin
  Window.Maximize;
  Camera.UpDirection := V3D(0, 1, 0);
  Camera.Position := P3D(0, 0, 30);
  Camera.LookDirection := V3D(0, 0, -30);
  
  var Pz := Sphere(0, 0, 0, 0.2, colors.Blue);
  
  var pts_c := 50;
  var pts := new Point3D[pts_c];
  for var i := 0 to pts_c-1 do
  begin
    var ang := 90*(i/(pts_c-1));
    ang := DegToRad(ang);
    pts[i] := P3D(sin(ang)*5,cos(ang)*5-5,0);
  end;
  
  var anim := Pz.AnimMoveTrajectory(
    pts,
    5,
    procedure->writeln('анимация закончилась')
  );
  
  anim.Begin;
  
  writeln('Анимация уже началась, но это выпишет до того как она закончится');
  
end.

#1564

Спасибо за разъяснения. Есть ли способ объявить переменную анимации неявно (например, в виде глобальной переменной)? Второй вариант мне не очень подходит, т.к. я хочу, чтобы анимация шла не по предвычисленной заранее траектории, а в процессе ее вычисления, этому как раз отвечает первый вариант.


#1565

Удивило…

begin
  var F: () -> integer := () -> Random(1,100);
  Println(0+F+F);
  Println(F+0+F);
  //Println(F+F+0); // Нет перегруженной подпрограммы с такими типами параметров
  //Println(F); // Возможны два преобразования типов
  Println(F());
  Println(integer(F));
end.

#1566

Неявно это вызывать begin без присвоения переменной. А тип вы можете сами посмотреть анализатором кода. Просто объявите переменную с тем же типом, который возвращают все Anim... функции.


#1567

А что тут удивительного?


#1568
  1. F+F выдаёт Нет перегруженной подпрограммы с такими типами параметров.
  2. Println(F) выдаёт Возможны два преобразования типов

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


#1569

Явное всё-же лучше неявного…


#1570

Например то, что вызовы 0+F+F и F+0+F корректны, а F+F+0 - нет.

Println(0+F+F);
Println(F+0+F);
Println(F+F+0); // Нет перегруженной подпрограммы с такими типами параметров

Перекликается со старым баяном

Дэти ! Запомните такие слова как вилька, тарелька, бутилька, пишются бэз мягкого знака, а такие слова как сол, фасол, кон - пишются с мягким знаком. Но самое сложное слово в русском языке, - это слово тоска, это не та тоска, что забор строят, а та тоска, который грусть, но не тот груст что в лэсу собирают и суп варят, а тот груст который тоска !


#1571

Это ещё можно объяснить… А вот это нет:


#1572

У @ibond не воспроизводится.
Если у кого то воспроизводится - отзовитесь :slight_smile:.


#1573

Вроде нормально все… а что должно произойти?


#1574

Обновился - пропало.