Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 21.07.2007, 03:40   #1
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Плохо Стрельба

Вопщем дело такое:
Чтобы зделать выстрелы почитал темку про FPS
ну вопщем так и зделал, стреляет. Но!
Мои патрны летят только горизонтально, а ведь они вылетают из объекта.

Подскажите как реализовать вылет одного объекта из другого под определённым углом, тоесть под тем углом на который повёрнут объект из которого будет вылетать другой.
Ещё точне: тоесть например есть у меня кубик я вращаю этот кубик во все стороны мышью, и мне нужно чтобы из этого кубика вылетал объект именно туда и под тем углом куда повёрнут этот кубик.

А второе я не знаю как зделать это то, как заставить патроны лететь в прицел, тоесть:

у меня к моему объекту зади привязана камера аля вид от третьего лица, и из этого объекта летят пули, они летят из него прямо, а мне нужно чтобы они летели в прицел, а сам прицел находится над этим объектом.

Вот такие пироги )

Помогите, разъясните.
Желательно сразу кодом.
Заранее спасибо.
(Offline)
 
Ответить с цитированием
Старый 21.07.2007, 04:33   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Re: Стрельба

Graphics3D 800,600,32

Type s
	Field entity
	Field upt
End Type

Function s_construct.s(ctrl,ctrl2)
	obj.s=New s
	obj\entity=CreateSphere(8,ctrl)
	EntityParent obj\entity,0
	PointEntity obj\entity,ctrl2
	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,0,dt*0.1
		If EntityDistance(o\entity,a)>100
			FreeEntity o\entity
			Delete o
		EndIf
	Next
End Function

Global a=CreateCube()
EntityAlpha a,0.5
b=CreateCube(a)
ScaleEntity b,0.25,.25,.25
EntityColor b,100,0,0
MoveEntity b,0,0,3

camera=CreateCamera()
MoveEntity camera,0,0,-15

light=CreateLight()

Color 255,255,0
SetBuffer BackBuffer()
time=MilliSecs()
While Not KeyHit(1)
	dtm=MilliSecs()-time
	time=MilliSecs()
	v#=dtm*0.01
	TurnEntity a,v,v,v
	If MilliSecs()-tcr>300
		s_construct(a,b)
		tcr=MilliSecs()
	EndIf
	s_update()
	RenderWorld()
	;=
	CameraProject camera,EntityX(a),EntityY(a),EntityZ(a)
	x1=ProjectedX()
	y1=ProjectedY()
	CameraProject camera,EntityX(b,True),EntityY(b,True),EntityZ(b,True)
	x2=ProjectedX()
	y2=ProjectedY()
	Line x1,y1,x2,y2
	;=
	Flip
Wend
End
например.. вообще - можно прилумать немало способов
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 21.07.2007, 18:44   #3
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Очень тебе благадарен!

Пытаюсь пока разобраться до конца с кодом и подстроить под игру )
Но пока получаются ужасные вещи =))

Зато я теперь знаю как можно будет сделать шлейф от двигателей корабля )

http://img411.imageshack.us/img411/9161/xblcz2.jpg

.....

Уже начинаю понимать что к чему ))

http://img265.imageshack.us/img265/91/xxbluh1.jpg

.....

Всё теперь адназначна разобрался!
Патроны летят под тем углом под которым находится корабль,
и бьют в прицел.

Ещё раз большущее спасибо!

http://img413.imageshack.us/img413/5629/xxxbllx3.jpg
(Offline)
 
Ответить с цитированием
Старый 21.07.2007, 20:16   #4
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Re: Стрельба

Чтото всётаки недопонял и теперь встал вопрос:
а как сместить точку создания выстрела?

мне так и надо чтобы птрон вылетал из корабля, но надо чтобы из определённой части, из орудия.
надо сместить место создания патрона

вроди сместить объект ничего сложного нету, но именно в таком коде у меня не получается.
(Offline)
 
Ответить с цитированием
Старый 21.07.2007, 20:29   #5
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Re: Стрельба

всё сделал =)
добавил:

    MoveEntity obj\entity,100,100,100
в функцию s_construct.s

))
(Offline)
 
