Простая Panorama (нужна помощь)

GameLorD

Пользователь
2 Июн 2019
40
0
Проект
Dragon defence
Ребят, кто разбирается в Panorama, для вас это будет дело 3 секунд, помогите пожалуйста... Для меня сейчас Panorama как на первых этапах Lua и я вообще практически ничего не понимаю.
Суть в том, что у меня есть файл round.xml и я в него вставил фото.
HTML:
<root>
    <styles>
        <include src="file://{resources}/styles/custom_game/round.css" />
    </styles>
    <scripts>
        <include src="file://{resources}/scripts/custom_game/round.js" />
    </scripts>
    <Panel class="Round" >
            <Image src="file://{resources}/images/round/wave_1.png" />
    </Panel>
</root>

В round.css всё просто (помещено вверху,ширина и высота под фото).
А вот что мне нужно сделать в round.js, чтобы данный файл отображался только тогда, когда мне нужно. В данном случае в определенное время (т.е. на игровом таймере показывает 30 секунд, появляется данное фото и через 5 секунд исчезает). И так далее, каждая следующая волна ссылается на это фото и оно появляется... Я просто никак не могу понять, как это работает, я видел и CreatePanel и GetChild и всякая разная фигня, но я ничего не понимаю. Помогите пожалуйста!

Кто напишет код, который будет работать, может сразу оставить номер сбер. карты или номер телефона, без вознаграждения не оставлю, спасибо большое))
 
я видел и CreatePanel и GetChild и всякая разная фигня,
Ничего этого здесь не нужно. Твоя задача максимально простая, хотя и способов решения несколько.

Во первых в xml старшей панели всегда лучше прописывать hittest="false"
Так же для начала в xml присвой картинке id, чтобы можно было получить ее в js таким образом:
var kartinka = $('#ID_Kartinki');

Потом сделай в css по ид картинки стиль, в котором она невидима. И стиль с классом в котором она видима. Тут можно сделать красивые анимации перехода между стилями, но я покажу самый простой вариант.
CSS:
#ID_Kartinki
{
    opacity: 0;
}

#ID_Kartinki.Shown
{
    opacity: 1;
}

А дальше я бы сделал циклический обработчик, который проверяет нужное условие и устанавливает картинке класс на видимость.

JavaScript:
function CheckKartinka(){
    var condition = ... // Условие на то, когда должна отображаться картинка. Тут в итоге должно получаться true/false. Сам подумай, что здесь написать. Скорее всего тебе понадобится Game.GetDOTATime или что-то такое
    $('#ID_Kartinki').SetHasClass( 'Shown', condition ); // Устанавливаем картинке класс на видимость в зависимости от условия.
    $.Schedule( 0.1, CheckKartinka ); // Schedule вызывает указанную функцию с задержкой. Таким образом функция будет бесконечно вызывать сама себя с интервалом 0.1с
}

$.Schedule( 0.1, CheckKartinka ); // Запускаем цикл
Вот на всякий случай, если еще тут не был: https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Panorama/Javascript/API
 
Последнее редактирование:
Ничего этого здесь не нужно. Твоя задача максимально простая, хотя и способов решения несколько.

Во первых в xml старшей панели всегда лучше прописывать hittest="false"
Так же для начала в xml присвой картинке id, чтобы можно было получить ее в js
var kartinka = $('#ID_Kartinki');

Потом сделай в css по ид картинки стиль, в котором она невидима. И стиль с классом в котором она видима. Тут можно сделать красивые анимации перехода между стилями, но я покажу самый простой вариант.
CSS:
#ID_Kartinki
{
    opacity: 0;
}

#ID_Kartinki.Shown
{
    opacity: 1;
}

А дальше я бы сделал циклический обработчик, который проверяет нужное условие и устанавливает картинке класс на видимость.

JavaScript:
function CheckKartinka(){
    var condition = ... // Условие на то, когда должна отображаться картинка. Тут в итоге должно получаться true/false. Сам подумай, что здесь написать. Скорее всего тебе понадобится Game.GetDOTATime или что-то такое
    $('#ID_Kartinki').SetHasClass( 'Shown', condition ); // Устанавливаем картинке класс на видимость в зависимости от условия.
    $.Schedule( 0.1, CheckKartinka ); // Schedule вызывает указанную функцию с задержкой. Таким образом функция будет бесконечно вызывать сама себя с интервалом 0.1с
}

