RU 📌 Pinned

Как сделать?

Dark[Ol(U23)leneri] #34 18.04.2010 22:57 6408 comments 2425433 views

Aleks Versus Moderator 11.06.2020 10:19 (5 years ago)

oleksandrigo,
так дело в msecscount или в локации-счётчике? На разных устройствах код интерпретируется с разной скоростью, отсюда и вызовы локации-счётчика могут происходить с разной периодичностью. msecscount показывает, сколько времени в миллисекундах от начала игры прошло, и по-идее значения этой функции не должны плавать. Запусти цикл типа:

:for
if i<1000:
msecscount
wait 1000 & ! можно wait 5000
i+=1
jump 'for'
end

И проверь, будет ли разница в показаниях msecscount. И насколько велика она будет. Сейчас планшеты по мощности сопоставимы с ноутбуками, не должно +-10 мс превышать, мне кажется.

Spoiler

Даже так:

:for
if i<1000:
old=new
new=msecscount
new-old
wait 1000 & ! можно wait 5000
i+=1
jump 'for'
end

разница между итерациями +-5 мс на моём ноуте

Aleks Versus,
Локация Старт
Settimer 2000
$counter = ‘counter’
ЛОКАЦИЯ Counter
*Clr
msecscount

Запускаем
Порядок чисел на ноуте
2007
4007
5999
7999
10007
12007

Порядок чисел на планшете
501
3003
7506
14013
22518
33023

Aleks Versus,
Твой второй вариант
На ноуте при 1000 вейте 1090-+мс
На планшете она все больше и больше
501
1501
2512
3517
4523
5523
6524
7526

Aleks Versus Moderator 11.06.2020 18:05 (5 years ago)

oleksandrigo,
ок. А фактически при работе локации-счётчика на планшете её код срабатывал через секунду, или всё дольше-дольше и дольше? На каком плеере запускаешь на планшете? Похоже на то, что плеер на планшете тормозит с выполнением команд, но надо разобраться.

Aleks Versus,
Впринципе проблема именно в msecscount’e. Меняя сеттаймер или вейт оно обновляет правильно(не мсекскаунт). Этой разницы в 10к и больше по факту нету, чисто сама функция обманывает.
Проверил даже на смартфоне и пока грешу на версии 8.1 и более.
Смартфон realme xt andro 10
Планшет lenovo andro 8.1
(Модель позже уточню)

Aleks Versus Moderator 12.06.2020 08:15 (5 years ago)

oleksandrigo,
да странно. Надо смотреть в исходниках, откуда оно достаёт время. Я пока не понимаю. Но ты так и не ответил, на каком плеере запускаешь? Если от Сидхарта, то он я думаю сможет поправить.

Aleks Versus,
Нет его версия мне не понравилась, но на всех проверял 1.3, 2.1.2, и 2.0.0 на всех одна и та же проблема

Вопрос по локации счётчика, она работает всегда? Можно её отключать и включать по желанию? Какой максимальный промежуток тика можно задать?

UPD
Добрался до компа и разобрался с тем, с чем хотел.
Можно выставить сеттаймер на 1 час и в любой момент изменить значение. Т.е. путем управления периодом тика можно “отключать” $counter.
Понятия не имею, сколько ресурсов потребляет секундомер, который этим управляет, но код в локации $counter не будет перечитываться всегда, а только когда он не нужен.

Aleks Versus Moderator 16.06.2020 10:49 (5 years ago)

dmvikar,
отключить локацию-счётчик можно так:

$counter=""

Можно назначать разные локации-счётчики в разные моменты игры. Многие об этом забывают, но это один из способов разгружать локацию-счётчик от огромного количества кода.

Aleks Versus Moderator 19.06.2020 19:30 (5 years ago)

oleksandrigo,
у меня на плеере от Сидхарты msecscount вообще нули выдаёт. :/

Задался я вопросом, как в локацию menu передавать значения кроме args[0].
Сделал я это через промежуточные переменные. Там, где нужно меню пишем примерно

