Jump to content

isElementOnScreen


Recommended Posts

Собственно вопрос заключается в следующем: с использованием данной функции хотел определить виден ли элемент на экране. Функция вроде как работает, но почему то видит элемент через объекты. Пример:

Ник персонажа Cooper виден через стену здания:

thumb.png

Вот собственно и сам персонаж Cooper, который был виден с помощью этой функции через стену:

thumb.png

Исходник:

  
  
                          ttext1 = dxText:create("Mike",-70,70,false) 
                          ttext1:font("tahoma") 
                          ttext1:scale(2) 
                          ttext1:type("border", 2, 0, 0, 0, 255) 
                          ttext1:color(5,97,250,200) 
  
                          ttext2 = dxText:create("Rachel",-70,70,false) 
                          ttext2:font("tahoma") 
                          ttext2:scale(2) 
                          ttext2:type("border", 2, 0, 0, 0, 255) 
                          ttext2:color(5,97,250,200) 
  
                          ttext3 = dxText:create("Will",-70,70,false) 
                          ttext3:font("tahoma") 
                          ttext3:scale(2) 
                          ttext3:type("border", 2, 0, 0, 0, 255) 
                          ttext3:color(5,97,250,200) 
  
                          ttext4 = dxText:create("Cooper",-70,70,false) 
                          ttext4:font("tahoma") 
                          ttext4:scale(2) 
                          ttext4:type("border", 2, 0, 0, 0, 255) 
                          ttext4:color(5,97,250,200) 
  
function NameTags () 
  
local peds = getElementsByType("ped") 
  
    for id,p in ipairs(peds) do 
          if (getElementData (p, "team") == "surv") then  
  
               local mx,my,mz = getElementPosition(p)  
               local sx,sy = getScreenFromWorldPosition ( mx, my, mz) 
  
  
               if (getElementData (p, "zclass") == "nick")  then  
  
                         if  isElementOnScreen ( p ) then 
                          ttext1:position(sx,sy - 110,false) 
                          ttext1:visible(true) 
                         else 
                          ttext1:visible(false) 
                         end 
  
               elseif (getElementData (p, "zclass") == "alice")  then  
  
                         if  isElementOnScreen ( p ) then 
                          ttext2:position(sx,sy - 110,false) 
                          ttext2:visible(true) 
                         else 
                          ttext2:visible(false) 
                         end 
  
               elseif (getElementData (p, "zclass") == "will")  then  
  
                         if  isElementOnScreen ( p ) then 
                          ttext3:position(sx,sy - 110,false) 
                          ttext3:visible(true) 
                         else 
                          ttext3:visible(false) 
                         end 
  
               elseif (getElementData (p, "zclass") == "coach")  then  
  
                         if  isElementOnScreen ( p ) then 
                          ttext4:position(sx,sy - 110,false) 
                          ttext4:visible(true) 
                         else 
                          ttext4:visible(false) 
                         end 
  
               end 
          end 
        end 
  
  
  
end 
addEventHandler ( "onClientPreRender", getRootElement(), NameTags ) 
  
  

Есть ли возможность сделать так, чтобы через стены не было видно тэги персов?

---

чтобы код подсвечивался как LUA, можно юзать ВВ код [cоde=lua][/cоde]

Link to comment

эта функция не проверяет видимость, она только проверяет находится ли элемент в пределах экрана. Поэтому элемент может находится в зоне экрана, но перекрываться другими объектами и быть не видим. Чтобы проверить еще и видимость объекта от камеры игрока до нужного элемента, нужно заюзать https://wiki.multitheftauto.com/wiki/IsLineOfSightClear. Она проверяет видимость и перекрываемость разными элементами, нужные типы элементов/объектов можно указать. Просто узнаешь позицию камеры и позицию, допустим головы другого игрока и подставляешь эти позиции в эту функцию.

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...