$.Schedule( 0.1, CheckKartinka ); // Запускаем цикл
Вот на всякий случай, если еще тут не был: https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Panorama/Javascript/API
Большое тебе спасибо! Я сегодня вечером с работы приду, все попробую, проверю, надеюсь, что все получится... Очень уж тяжело самому разобраться в данной теме.
 
Ничего этого здесь не нужно. Твоя задача максимально простая, хотя и способов решения несколько.

Во первых в xml старшей панели всегда лучше прописывать hittest="false"
Так же для начала в xml присвой картинке id, чтобы можно было получить ее в js таким образом:
var kartinka = $('#ID_Kartinki');

Потом сделай в css по ид картинки стиль, в котором она невидима. И стиль с классом в котором она видима. Тут можно сделать красивые анимации перехода между стилями, но я покажу самый простой вариант.
CSS:
#ID_Kartinki
{
    opacity: 0;
}

#ID_Kartinki.Shown
{
    opacity: 1;
}

А дальше я бы сделал циклический обработчик, который проверяет нужное условие и устанавливает картинке класс на видимость.

JavaScript:
function CheckKartinka(){
    var condition = ... // Условие на то, когда должна отображаться картинка. Тут в итоге должно получаться true/false. Сам подумай, что здесь написать. Скорее всего тебе понадобится Game.GetDOTATime или что-то такое
    $('#ID_Kartinki').SetHasClass( 'Shown', condition ); // Устанавливаем картинке класс на видимость в зависимости от условия.
    $.Schedule( 0.1, CheckKartinka ); // Schedule вызывает указанную функцию с задержкой. Таким образом функция будет бесконечно вызывать сама себя с интервалом 0.1с
}

$.Schedule( 0.1, CheckKartinka ); // Запускаем цикл
Вот на всякий случай, если еще тут не был: https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Panorama/Javascript/API

Подскажи пожалуйста, я всё сделал, оно как бы работает, но я не могу задать событие правильно.

JavaScript:
function CheckKartinka(){
    var wave_1 = Entities.GetUnitName("npc_dota_hero_juggernaut")
    var condition = wave_1.IsAlive()// Условие на то, когда должна отображаться картинка. Тут в итоге должно получаться true/false. Сам подумай, что здесь написать. Скорее всего тебе понадобится Game.GetDOTATime или что-то такое
    $('#wave_1').SetHasClass( 'Shown', condition ); // Устанавливаем картинке класс на видимость в зависимости от условия.
    $.Schedule( 0.1, CheckKartinka ); // Schedule вызывает указанную функцию с задержкой. Таким образом функция будет бесконечно вызывать сама себя с интервалом 0.1с
}

$.Schedule( 0.1, CheckKartinka ); // Запускаем цикл
 
Код:
var wave_1 = Entities.GetUnitName("npc_dota_hero_juggernaut");
var condition = wave_1.IsAlive();
Это что? Даже комментировать страшно.

А какое условие вообще нужно? Если с то что ты изначально писал с таймером то просто сравнивай текущее время по модулю 60 с 30 и 35. Просто я не уверен, что Game.GetDOTATime() возвращает именно время на таймере. Проверь это с помощью $.Msg()
 
Это что? Даже комментировать страшно.

А какое условие вообще нужно? Если с то что ты изначально писал с таймером то просто сравнивай текущее время по модулю 60 с 30 и 35. Просто я не уверен, что Game.GetDOTATime() возвращает именно время на таймере. Проверь это с помощью $.Msg()
Мне просто нужно сделать так, чтобы при появлении каждого босса высвечивалась такая-то картинка.. Извиняй, что страшно комментировать, но мой уровень в Панораме где-то на уровне плинтусе (максимум могу создать мини квест, максимально простой), но он не отслеживает, к сожалению, когда появляется юнит на карте. А мне нужно именно это.. (

Принцип такой: Появился босс - появилось фото, повисело пару секунд, ушло.
Появился следующий босс, следующее фото и т.д.
 
Это что? Даже комментировать страшно.

А какое условие вообще нужно? Если с то что ты изначально писал с таймером то просто сравнивай текущее время по модулю 60 с 30 и 35. Просто я не уверен, что Game.GetDOTATime() возвращает именно время на таймере. Проверь это с помощью $.Msg()
Всё, спасибо, я справился
CustomGameEventManager:Send_ServerToAllClients("image_wave_1",{ yes = true })
 
Реклама: