YND Posted October 10, 2014 Share Posted October 10, 2014 В серверном файле находится массив из маркеров. А в клиентском файле мне нужно узнать, стоит ли игрок в маркере ( isElementWithinMarker() ). Как передать элемент маркера (массив элементов) из серверного файла в клиентский? + Функция, в которой находится isElementWithinMarker(), вызывается из другого ресурса через call. Link to comment
YND Posted October 10, 2014 Author Share Posted October 10, 2014 function getMarkers ( idMarkerGet ) return markers[idMarkerGet] end UPD: Но, не хочет работать... Link to comment
DakiLLa Posted October 10, 2014 Share Posted October 10, 2014 Как вариант присвоить каждому маркеру ID с помощью setElementID Далее, где угодно (хоть на клиенте, хоть из другого ресурса) достаете элемент нужного маркера с помощью getElementByID , и уже применяете к нему isElementWithinMarker(). Link to comment
YND Posted October 11, 2014 Author Share Posted October 11, 2014 Спасибо. Не будет ли это слишком ресурсоёмко, при большом количестве маркеров? UPD: В серверном файле, где создаются маркеры, в консоль выводит "corona", а в клиентском файле, не выводит "так как outputDebugString - bollean ". outputDebugString(getMarkerIcon(getElementByID("marker name"))) UPD2: И мой первый вариант не работает. В "Ybuilding/meta.xml" прописано: function="getMarkers" type="server" /> В серверном файле: function getMarkers ( idMarkerGet ) return idMarkerGet end И при вызове функции из клиентского файла outputDebugString(getMarkers("test text")) выдает, мол "глобальный getMarkers возвращает nil" Link to comment
lcd1232 Posted October 11, 2014 Share Posted October 11, 2014 Значит idMarkerGet равно nil'у Link to comment
YND Posted October 12, 2014 Author Share Posted October 12, 2014 "idMarkerGet" равен ведь "test text", значит getMarkers должен вернуть "test text", но, не возвращает. Link to comment
TheNormalnij Posted October 12, 2014 Share Posted October 12, 2014 Минимальный вариант на ресурсоемкость: --server local myMarkerRoot = createElement( 'myMarkerRoot', 'myMarkerRoot' ) -- где-то в скрипте создаем маркеры local marker = createMarker( x, y, z, type ... ) setElementParent( marker, myMarkerRoot ) --client local myMarkerRoot = getElementByID( 'myMarkerRoot' ) -- используем маркеры for key, marker in pairs( getElementChildren( myMarkerRoot ) ) do end Link to comment
YND Posted October 12, 2014 Author Share Posted October 12, 2014 Спасибо за ответ, но как я понял, каждый раз придется проверять каждый маркер на "isElementWithinMarker()". Поэтому, буду использовать эвенты onClientMarkerHit и onClientMarkerLeave, и записывать их с помощью setElementData(localPlayer, "inMarker", source) Если так делать не стоит, напишите, пожалуйста. Link to comment
TheNormalnij Posted October 13, 2014 Share Posted October 13, 2014 Красиво было бы так не делать, всегда есть оптимальный безопасный путь. Link to comment
YND Posted October 14, 2014 Author Share Posted October 14, 2014 А чем он небезопасен? Просто если делать по вашему примеру, то придется каждый раз проверять все (100-1000) маркеров на "isElementWithinMarker()", что, как мне кажется, более ресурсоёмко, чем 2 лишних эвента, не так ли? Link to comment
TheNormalnij Posted October 14, 2014 Share Posted October 14, 2014 Потому что то значение, которое вы записываете, используется только для записи/выгрузки какой-то специфической информации, которую вряд ли вы будете использовать где-то ещё. Локальная переменная то, что надо. Не забудь, что обработчик можно вешать сразу на всю ветвь myMarkerRoot. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now