Терабайт исходников
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений (для 5,374 пользователей)
|
Re: Стрельба
Итак. Систему стрельбы от имперсоналиса использую на своём корабле. Всё прекрасно летает стреляет. Решил заняться юзером, и вот дошло дело до стрельбы юзера. Решил использовать ту же систему. Стрелять то стреляет, но не хочет бить через прицел почемуто. Посмотрите код, что где нетак? Почему патрон не летит через прицел?

;--------------------------------------------------------------------------------------- WORLD:
Graphics3D 1024, 768, 32
SetBuffer BackBuffer()
HidePointer
Global mXSp#
Global mYSp#
Global k1
Global k1u#=0
Global camerauser
Global pushka
Global prck1
Global sostpushka#=0
Global earth
Type s
Field entity
Field upt
End Type
Function k1()
k1 = CreateSphere(30)
ScaleEntity k1,50,50,50
PositionEntity k1,0,180,0
RotateEntity k1, 0, 180, 0
camerauser = CreateCamera(k1)
PositionEntity camerauser,0,0,0
RotateEntity camerauser, 0, 0, 0
CameraRange camerauser,0.01,100000000
End Function
Function pushka()
pushka = CreateCube(camerauser)
ScaleEntity pushka,0.02,0.15,0.03
RotateEntity pushka ,90,6,0
PositionEntity pushka,0.2,-0.2,0.3
pushkatex=LoadTexture("Data\object\weapons\colt\colt5.bmp")
ScaleTexture pushkatex,150,150
EntityTexture pushka,pushkatex
prck1=LoadImage("Data\textures\prc.bmp")
MidHandle prck1
MaskImage prck1,255,255,255
End Function
Global l = CreateLight()
TurnEntity l,30,20,0
Pl= CreatePlane()
earth=LoadTexture("Data\textures\15820652.jpg")
ScaleTexture earth,150,150
EntityTexture Pl,earth
sky=MakeSkyBox("Data\textures\sky")
ScaleEntity sky,1000000,1000000,1000000
Function MakeSkyBox( file$ )
m=CreateMesh()
;front face
b=LoadBrush( file$+"_FR.bmp",49 )
s=CreateSurface( m,b )
AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;right face
b=LoadBrush( file$+"_LF.bmp",49 )
s=CreateSurface( m,b )
AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;back face
b=LoadBrush( file$+"_BK.bmp",49 )
s=CreateSurface( m,b )
AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;left face
b=LoadBrush( file$+"_RT.bmp",49 )
s=CreateSurface( m,b )
AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
;top face
b=LoadBrush( file$+"_UP.bmp",49 )
s=CreateSurface( m,b )
AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush b
ScaleMesh m,100,100,100
FlipMesh m
EntityFX m,9
EntityOrder m,10
Return m
End Function
Function k1u()
XYkrenk1#=0.5
TSpeed#=0.05
mXSp=MouseXSpeed()
mYSp=MouseYSpeed()
TurnEntity camerauser,mYSp*TSpeed#,0,0
TurnEntity k1,0,-mXSp*TSpeed#,0
userbeg#=8
userbeg2#=4
u#=70
If MouseHit(1) Then
s_construct(pushka,prck1)
End If
If KeyDown(30) Then
MoveEntity k1,-userbeg2#,0,0
End If
If KeyDown(32) Then
MoveEntity k1,+userbeg2#,0,0
End If
If KeyDown(17) Then
MoveEntity k1,0,0,+userbeg#
End If
If KeyDown(31) Then
MoveEntity k1,0,0,-userbeg2#
End If
If KeyDown(30) Or KeyDown(32) Or KeyDown(17) Or KeyDown(31) Then
sostpushka#=2
Else
sostpushka#=1
End If
MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
If Abs(EntityPitch#(camerauser))>u# RotateEntity camerauser,u#*Sgn(EntityPitch#(camerauser)),0,0
If sostpushka#=1 Then
TurnEntity pushka,Sin(MilliSecs()*.0)*0.01,Sin((MilliSecs()+9) *.05)*0.03,Sin((MilliSecs()+500)*.1)*0.005
End If
If sostpushka#=2 Then
TurnEntity pushka,Sin(MilliSecs()*.0)*0.01,Sin((MilliSecs()+9) *.5)*0.3,Sin((MilliSecs()+500)*.1)*0.03
End If
End Function
Function s_construct.s(pushka,prck1)
obj.s=New s
obj\entity=CreateSphere(10,pushka)
EntityColor obj\entity,100,0,0
EntityParent obj\entity,0
MoveEntity obj\entity,0,0,0
RotateEntity obj\entity,180,0,0
ScaleEntity obj\entity,3.5,2.5,2.5
obj\upt=-1
Return obj
End Function
Function s_update()
For o.s=Each s
If o\upt=-1
o\upt=MilliSecs()
EndIf
dt=MilliSecs()-o\upt
o\upt=MilliSecs()
MoveEntity o\entity,0,2,dt*1
If EntityDistance(o\entity,pushka)>50000
FreeEntity o\entity
Delete o
EndIf
Next
End Function
While Not KeyDown(1)
If KeyHit(16) Then
k1()
pushka()
k1u#=1
End If
If k1u#=1 Then
k1u()
s_update()
End If
If KeyHit(18) Then
k1u#=0
FreeEntity pushka
FreeEntity camerauser
FreeEntity k1
End If
UpdateWorld
RenderWorld
If k1u#=1 Then
DrawImage prck1,GraphicsWidth()/2,GraphicsHeight()/2
End If
Flip
Wend
End
Далее разъясню что здесь есть что:
mXSp# и mYSp# - переменные для управления юзера и его камерой.
k1 - юзер
camerauser - сами думаю поняли
pushka - тоже объяснять нечего
prck1 - прицел
sostpushka#=0 - состояние оружия тобиш покачивание, интенсивность покачивания зависит от того стоит персонаж или бежит.
earth - текстура земли
Pl - земля
k1u# - переменная отвечающая за загрузку и удаление функций
Type s - патрон
Function k1() - создание юзера и его камеры
Function pushka() - создание оружия и прицела
Function k1u() - управление юзером
Function s_construct.s(pushka,prck1) - создание патрона
Function s_update() - движение и удаление патрона
If KeyHit(16) - если нажата клавиша Q создаём юзера и оружие и меняем переменную k1u# с 0 на 1
If k1u#=1 - если переменная равна одному включаем управление юзера и функцию полёта патрона
If KeyHit(1  - если нажата клавиша E удаляем юзера с оружием, камеру и выключаем функции управления юзером и полёта патрона
и ещё если If k1u#=1 крепим прицел к центру экрана
Исходняк можно скачать тут - http://ifolder.ru/3454174
Народ, что я упустил???? Почему не бьёт через прицел?
|