"<a href='exec:dynamic $act_code[""code""],<<i>>,1'><img src='pic\pic.png'></a>"

и где-то раньше должно быть

$act_code['сode']={
a=args[0]
b=args[1]
menu '$menu'
}

Так мы можем использовать значения переменных a и b в локации menu.
Aleks Versus,
Сорян, если я тут изобрел велосипед, но такой инфы я не нашел в видеоуроках и ЧаВо.

Здравствуйте!

  1. Спасибо @Aleks Versus, что перезалил видео по урокам на QSP очень дословно каждую функцию объяснил 2. Я хочу переписать некоторые игры, которые мне понравились. И вот у меня вопрос: Вот, скажем, на ферме разводят животных. Ну, или аквариум с рыбками. У них есть поколения. Я хочу отслеживать “глубину родства”, чтобы не пересекать братьев и сестер или чтобы дети не пересекались с родителями. Например, в игре Sims игра следит до 3 поколений, чтобы брат мог жениться на сестре. Достаточно ли будет в QSP метки=1, что животные являются “родственниками”?

Poganec37,
Тут нужно придумать алгоритм для начала.
С наскока на ум приходит следующее: каждого нпс записываешь как npc[id]. Каждому ребенку присваиваешь свойства мама, папа, значения которых будут равны id родителя, типа mama[id] (тут id ребенка) = id от нпс мамы.
Так же можно передавать значения на следующие поколения, например в третье поколение;
id+=1/это будет id нового ребенка,
mama1[id]=mama[id]/тут превращаем маму текущего родителя в бабушку текущего ребенка.
Соответственно, сколь угодно глубоко можешь прослеживать родословную, а при скрещивании делать проверку на совпадение значения переменных.
Надеюсь, что понятно).

Здравствуйте. Вот, разобрался я как сделать массивы и с ними работать. Правда, Алексей (Aleks Versus) очень отрицательно отзывался по поводу использования gosub.
Имею некоторые вопросы по разработке. Вот мы положили в рюкзак много разных предметов. Предположим, что у нас в рюкзаке более 10 книг. Как написать, чтобы в списке показывалось типа “книга х10”. В уроках не нашел, где объясняют свёртку.
Есть ещё 1 момент, который я не понимаю в qsp. Если взять разработку игры на несколько сезонов про одного персонажа, то как перенести характеристики или события из одной части в другую? Я понимаю, что типа надо сохранять переменные и потом перенести их в файл, или типа того. Объясните, пожалуйста, принцип такого переноса.
Спасибо

Aleks Versus Moderator 07.07.2020 11:59 (5 years ago)

Poganec37:

Правда, Алексей (Aleks Versus) очень отрицательно отзывался по поводу использования gosub

нет, неправда. :D Я никогда не отзывался отрицательно по поводу использования gosub. Повсеместно их использую.

Считаемые предметы реализуются очень просто.

При добавлении предмета нужно проверять, сколько их у тебя уже есть. Для этого количество нужно хранить в переменной:

act "Поднять меч":
   ! проверяем есть ли мечи
   if меч_количество = 0:
      ! если мечей нет, добавляем меч в инвентарь
      addobj "Меч"
   end
   ! увеличиваем количество мечей на 1
   меч_количество = меч_количество+1
end

Чтобы в окне предметов отображалось число предметов, нужно вместо простого названия (”Меч”) добавлять название с количеством (”Меч х1” или “Меч х2” и т.д.), а старое название удалять. Тот же пример:

act "Поднять меч":
   ! удаляем старый предмет
   delobj "Меч х<<меч_количество>>"
   ! увеличиваем количество мечей на 1
   меч_количество = меч_количество+1
   ! добавляем новый предмет
   addobj "Меч х<<меч_количество>>"
end

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

debug=1

Тогда сохранения из первой части (файл .sav) можно будет использовать во второй.

Кстати. Вот здесь https://yadi.sk/d/VSgApaEy3Jx9VC я сейчас навожу порядок, и тут есть очень много разных примеров, и они ещё будут добавляться и корректироваться.

Log in or Register to post comments.