Как сделать?
…
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
oleksandrigo,
ок. А фактически при работе локации-счётчика на планшете её код срабатывал через секунду, или всё дольше-дольше и дольше? На каком плеере запускаешь на планшете? Похоже на то, что плеер на планшете тормозит с выполнением команд, но надо разобраться.
Aleks Versus,
Впринципе проблема именно в msecscount’e. Меняя сеттаймер или вейт оно обновляет правильно(не мсекскаунт). Этой разницы в 10к и больше по факту нету, чисто сама функция обманывает.
Проверил даже на смартфоне и пока грешу на версии 8.1 и более.
Смартфон realme xt andro 10
Планшет lenovo andro 8.1
(Модель позже уточню)
oleksandrigo,
да странно. Надо смотреть в исходниках, откуда оно достаёт время. Я пока не понимаю. Но ты так и не ответил, на каком плеере запускаешь? Если от Сидхарта, то он я думаю сможет поправить.
Aleks Versus,
Нет его версия мне не понравилась, но на всех проверял 1.3, 2.1.2, и 2.0.0 на всех одна и та же проблема
Вопрос по локации счётчика, она работает всегда? Можно её отключать и включать по желанию? Какой максимальный промежуток тика можно задать?
UPD
Добрался до компа и разобрался с тем, с чем хотел.
Можно выставить сеттаймер на 1 час и в любой момент изменить значение. Т.е. путем управления периодом тика можно “отключать” $counter.
Понятия не имею, сколько ресурсов потребляет секундомер, который этим управляет, но код в локации $counter не будет перечитываться всегда, а только когда он не нужен.
dmvikar,
отключить локацию-счётчик можно так:
$counter=""
Можно назначать разные локации-счётчики в разные моменты игры. Многие об этом забывают, но это один из способов разгружать локацию-счётчик от огромного количества кода.
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,
Сорян, если я тут изобрел велосипед, но такой инфы я не нашел в видеоуроках и ЧаВо.
Здравствуйте!
- Спасибо @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. Если взять разработку игры на несколько сезонов про одного персонажа, то как перенести характеристики или события из одной части в другую? Я понимаю, что типа надо сохранять переменные и потом перенести их в файл, или типа того. Объясните, пожалуйста, принцип такого переноса.
Спасибо
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 я сейчас навожу порядок, и тут есть очень много разных примеров, и они ещё будут добавляться и корректироваться.