Zaloguj się by uzyskać pełen dostęp. Nie masz jeszcze konta? Założ je już teraz w kilka sekund.

Wysłany: 2013-07-06, 22:28


Dorex

Rick






Wiek: 28
Na forum: 4856 dni
Posty: 108

Piwa: 2471

Respekt: 296,3
Respekt: 296,3Respekt: 296,3Respekt: 296,3

Witam napisa?em kod na fizyk? obiekt?w dzia?a on ale chcia?bym jak by to powiedzie? jako? go poprawi? aby obiekty spada? nie w sztuczny spos?b lecz realistyczny wiem o tym ?e mog? do tego wykorzysta? masy obiektu co dodali nam nasi developerzy z mta sa

PodstawowyObiekt = createObject(1341,2486.0048828125,-1663.7138671875,20)



function FizykaObiekty()
local players = getElementsByType("object")
for k,v in ipairs(players) do
if v == getLocalPlayer() then else
local x1,y1,z1 = getElementPosition (getLocalPlayer())
local x2,y2,z2 = getElementPosition (v)
local visibleto = getDistanceBetweenPoints3D(x1,y1,z1,x2,y2,z2)
local sx,sy,sz = getScreenFromWorldPosition ( x2,y2,z2+1.05 )
local gx = getGroundPosition ( x2,y2,z2 )
local Wysokosc = math.ceil(getGroundPosition ( x1,y1,z1 ))
setElementData(getLocalPlayer(),"Wysokosc",Wysokosc)
setElementData(v,"Wysokosc",gx)
local H = math.ceil(getElementData(v,"Wysokosc"))
local WH = math.ceil(getElementData(getLocalPlayer(),"Wysokosc"))
local P1 = (0.1)
local NX = x2 + 0.1
local NY = y2+ 0.1
local x0, y0, z0, x1, y1, z1 = getElementBoundingBox (v )
if H == WH then
else
setElementPosition ( v,NX,NY,z2 - P1)
end
end
end
end
addEventHandler("onClientRender",getRootElement(),FizykaObiekty)

Jeszcze przyznaje ?e ma bug kiedy obiekt jest ni?ej ni? my to si? zapada pod ziemie je?li by kto? pom?g? b?d? wdzi?czny i postawie piwo.

Postaw piwo autorowi tego posta
 

 
Wysłany: 2013-07-06, 23:57


Piorun







Wiek: 32
Na forum: 6712 dni
Posty: 1837
Nick w MP: Piorun

Piwa: 516

Respekt: 480,7
Respekt: 480,7

Dorex, hm no to ja Ci mo?e podpowiem od strony Fizyki jak to powinno dzia?a?.

Puszczasz "cia?o" (czyli obiekt) trzymany powiedzmy na wysoko?ci h. Obiekt ten porusza si? ruchem niejednostajnie przyspieszonym poniewa? gdy pu?cimy obiekt otrzymuje on pr?dko?? V. Przy czym im bli?ej ziemi tym wi?ksza warto?? pr?dko?ci. Przy dotkni?ciu pod?o?a stosujemy si? do 3 prawa Newtona czyli

"Je?eli cia?o A dzia?a na cia?o B si?? F to cia?o B dzia?a na cia?o A si?? -F".

Kr?cej: je?eli kogo? uderzysz zaboli go. Wypada?oby warto?? F obliczy?, potem obliczy? do jakiego miejsca nasze cia?o pofrunie i mniej wi?cej tak to sklepa?. Tyle z teorii. My?l?, ?e powinno Ci to w jaki? spos?b pom?c (nie licz na gotowca z mojej strony :P ). Nie korzystaj z interpolateBetween poniewa? tam jest niby ta interpolacja "InOutBounce" lecz sprawia to, ?e dany obiekt "podskakuje" jakby by? stworzony z gumy.
Oczywi?cie pr?dko?? z jak? dane cia?o b?dzie si? porusza?o zale?y od jego masy. Przychodzi nam z pomoc? wz?r na si?? czyli
Kod:

F = m * a

gdzie:
m - masa cia?a
a - przyspieszenie
F - si?a

Polecam zapozna? si? z podr?cznikami do Fizyki dla szk?? ?rednich. Tam jest multum przyk?ad?w i wzor?w. My?l?, ?e w gimnazjum te? by? ten ruch omawiany lecz w liceum wi?cej bazuje si? na punktach odniesienia oraz uk?adzie kartezja?skim (x,y,z).

//EDIT

Nie patrzy?em w kod ale aby uzyska? po?o?enie "ziemi" w danym punkcie u?yj getGroundPosition().

Podpis
Możesz mnie znaleźć na: Facebook
Postaw piwo autorowi tego posta
 

 
Wysłany: 2013-07-07, 01:39


