forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Помогите c системою выстрела (http://forum.boolean.name/showthread.php?t=3000)

GetMan 22.03.2007 03:29

Помогите c системою выстрела
 
Всем привет!
Щас пытаюсь написать банальную игрушку типа танчиков!
Проблема такова: Как мне осуществить систему выстрела танка?
Ну или польот снаряда, угол, силу?
Заране спосибо!

moka 22.03.2007 04:17

Re: Помогите c системою выстрела
 
Я делал выстрелы танчика, но там у меня была подогнана формула. Тоесть скорость была постоянная. А вот угол был что-то там связано с растоянием. Крч я делал пивот при создании танка, и позиционировал его в место дула. А при выстреле создавал цилиндр И делал ЭнтитиПоинт на цель. Затем поднимал (поворачивал по Yaw), и запускал. Для пуль у меня был массив. Двигались они уже независемо, и просто медленно поворачивали вниз. И проверял на коллизию Танк(Бокс)-Пуля(полигон).

mr.DIMAS 22.03.2007 16:47

Re: Помогите c системою выстрела
 
Лучше посмотри в FAQ( там есть тема Создаем свой First Person Shooter) и там упоминается как делать выстрелы

moka 23.03.2007 00:49

Re: Помогите c системою выстрела
 
mr.DIMAS ты не совсем понял, тут варриант создания выстрелов и имитации Ядра от танка. Ядро не летит прямо, оно летит и на него действует притяжение, это нужно учитывать.

johnk 23.03.2007 04:27

Re: Помогите c системою выстрела
 
Так в чем проблема? Когда ядро вылетает из дула, просто вычетаешь из Y некоторое значение.

moka 23.03.2007 05:09

Re: Помогите c системою выстрела
 
это грубый способ. Мой способ более реалестичен и хорош (имхо)

HolyDel 23.03.2007 10:52

Re: Помогите c системою выстрела
 
твой способ тоже грубый.
даеш гравитацию для ядра!

jimon 23.03.2007 12:06

Re: Помогите c системою выстрела
 
вот код для поиска угла в 2д системе

Код:

; This function was made by Mikle's friend Dima (DiGlib)
; with the help of MathLab. Thanks to MathLab developers!

; Calculates the angle, on which the gun must be rotated
; so that the bullet would appear currently at (x, y).
; x, y - target coordinates
; V - speed of bullet
; g - acceleration that will influence on bullet's Y-speed
;      when it flies (usually gravity and Archimede's Force)
; bStraight - if the trajectory is grazing or curved

Function CalcGunAngle#(x#, y#, V#, g#, bStraight = True)
        Local V2#, x2#, y2#, yg#
        Local w1#, w2#, sw2#, atx#, aty#, Ang#
        g = g*0.5
        V2 = V*V
        x2 = x*x
        y2 = y*y
        yg = y*g
        If bStraight > 0
                w1 = Sqr((V2*V2+4*V2*yg-4*g*g*x2))
        Else
                w1 = -Sqr((V2*V2+4*V2*yg-4*g*g*x2))
        EndIf
        w2 = (V2+2*yg+w1)/(x2+y2)
        sw2 = Sqr(w2)
        atx = (0.5*y*w2-g)/(V*sw2)
        aty = 0.5*sw2*x/V
        Ang = ATan2(atx, aty)
        Return Ang
End Function

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; TEST

Global GW = 640
Global GH = 480

Graphics GW, GH, 16, 2
SetBuffer BackBuffer()

HidePointer

Font = LoadFont("Courier", 16, True, False, False)
SetFont Font

Local Gravity# = -0.5
Local ArchForce# = 0.2

Local p_x# = 0
Local p_y# = 0

Local v# = 15
Local g# = Gravity+ArchForce

Local radius# = 5

Local ang#[1]
Local x#[1], y#[1]
Local cx#[1], cy#[1]
Local vx#[1], vy#[1]

While Not KeyHit(1)
        ; Set the target to mouse's position
        p_x = MouseX()
        p_y = GH-MouseY()

        ; Change speed, if necessary
        v = v+(MouseDown(1)-MouseDown(2))*0.1
        If (v < 0) Then v = 0

        ; Calculate angles
        ang[0] = CalcGunAngle(p_x, p_y, v, g, True)
        ang[1] = CalcGunAngle(p_x, p_y, v, g, False)

        Cls

        ; Show target
        Color 255, 0, 0
        Oval p_x-radius, GH-p_y-radius, radius*2, radius*2, False

        ; Draw trajectories
        For ia = 0 To 1
                If Upper(ang[ia]) <> "NAN"
                        x[ia] = 0
                        y[ia] = 0
                        cx[ia] = 0
                        cy[ia] = 0
                        vx[ia] = v*Cos(ang[ia])
                        vy[ia] = v*Sin(ang[ia])
                        Color 255*ia, 255, 0
                        For t# = 1 To 1000
                                cx[ia] = vx[ia]*t
                                cy[ia] = vy[ia]*t+(g*0.5)*t^2
                                Line x[ia], GH-y[ia], cx[ia], GH-cy[ia]
                                x[ia] = cx[ia]
                                y[ia] = cy[ia]
                        Next
                EndIf
        Next

        ; Output results
        Color 255, 255, 255
        txt_x = 0
        txt_y = 0
        Text txt_x, txt_y, "Move mouse to change target position."
        txt_y = txt_y + FontHeight()
        Text txt_x, txt_y, "Mouse left/right button to change speed."
        txt_y = txt_y + FontHeight()
        Text txt_x, txt_y, "X = "+p_x
        txt_y = txt_y + FontHeight()
        Text txt_x, txt_y, "Y = "+p_y
        txt_y = txt_y + FontHeight()
        Text txt_x, txt_y, "Speed = "+v
        txt_y = txt_y + FontHeight()
        Text txt_x, txt_y, "Acceleration = "+g
        txt_y = txt_y + FontHeight()
        Text txt_x, txt_y, "Grazing angle = "+ang[0]
        txt_y = txt_y + FontHeight()
        Text txt_x, txt_y, "Curved angle = "+ang[1]
        txt_y = txt_y + FontHeight()

        Flip
Wend

FreeFont Font

EndGraphics

End

в етом коде все есть что нужно
осталось только в 3д перевести :) думаю с етим проблем не будет ... если правильно спроекцируеш ..

GetMan 23.03.2007 21:07

Re: Помогите c системою выстрела
 
Пасиба друзя!
Вот у меня созрел такой вот вопрос:
Как зделать передачу траектории снаряда (типа кинетической силы) например противнику или другому обекту на карте при столкновение?

HolyDel 23.03.2007 21:15

Re: Помогите c системою выстрела
 
ну как.
перемещаеш снаряд, все равно придется.
значит есть переменные изменения позиции (там где translateentity)
назовем их dx,dy,dz, вот и при столкновении, противнику задаеш эти три пременные и двигаеш противника translateentity, плано уменьшая значения перменных d*. например dx=dx*0.9/

GetMan 23.03.2007 21:20

Re: Помогите c системою выстрела
 
Ясно, щас попробую!


Часовой пояс GMT +4, время: 17:38.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot