You are not logged in.
Pages: 1
Есть код:
while 2@ > 50 2@ < 78 01F3: car 1@ in_air end
Не компилируется.Есть вариант с while 2@ > 50 && 2@ < 78,но все равно ничего.Помогите.
Offline
В конструкцию к while можно подставить только одно условие. Но можно сделать так:
while true wait 0 // не забываем добавить задержку в цикл с (вероятно) большим кол-вом повторений // обновляем 2@ if or 2@ < 50 2@ > 78 then break end end
Last edited by DK22Pac (25-02-2017 22:34)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
Offline
Да блин,пора уже отвечать другим,а то ток спрашиваю)
Offline
В циклах (while, repeat) ещё можно использовать условный gosub.
while gosub @Check wait 0 //действия end :Check if and //или if or //условие 1 //условие 2 then 0485: return_true else 059A: return_false end return
У меня работало, это удобно. Можно и внутрь while true вставить условия, как показал DK22Pac.
Last edited by Vital (26-02-2017 21:52)
Offline
В циклах (while, repeat) ещё можно использовать условный gosub.
У меня работало, это удобно.
Не скажу, что это удобно. Код должен быть легко читаем и максимально оптимизирован. В этом код DK22Pac смотрится предпочтительней. Но код можно сократить до такого варианта:
while 2@ > 50 wait 0 // обновляем 2@ if 78 > 2@ jf break end
Last edited by kenking (27-02-2017 05:31)
Offline
В циклах (while, repeat) ещё можно использовать условный gosub.
while gosub @Check wait 0 //действия end :Check if and //или if or //условие 1 //условие 2 then 0485: return_true else 059A: return_false end returnУ меня работало, это удобно. Можно и внутрь while true вставить условия, как показал DK22Pac.
В этом варианте внутри Check не нужны 0485 и 059A, т.к. опкод jump_if_false (который используется в циклах) читает результат последней проверки, который обновляется после применения любого условного опкода.
while gosub @Check wait 0 //действия end :Check if and //или if or //условие 1 //условие 2 return
Но вообще это костыли от ограниченности компилятора(
Offline
В этом варианте внутри Check не нужны 0485 и 059A, т.к. опкод jump_if_false (который используется в циклах) читает результат последней проверки, который обновляется после применения любого условного опкода.
Ого, этого не знал, спасибо! А это не может сработать в условном gosub не в цикле? У меня такая (гуманитарная) логика: если в цикле при условном gosub можно обойтись без return_true/false, то без них можно обойтись везде, так как высокоуровневые конструкции игрой "разбираются" на низкоуровневые конструкции с метками, то есть на "начальном" уровне они ничем не отличаются друг от друга. Если так, то зачем нужны 0485 и 059А?
Но скорее всего, я просто недопонимаю.
Ещё раз благодарю за этот нюанс!
Offline
Seemann wrote:В этом варианте внутри Check не нужны 0485 и 059A, т.к. опкод jump_if_false (который используется в циклах) читает результат последней проверки, который обновляется после применения любого условного опкода.
Ого, этого не знал, спасибо! А это не может сработать в условном gosub не в цикле? У меня такая (гуманитарная) логика: если в цикле при условном gosub можно обойтись без return_true/false, то без них можно обойтись везде, так как высокоуровневые конструкции игрой "разбираются" на низкоуровневые конструкции с метками, то есть на "начальном" уровне они ничем не отличаются друг от друга. Если так, то зачем нужны 0485 и 059А?
Но скорее всего, я просто недопонимаю.Ещё раз благодарю за этот нюанс!
0485/059A удобно использовать как результат функции. Этот результат в простейшем случае равен результату одной проверки, как в нашем примере с Check. Но если взять более сложные примеры, где внутри функции есть цепочка проверок, то такой трюк уже не прокатит. Например:
:Check if x > 0 then if y > 0 then return_false ret 0 end end return_true ret 0
Ну и, вообще это "неочевидная возможность", которая во многих случаях вредит читабельности кода и отлавливанию ошибок. Подобные функции становятся очень чувствительными к порядку выполнения команд. Как и в обычном программировании, писать код в таком стиле не рекомендуется.
Offline
Pages: 1