Dorex

Rick






Wiek: 28
Na forum: 4856 dni
Posty: 108

Piwa: 2471

Respekt: 296,3
Respekt: 296,3Respekt: 296,3Respekt: 296,3

Dobrze wykona?em to jak mi poradzi?e? tylko ten obiekt aktualnie to w?zek z hotdogami tak dzia?a na niego przyspieszenie ?e on si? wbija w ziemie

PodstawowyObiekt = createObject(1341,1920.00000,-2391.42871,150)



function FizykaObiekty()
local players = getElementsByType("object")
for k,v in ipairs(players) do
if v == getLocalPlayer() then else
local x1,y1,z1 = getElementPosition (getLocalPlayer())
local x2,y2,z2 = getElementPosition (v)
local visible = getDistanceBetweenPoints3D(x1,y1,z1,x2,y2,z2)
local sx,sy,sz = getScreenFromWorldPosition ( x2,y2,z2+1.05 )
local gx = getGroundPosition ( x2,y2,z2 )
local Wysokosc = Zaokraglaj(getGroundPosition ( x1,y1,z1 ))
local WysokoscObiektu = Zaokraglaj(getGroundPosition ( x2,y2,z2 ))
local P1 = (0.1)
local NX = x2 + 0.1
local NY = y2+ 0.1
local speedx, speedy, speedz = getElementVelocity (v)
local aktualnapredkosc = (speedx^2 + speedy^2 + speedz^2)^(0.5) * 2
local m = getObjectMass(v)
local a = aktualnapredkosc
local F = m*a
local Predkosc = F/m
local droga = z2 - gx
local Czas = droga/Predkosc
setElementData(getLocalPlayer(),"Wysokosc",Wysokosc)
setElementData(v,"Wysokosc",WysokoscObiektu)
local H = math.ceil(getElementData(v,"Wysokosc"))
local WH = math.ceil(getElementData(getLocalPlayer(),"Wysokosc"))


if H == WH then
setElementVelocity (v ,0,0,0)
else
setElementVelocity (v , speedx*Predkosc, speedy*Predkosc, speedz-0.00001/500*Predkosc)
outputDebugString ("Sila:"..F.." Predkosc:"..Predkosc.." WyskoscObiektu:"..WysokoscObiektu.." Wyskosc Gracza:"..Wysokosc.." Droga:"..droga.." Czas:"..Czas,3,255,255,0)
end
end
end
end
addEventHandler("onClientRender",getRootElement(),FizykaObiekty)

[ Dodano: 2013-07-07, 01:44 ]


Dodaje zdj?cie jako Pokazanie problem na dole w debugscript pokazuje wszystkie dane odnosnie obiektu

Postaw piwo autorowi tego posta
 

 
Wysłany: 2013-07-07, 04:04


Piorun







Wiek: 32
Na forum: 6712 dni
Posty: 1837
Nick w MP: Piorun

Piwa: 516

Respekt: 480,7
Respekt: 480,7

Z tego co pami?tam wi?kszo?? obiekt?w w GTA ma r??nie ustawiany ?rodek ci??ko?ci, a akurat getElementPosition pobiera ten ?rodek. Logiczne jest to, ?e ?rodek ci??ko?ci ka?dego "cia?a" znajduje si? na jego ?rodku. Cz?owiek ma go mniej wi?cej na wysoko?ci bioder. Pokombinuj z warto?ciami wysoko?ci - co? dodaj, co? odejmij i wyjdzie. Nic innego nie poradzisz.

Podpis
Możesz mnie znaleźć na: Facebook
Postaw piwo autorowi tego posta
 

 
Wysłany: 2013-07-07, 14:17


Dorex

Rick






Wiek: 28
Na forum: 4856 dni
Posty: 108

Piwa: 2471

Respekt: 296,3
Respekt: 296,3Respekt: 296,3Respekt: 296,3

Mam pewien pomys? my?l? ?e mo?e si? uda? pami?tam ?e map editor stosowa? vectory aby obiekty nie spada?y i mo?na by?o je ustawia? na innych obiektach my?l? jak takiego czego? dokona?

Podpis
Nie bądź 🐷 postaw piwo.
Postaw piwo autorowi tego posta
 

 
Tagi: fizyka :: obiektów
Anonymous





Na forum: 245 dni
Posty: 1



Anonymous Koniecznie zajrzyj na:






Skocz do:  
Wyświetl posty z ostatnich:   
GTAONLINE.PL » JĘZYKI PROGRAMOWANIA » LUA Ten temat jest zablokowany bez możliwości zmiany postów lub pisania odpowiedzi

Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Dodaj temat do Ulubionych
Wersja do druku