Ответить с цитированием
Старый 25.07.2007, 15:00   #6
Fray
AnyKey`щик
 
Регистрация: 11.03.2007
Сообщений: 5
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Стрельба

Не подскажете а как сделать так чтоб выстрел происходил при нажатие мыше в этом коде:
Graphics3D 800,600,32

Type s
	Field entity
	Field upt
End Type

Function s_construct.s(ctrl,ctrl2)
	obj.s=New s
	obj\entity=CreateSphere(8,ctrl)
	EntityParent obj\entity,0
	PointEntity obj\entity,ctrl2
	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,0,dt*0.1
		If EntityDistance(o\entity,a)>100
			FreeEntity o\entity
			Delete o
		EndIf
	Next
End Function

Global a=CreateCube()
EntityAlpha a,0.5
b=CreateCube(a)
ScaleEntity b,0.25,.25,.25
EntityColor b,100,0,0
MoveEntity b,0,0,3

camera=CreateCamera()
MoveEntity camera,0,0,-15

light=CreateLight()

Color 255,255,0
SetBuffer BackBuffer()
time=MilliSecs()
While Not KeyHit(1)
	dtm=MilliSecs()-time
	time=MilliSecs()
	v#=dtm*0.01
	TurnEntity a,v,v,v
	If MilliSecs()-tcr>300
		s_construct(a,b)
		tcr=MilliSecs()
	EndIf
	s_update()
	RenderWorld()
	;=
	CameraProject camera,EntityX(a),EntityY(a),EntityZ(a)
	x1=ProjectedX()
	y1=ProjectedY()
	CameraProject camera,EntityX(b,True),EntityY(b,True),EntityZ(b,True)
	x2=ProjectedX()
	y2=ProjectedY()
	Line x1,y1,x2,y2
	;=
	Flip
Wend
End
(Offline)
 
Ответить с цитированием
Старый 25.07.2007, 15:15   #7
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Стрельба

IMh1=MouseHit(1)
If IMh1
Стрелять
EndIf
(Offline)
 
Ответить с цитированием
Старый 30.07.2007, 14:06   #8
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Re: Стрельба

Ну вот у меня как

If MouseHit(1) Then 

s_construct(ggkor,prc)
s_constructt(ggkor,prc)
las1()

End If
Вопщем так везде делается )
тут у меня вызывается 2 функции создания выстрелов
(потому что 2 орудия)

а функция las1 проигрывает звук выстрела

Function las1()

PlaySound laser1

End Function
а сам звук выстрела в глобале

Global laser1=LoadSound("Data\sound\laser.wav")
(Offline)
 
Ответить с цитированием
Старый 30.07.2007, 16:10   #9
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Стрельба

Лучше убрать las1(), хоть и конечно удобнее - кода меньше, но плохо то что вызов функции, а функция в 1 строку. Поэтому лучше не функцию вызывать а сам звук.
(Offline)
 
Ответить с цитированием
Старый 30.07.2007, 17:09   #10
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Re: Стрельба

Сообщение от MoKa
Лучше убрать las1(), хоть и конечно удобнее - кода меньше, но плохо то что вызов функции, а функция в 1 строку. Поэтому лучше не функцию вызывать а сам звук.
Не могу не согласиться.
но просто я игру строю таким методом что всё в отдельных функциях
а эти функции расположены в файлах
а сами файлы уже вызываются ехешником

я ещё не известно что с las1() функцией тварить буду в будущем
так что оставлю так
(Offline)
 
Ответить с цитированием
Старый 30.07.2007, 17:27   #11
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Стрельба

Ну если ещё и в будущем, тогда +1, за то что смотришь вперёд
Но были тесты, и конечно это нужно мнооого раз функций вызивать, но всёже скорость если ещё и параметров побольше от вызова функций может падать. Но я думаю это никому не грозит, тольо если РТС с 2к юнитами, и все ещё друг друга перебирают и много всяких функций юзат, тогда да там и сам блиц умрёт не от функций.
(Offline)
 
Ответить с цитированием
Старый 30.07.2007, 18:25   #12
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Re: Стрельба

Да. понимаю )
функции зло )
(Offline)
 
Ответить с цитированием
Старый 30.07.2007, 18:29   #13
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Re: Стрельба

функции зло )
Нет нет. Функции это круто, только вот функция для 1 строки =) Где нету никакой передачи, и возвращений, ну это просто брутально. Но если она будет больше и Очень часто использоваться тогда её существование оправдывается.
(Offline)
 
Ответить с цитированием
Старый 31.07.2007, 10:31   #14
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Re: Стрельба

Но если она будет больше и Очень часто использоваться тогда её существование оправдывается.
Не факт. Можно и без функций писать, так только вроде код не читабельнее будет.
(Offline)
 
Ответить с цитированием
Старый 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)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стрельба Mark Castle 3D-программирование 24 21.11.2011 22:03
стрельба очеридями и одиночная IGR Алгоритмика 15 02.10.2007 09:06


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com