Szerző Téma: clickedElement másik functionben  (Megtekintve 932 alkalommal)

clickedElement másik functionben
« Dátum: 2016. November 03. - 11:03:29 »
0 Show voters
Hali!
Bocs a címért, nem találtam jobbat!
Az lenne a gondom, hogy van egy objectem, amire ha rákattintunk, előjön egy panel, pár adatával együtt a klikkelt objektnek. Ez működik is. Ez úgy van megoldva, hogy onClientClick-nél ha ilyen objectre kattintunk, előhív egy function-t, és \"átviszi\" a clickedElementet(nem tudom máshogy írni:D), és a meghívott function-ben lekéri az adatokat, és előhívja a gui-t. Itt van a gond. Mivel ezeknek a guiknak szeretnék adni egy eventhandlert, hogy ha rákattintunk az egyik gombra a gui-n, történjen valami az objektel, de ugye az addEventHandler(ami a onClientGUIClick)-nél nem adhatom hozzá a clickedElementet, így annak nincs is értéke. Eddig úgy oldottam meg, hogy a legközelebbi fát csináltam meg clickedElementnél, de ennek ugye sok baja lehet.
Valaki meg tudja mondani, hogyan lehetne ezt a problémát megoldani?
Előre is köszönöm!

clickedElement másik functionben
« Válasz #1 Dátum: 2016. November 03. - 12:27:52 »
+1 Show voters
Az általam elképzelt verzió a következő lenne:
Van egy táblád, amiben vannak a fák lerakva, vagy akár csak egy fa pozíciót adsz meg és valami értéket adogatsz x vagy y-hoz, ezzel dobja mindig odébb a kövi fát a kívánt számig (for ciklussal az egész). A fáknak van egy azonosítója ami alapján eldönti a kattintásnál, hogy melyiket is nézed épp (eddig ezt megcsináltad, ha jól értem, csak más megoldással). Az általad vázolt dolog pedig csupán annyi, hogy if ágakkal játszok. Tehát a guinál léterhezol egy pl:
 
 if activetab = \"exit\" then ... -- ide beírod alá szépen, hogy mit akarsz, ha ez az \"ablak\" van megnyitva.

 
Sort, szépen megcsinálod, hogy mit akarsz belé, és a kattintásnál pedig megadod, hogy milyen poziciónál lépjen érvénybe ez a gomb. Én a gui-t elfelejteném, hiszen már semmivel se több rectangle-t odarakni, viszont legalább kinéz valahogy. Ha pedig rectangle-t csinálsz, akkor renderbe írod az általam előbb leírt elágazást. De mint mindenhol itt is többfajta megoldás létezik. :thumbsup:

clickedElement másik functionben
« Válasz #2 Dátum: 2016. November 03. - 13:27:38 »
0 Show voters
Hát.. Nem tudom, hogy most eldönti-e, hogy melyikre kattintottam. Minden lehozott fának vannak elementdatái(fák száma végtelen lehet, akármennyit le lehet rakni), és csak lekérem a clickedElement(amire kattintottunk) element datáját, és azt iratom ki.
Én egy olyat szerettem volna, hogy ugye ha rákattintunk akkor meghív egy functiont, amiben egy addEventHandler van, ami egy másik functionhöz vezet. Tehát ez az egész 3 function-ból van nekem most megoldva. Azt nem lehet, hogy a másodikat(panel megynitást) és a handleres functiont(amiben a gombokat kezelem) egybevonni? Az megoldaná a problémámat.
Sajnos amit írtál nem egészen értem, bocsi.

clickedElement másik functionben
« Válasz #3 Dátum: 2016. November 03. - 13:47:49 »
+1 Show voters
Tessék itt egy példa kattintás egy dobozra.
 
function clickBox(button, state, _, _, _, _, _, element)
if button == \"right\" and state == \"down\" then
if element and isElement(element) and getElementData(element, \"IllegalWeapon->Box->isBox\") or false then
   if tonumber(getElementData(localPlayer, \"Char->organization\")) and enabledFactions[tonumber(getElementData(localPlayer, \"Char->organization\"))] then
      local x,y,z = getElementPosition(localPlayer)
      local tx,ty,tz = getElementPosition(element)
      if getDistanceBetweenPoints3D(x,y,z , tx,ty,tz) <= 3 then
         triggerServerEvent(\"IllegalWeapon->PickBox\", localPlayer, localPlayer, getElementData(element, \"IllegalWeapon->Box->ID\")) -- itt hívja meg azt amit szeretnénk, hogy történjen mikor a dobozra nyomunk és minden teljesül
         clickedElement = element
      end
   end
end
end
end
addEventHandler(\"onClientClick\", root, clickBox)

 
Egybetudod vonni, egyszerűen meghívod a functiont a nevével és mögé raksz egy ()-t tehát pl:
 
 function gipszjakab ()
...
end
addCommanHandler(...)
function idehivommegmostagipszet ()
gipszjakab ()
end

clickedElement másik functionben
« Válasz #4 Dátum: 2016. November 03. - 14:20:07 »
0 Show voters
clickedElement = element

 
Most komoly, hogy ilyet is lehet, és ez működik is? Nem tudom most kipróbálni, de ezer hála, ha igen, mivel ezt én nem tudtam. Ezzel meg tudnám oldani a problémámat.

clickedElement másik functionben
« Válasz #5 Dátum: 2016. November 03. - 15:32:05 »
+1 Show voters
Idézetet írta: Hasirama date=1478179207\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"63492\" data-ipsquote-contentclass=\"forums_Topic

clickedElement = element

 
Most komoly, hogy ilyet is lehet, és ez működik is? Nem tudom most kipróbálni, de ezer hála, ha igen, mivel ezt én nem tudtam. Ezzel meg tudnám oldani a problémámat.
 
Persze! :) A script elejére ezt be kell még dobni azért:
local clickedElement = false

clickedElement másik functionben
« Válasz #6 Dátum: 2016. November 03. - 16:28:57 »
+1 Show voters
Köszi szépen, szuperül működik!

clickedElement másik functionben
« Válasz #7 Dátum: 2016. November 04. - 00:40:18 »
0 Show voters
Na fasza akkor!  :thumbsup:

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal