forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Столкновения... (http://forum.boolean.name/showthread.php?t=7829)

Mark Castle 13.02.2009 18:13

Столкновения...
 
Народ!конечно,извиняюсь за глупый вопрос,но я чето не пойму,что мне следует сделать, для столкновений user`а и стены...
Разъясните пожалуйста!а то все базовое сделал,а столкновения не умею...
Код:

Graphics3D 1024,768,32
SetBuffer BackBuffer()
Global user
Global camera
Global pricel=LoadImage("D:\battle\prizel.bmp")
Global shot_sprite=LoadSprite("D:\battle\vistrel.bmp")
                  Type shot
                  Field entity
              Field dist#
                  End Type
                        Function karta()
                              robot = LoadMesh ("G:\Blitz3d\Media\geometricks_models\stealth\stealth.3ds")
PositionEntity robot,0,10,-50
ScaleEntity robot,0.1,0.1,0.1
stena = CreateCube()
PositionEntity stena, 0,ground,100
ScaleEntity stena,2,5,5
texture = LoadTexture("D:\battle\k.jpg")
texture1 = LoadTexture("d:\battle\i.jpg")
EntityTexture stena,texture
For x = 1 To 100
razm = CopyEntity(stena)
PositionEntity razm, Rnd(-120, 120), 0, Rnd(1, 240)
Next
                        End Function
            Function create_Shot(x#,y#,z#,pitch#,yaw#,roll#)
background = PlayMusic("D:\battle\str.wav")
            s.shot=New shot
        s\entity=CopyEntity(shot_sprite)
        PositionEntity s\entity,x#,y#,z#,1
        RotateEntity s\entity,pitch#,yaw#,roll#,1
            Return True
            End Function
    Function create_user(x#=0,y#=1,z#=0)
    MidHandle pricel MaskImage pricel,255,255,255
    user=CreateSphere()
    camera=CreateCamera(user)
    PositionEntity camera,0,1,-0.5
    PositionEntity user,x#,y#,z#
    End Function
          Function update_user()
        V#=0.2
        u#=70
        TurnEntity camera,MouseYSpeed(),0,0
        TurnEntity user,0,-MouseXSpeed(),0
        If KeyDown(30)=1 Then MoveEntity user,-V#,0,0
        If KeyDown(32)=1 Then MoveEntity user,V#,0,0
        If KeyDown(17)=1 Then MoveEntity user,0,0,+V#
        If KeyDown(31)=1 Then MoveEntity user,0,0,-V#
        MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
        If Abs(EntityPitch#(camera))>u# RotateEntity camera,u#*Sgn(EntityPitch#(camera)),0,0
        If MouseHit(1) create_shot(EntityX(user),EntityY(user),EntityZ(user),EntityPitch(camera),EntityYaw(user),0)
        TranslateEntity user,0,-G#,0
End Function

  Function create_world()
  terrain=CreatePlane()
  tertex=LoadTexture("D:\battle\parket.jpg")
  ScaleTexture tertex,5,5
  EntityTexture terrain,tertex
  FreeTexture tertex
  create_user()
karta()
  End Function
Function update_shot()
        vs#=1
        max_dist#=1000
        For a.shot=Each shot
 MoveEntity a\entity,0,0,vs#
 a\dist#=a\dist#+vs#
 If a\dist#>max_dist#
        FreeEntity a\entity
        Delete a
 ElseIf EntityCollided(a\entity,TERRT) <> 0
        FreeEntity a\entity
        Delete a
 EndIf
        Next
       
End Function
                            create_world()
                            While Not KeyHit(1)=1
                        update_user()
                    update_shot()
                            RenderWorld()
                        DrawImage pricel,MouseX(),MouseY()
                            HideEntity shot_sprite

                                Flip
                    Wend
                            End


Petrofan 13.02.2009 18:49

Ответ: Столкновения...
 
Во первых нужно делать так
Const user_type=1,stena_type=2 -это ты присваеваешь переменой значение если у тебя будут пули то ето будет выгледить так Puli_type=3

entitytype user,user_type - пишем после создания играка
entitytype stena,stena_type - пишем после создания стены

Collisions user_type,stena_type,2,2

Во вторых
Перед RenderWorld напиши UpdateWorld

Mark Castle 13.02.2009 19:04

Ответ: Столкновения...
 
тоесть так?а то что то не работает...
Код:

Graphics3D 1024,768,32
SetBuffer BackBuffer()
Global user
Global camera
Const user_type = 1,stena_type = 2
Global pricel=LoadImage("D:\battle\prizel.bmp")
Global shot_sprite=LoadSprite("D:\battle\vistrel.bmp")
                  Type shot
                  Field entity
              Field dist#
                  End Type
                        Function karta()
                              robot = LoadMesh ("G:\Blitz3d\Media\geometricks_models\stealth\stealth.3ds")
PositionEntity robot,0,10,-50
ScaleEntity robot,0.1,0.1,0.1
stena = CreateCube()
EntityType stena,stena_type
Collisions user_type,stena_type,2,2
PositionEntity stena, 0,ground,100
ScaleEntity stena,2,5,5
texture = LoadTexture("D:\battle\k.jpg")
texture1 = LoadTexture("d:\battle\i.jpg")
EntityTexture stena,texture
For x = 1 To 100
razm = CopyEntity(stena)
PositionEntity razm, Rnd(-120, 120), 0, Rnd(1, 240)
Next
                        End Function
            Function create_Shot(x#,y#,z#,pitch#,yaw#,roll#)
background = PlayMusic("D:\battle\str.wav")
            s.shot=New shot
        s\entity=CopyEntity(shot_sprite)
        PositionEntity s\entity,x#,y#,z#,1
        RotateEntity s\entity,pitch#,yaw#,roll#,1
            Return True
            End Function
    Function create_user(x#=0,y#=1,z#=0)
    MidHandle pricel MaskImage pricel,255,255,255
    user=CreateSphere()
    camera=CreateCamera(user)
    PositionEntity camera,0,1,-0.5
    PositionEntity user,x#,y#,z#
EntityType user,user_type
    End Function
          Function update_user()
        V#=0.2
        u#=70
        TurnEntity camera,MouseYSpeed(),0,0
        TurnEntity user,0,-MouseXSpeed(),0
        If KeyDown(30)=1 Then MoveEntity user,-V#,0,0
        If KeyDown(32)=1 Then MoveEntity user,V#,0,0
        If KeyDown(17)=1 Then MoveEntity user,0,0,+V#
        If KeyDown(31)=1 Then MoveEntity user,0,0,-V#
        MoveMouse GraphicsWidth()*0.5,GraphicsHeight()*0.5
        If Abs(EntityPitch#(camera))>u# RotateEntity camera,u#*Sgn(EntityPitch#(camera)),0,0
        If MouseHit(1) create_shot(EntityX(user),EntityY(user),EntityZ(user),EntityPitch(camera),EntityYaw(user),0)
        TranslateEntity user,0,-G#,0
End Function

  Function create_world()
  terrain=CreatePlane()
  tertex=LoadTexture("D:\battle\parket.jpg")
  ScaleTexture tertex,5,5
  EntityTexture terrain,tertex
  FreeTexture tertex
  create_user()
karta()
  End Function
Function update_shot()
        vs#=1
        max_dist#=1000
        For a.shot=Each shot
 MoveEntity a\entity,0,0,vs#
 a\dist#=a\dist#+vs#
 If a\dist#>max_dist#
        FreeEntity a\entity
        Delete a
 ElseIf EntityCollided(a\entity,TERRT) <> 0
        FreeEntity a\entity
        Delete a
 EndIf
        Next
       
End Function
                            create_world()
                            While Not KeyHit(1)=1
                        update_user()
                    update_shot()
                            RenderWorld()
                        DrawImage pricel,MouseX(),MouseY()
                            HideEntity shot_sprite

                                Flip
                    Wend
                            End


Dream 13.02.2009 20:01

Ответ: Столкновения...
 
Читай
Цитата:

Во вторых
Перед RenderWorld напиши UpdateWorld

NitE 13.02.2009 20:08

Ответ: Столкновения...
 
тоесть как... тоест так что надо подумать больше десяти минут

impersonalis 13.02.2009 20:42

Ответ: Столкновения...
 
блин ну совсем FAQ засрали!
модеры, АУ!

Mark Castle 17.02.2009 20:02

Ответ: Столкновения...
 
и еще...знаю,что это самый тупой вопрос на форуме...
Function mina()
mina = CreateCylinder()
ScaleEntity mina,0.1,0.1,0.1
EntityType mina,mina_type
For x = 1 To 500
mina = CopyEntity(mina)
PositionEntity mina, Rnd(-450, 450),0, Rnd(-450, 450)
Next
End Function
как сделать так,чтобы когда я наступал на мину шото происходило?

3dr1aN 17.02.2009 20:29

Ответ: Столкновения...
 
entitydistance

Mark Castle 17.02.2009 20:54

Ответ: Столкновения...
 
Цитата:

Сообщение от 3dr1aN (Сообщение 98450)
entitydistance

а пример можно?

newman 17.02.2009 21:47

Ответ: Столкновения...
 
dist = EntityDistance(player, mina)
if dist < 5 шото происходит

LUK 17.02.2009 23:49

Ответ: Столкновения...
 
Цитата:

Сообщение от Mark Castle (Сообщение 98448)
как сделать так,чтобы когда я наступал на мину шото происходило?

Купить тратилу и... или взять ножичек и самому отпилить... или... блин мозги включить...

Начинающие кодеры, заглядывайте хоть когда-нибудь в маны... тем более, что их столько для вас создано... Я о статьях одноименного блиц ет сетера (ссылка)...
Например, замечательное введение в программирование игр Мэта Меркулова (ссылка)...
Либо так же интересный ман от Scaven Razor Blada (ссылка)...

Осиль хотя бы эти 2 мана для начала, а потом задавай вопросы.

За оффтоп не обижаться - просто по твоим сообщениям видно что данные учебники ты и в глаза не видел... а так... копи пастиком и справочкой ;)

ABTOMAT 18.02.2009 01:45

Ответ: Столкновения...
 
Цитата:

а так... копи пастиком и справочкой
Справочку не трожь: справочка рулит...

paxlich 18.02.2009 23:27

Ответ: Столкновения...
 
блин, ну что вы так взъелись-то на беднягу?.. ведь даже при обилии учебников и примеров и хороших справок всё равно трудно что-либо сделать так-как требуется некоторый промежуток времени на уяснение принципа создания алгоритмов... согласитесь, что тут далеко не все смогли сразу писать программы, которые бы чётко выполняли всё, что придумал моск начинающего творца...

а по поводу мин: проще было всё теми же коллизиями... только помимо стен нужно ещё задать и коллизии между игроком и миной...


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

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