function PedsPrepareConversation(ped1,ped2,distance,walkSpeed)
PlayerSetPunishmentPoints(0)
if PedGetWeapon(gPlayer) == 437 then
PedSetWeapon(gPlayer,-1)
end
if PedIsInAnyVehicle(gPlayer) then
PedWarpOutOfCar(gPlayer)
end
PedStop(ped2)
local x,y,z = PedGetPosXYZ(ped2)
PedMoveToXYZ(ped1,walkSpeed,x,y,z)
local r1 = x + distance
local r2 = y + distance
local r3 = x - distance
local r4 = y - distance
x,y,z = PedGetPosXYZ(ped1)
PedFaceXYZ(ped2,x,y,z)
repeat
Wait(0)
until PedInRectangle(ped1,r1,r2,r3,r4)
PedStop(ped1)
x,y,z = PedGetPosXYZ(ped2)
PedFaceXYZ(ped1,x,y,z)
x,y,z = PedGetPosXYZ(ped1)
PedFaceXYZ(ped2,x,y,z)
end
我在Lua编程,我对变量的声明感到有些困惑。因为"本地"已经在x,y,z的一个实例上声明了,然后x,y,z的另一个实例已声明它们是不同的变量或它们是否相同?
感谢。
答案 0 :(得分:1)
在您显示的代码中x,y,z
仅声明一次(作为本地),然后多次分配新值。其他x,y,z与本地x,y,z的范围相同,并在声明后出现。以下是一些例子
do -- new scope
local x,y,z = 'a','b','c' -- declared local
print(x, y, z) -- prints a b c
do
x,y,z = 1,2,3 -- new scope, but still referring to the local x, y, z (higher scope)
print(x, y, z) -- prints 1 2 3
end
print(x, y, z) -- prints 1 2 3 (modified the original)
end -- end local x, y, z scope (now they are garbage)
-- global scope, no x, y, z is defined here
print(x, y, z) -- prints nil nil nil
范围是一个很大的概念,因此请查看Scope Tutorial以进行更全面的讨论。
答案 1 :(得分:0)
PIL第4.2节对此进行了详细讨论。因为您的local x,y,z
位于相同的"块"代码为x,y,z=...
,它们是相同的。