В программировании отдельные части большой программы могут выполняться либо по очереди друг за другом, то есть последовательно, либо одновременно друг с другом, то есть параллельно. Во втором случае говорят о многопоточности, то есть каждый скрипт работает в своем потоке, а разные потоки текут во времени одновременно.
Когда для каждого спрайта одного проекта вы добавляете свою конструкцию блоков, которая начинается с команды "когда флажок нажат", то как только игра запускается, оба героя начинают параллельно независимо друг от друга выполнять свои команды. Это пример одновременного выполнения скриптов.
Более того, один и тот же спрайт может содержать два независимых скрипта, каждый из которых будет выполняться в своем потоке. Рассмотрим пример. Пусть кот ходит по сцене и при этом меняет свой костюм.
1)
const N = 10;
var A: array [1..N, 1..N] of integer;
i, j, maxMain, maxSecond: integer;
begin
writeln('A: ');
for i:= 1 to N do
begin
for j:= 1 to N do
begin
A[i, j]:= random(-30, 30);
write(A[i, j]:4);
end;
writeln();
end;
for i:=1 to N do
begin
for j:= 1 to N do
begin
if (i = j) and (maxMain < A[i, j]) then
maxMain := A[i, j];
if (i + j = N + 1) and (maxSecond < A[i, j]) then
maxSecond := A[i, j];
end;
end;
writeln('Макс. на глав. диагонали: ' + maxMain);
writeln('Макс. на побочной. диагонали: ' + maxSecond);
end.
2)
const N = 10;
var A: array [1..N] of real;
B, C: array of real;
i: integer;
begin
write('A: ');
for i:= 1 to N do
begin
A[i]:=random(-10, 10);
write(A[i] + ' ');
end;
writeln();
for i:=1 to N do
begin
if (a[i] > 0) then
begin
SetLength(B, Length(B) + 1);
B[High(B)]:=a[i];
end;
if (a[i] < 0) then
begin
SetLength(C, Length(C) + 1);
C[High(C)]:=a[i];
end;
end;
write('B: ');
for i:= 0 to Length(B) - 1 do
write(B[i] + ' ');
writeln();
write('C: ');
for i:= 0 to Length(C) - 1 do
write(C[i] + ' ');
writeln();
end.