Тема: Стрельба
Показать сообщение отдельно
Старый 23.09.2007, 17:15   #15
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 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


Народ, что я упустил???? Почему не бьёт через прицел?
__________________
Проект "Deathbring World - Rangers" и его финансовая поддержка:
https://boosty.to/deathbringrangers

Я на - TWITCH
Канал на YouTube
(Offline)
 
Ответить с цитированием