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=16604)

Devilox 06.04.2012 09:14

Дубликат в дубликате
 
Я создаю врагов и мне нужно заставить их стрелять не зависимо друг от друга, но что-то нефига не работает, помогите найти ошибку :dontknow:
Вот код:

Основной код:
Код:

;--begin--;
Graphics3D 640,480,16,1
SetBuffer BackBuffer()
;--begin--;

Include "functions.bb"

;--constants--;
Global health%=100;--health
Global pl_sp#=0.5;--player`s speed
Global half_pl_sp#=0.25;--1/2 player`s speed
Global gravity# = 0.09;--gravity
Global yspeed#=0;--player`s veltical speed
Global jspeed# = 1.4;--jump speed
Global simp_m=1;--one-key movement
Global weapon=1;--type of weapon
Global move=1

Global w_s1=1;--action weapon 1
Global w_s2=1;--action weapon 2

Global gun_b1%=100;--weapon 1 ammo
Global gun_b2%=50;--weapon 2 ammo

Global h_m#=0.08;--veltical speed objects
Global h_dir#=-0.005;--direction with speed

Global en_wait=10
;--constants--;

;--images--;
health_im=LoadImage("textures\health.bmp")
el_gun_ammo=LoadImage("textures\el_gun_ammo.bmp")
pl_gun_ammo=LoadImage("textures\pl_gun_ammo.bmp")
;--images--;

;--sounds--;
gun_s1=LoadSound("sounds\gun1.ogg")
;--sounds--;

;--collision types--;
Global TYPE_PLAYER=1, TYPE_BULLET=2, TYPE_WALL=3, TYPE_HEALTH=4, TYPE_IMP_AMMO=5, TYPE_PL_AMMO=6, TYPE_EN_BULLET=7
;--collision types--;

;--types--;
Type T_bullet
        Field ent
        Field time
End Type

Type T_aspirin
        Field ent
End Type

Type T_plasma
        Field ent
End Type

Type T_impulse
        Field ent
End Type

Type T_bullet_en
        Field ent
        Field time
End Type

Type T_enemy
        Field ent
End Type
;--types--;

;--sprites--;
Global shot1=LoadSprite("textures\shot1.bmp")
ScaleSprite shot1,3,3
EntityRadius shot1,1.5
EntityType shot1,TYPE_BULLET
HideEntity shot1

Global shot2=LoadSprite("textures\shot2.bmp")
ScaleSprite shot2,3,3
EntityRadius shot2,1.5
EntityType shot2,TYPE_BULLET
HideEntity shot2

Global shot_en1=LoadSprite("textures\shot3.bmp",2)
ScaleSprite shot_en1,5,5
EntityRadius shot_en1,1.5
EntityType shot_en1,TYPE_EN_BULLET
HideEntity shot_en1

;--sprites--;

;--main--;
pln=CreatePlane()
PositionEntity pln,0,-1,0
EntityType pln,TYPE_WALL
EntityColor pln,50,100,150

Global player=CreateSphere()
PositionEntity player,0,10,50
EntityRadius player,4
EntityType player, TYPE_PLAYER
EntityAlpha player,1

Global cam=CreateCamera()
EntityParent cam,player
PositionEntity cam,0,5,0

Global enemy=LoadMesh("models\level1\enemy1.3ds")
PositionEntity enemy,-5,10,-5
ScaleEntity enemy,0.5,0.5,0.5

;--main--;

;--models--;
gun1=LoadMesh("models\level1\gun1.3ds")
ScaleEntity gun1,0.05,0.05,0.05
EntityParent gun1,cam
PositionEntity gun1,-1,-3,3
RotateEntity gun1,0,-90,0
HideEntity gun1
EntityOrder gun1,-1

gun2=LoadMesh("models\level1\gun2.3ds")
ScaleEntity gun2,0.05,0.05,0.05
EntityParent gun2,cam
PositionEntity gun2,-2,-7,0
RotateEntity gun2,0,-90,0
HideEntity gun2
EntityOrder gun2,-1

Global h_asp=LoadMesh("models\level1\health.3ds")
ScaleEntity h_asp,0.25,0.25,0.25
EntityType h_asp, TYPE_HEALTH
HideEntity h_asp
EntityFX h_asp,1

Global pl_am=LoadMesh("models\level1\pl_am.b3d")
ScaleEntity pl_am,0.1,0.1,0.1
EntityType pl_am, TYPE_PL_AMMO
EntityFX pl_am,1
HideEntity pl_am

Global im_am=LoadMesh("models\level1\im_am.b3d")
ScaleEntity im_am,0.1,0.1,0.1
EntityType im_am, TYPE_IMP_AMMO
PositionEntity im_am,5,1,5
EntityFX im_am,1
HideEntity im_am

;--models--;

;--pivots--;
Global piv_fire=CreatePivot()
EntityParent piv_fire,cam
PositionEntity piv_fire,-1.5,-1.5,8

;--pivots--;

;--collisions--;
Collisions TYPE_PLAYER, TYPE_WALL, 2, 3
Collisions TYPE_BULLET, TYPE_WALL, 2, 3
Collisions TYPE_PLAYER, TYPE_HEALTH, 2, 3
Collisions TYPE_PLAYER, TYPE_IMP_AMMO, 2, 3
Collisions TYPE_PLAYER, TYPE_PL_AMMO, 2, 3
Collisions TYPE_PLAYER, TYPE_EN_BULLET, 2, 3
;--collisions--;

;--creations--;
CreateFirstAid()
CreateImpulseAmmo()
CreatePlasmaAmmo()
CreateEnemy()
;--creations--;

;-------------------------------------------------------------

While Not KeyHit(1)

;-------------------------------------------------------------

;--enemy fire waiting--;
en_wait=en_wait-1
If en_wait<0
        CreateEnemyBullet.T_bullet_en()
        en_wait=20
EndIf

;--enemy fire waiting--;

If KeyHit(18)
        health=health-1
EndIf

;--death--;
If health<=0
        health = 0       
        move=0
        PositionEntity cam,0,-2,0
        RotateEntity cam,0,0,-80
        HideEntity gun1
        HideEntity gun2
EndIf
;--death--;

;--changing direction Y movement objects--;
h_m=h_m+h_dir               
If h_m<-0.08
        h_dir=0.005
ElseIf h_m>0.08               
        h_dir=-0.005
EndIf       
;--changing direction Y movement objects--;

;--FIRE!!!--;
If move=1
        If MouseHit(1)
                If weapon=1
                        If w_s1=1
                                gun_b1=gun_b1-1
                                CreateBullet()
                                PlaySound gun_s1
                        EndIf
                ElseIf weapon=2
                        If w_s2=1
                                gun_b2=gun_b2-1
                                CreateBullet()
                                PlaySound gun_s1
                        EndIf
                EndIf
        EndIf
EndIf
;--FIRE!!!--;

;--changing weapon--;
If move=1
        wheel=MouseZSpeed()
        If wheel=-1
                weapon=weapon+1
                If weapon=3
                        weapon=1
                EndIf
        ElseIf wheel=1
                If weapon=1
                        weapon=3
                EndIf
                weapon=weapon-1
        EndIf

        If weapon=1
                ShowEntity gun1
                HideEntity gun2
        ElseIf weapon=2
                ShowEntity gun2
                HideEntity gun1
        EndIf
EndIf
;--changing weapon--;

;--ammo limit--;
If gun_b1=0
        w_s1=0
Else
        w_s1=1
EndIf

If gun_b1>200
        gun_b1=200
EndIf

If gun_b2=0
        w_s2=0
Else
        w_s2=1
EndIf

If gun_b2>100
        gun_b2=100
EndIf
;--ammo limit--;

;--bullet movement--;
For ex_bul.T_bullet = Each T_bullet
        UpdateBullet(ex_bul)
Next

For ex_bul_en.T_bullet_en = Each T_bullet_en
        UpdateEnemyBullet(ex_bul_en)
Next

;--bullet movement--;

;--first aid actions--;
UpdateFirstAid(ex_asp.T_aspirin)
;--first aid actions--;

;--impulse ammo actions--;
UpdateImpulseAmmo(ex_im.T_impulse)
;--impulse ammo actions--;

;--plasma ammo actions--;
UpdatePlasmaAmmo(ex_pl.T_plasma)
;--plasma ammo actions--;

;--jump--;
JumpPlayer()
;--jump--;

;--player`s movement--;
MovementPlayer()
;--player`s movement--;

;--enemy`s movement--;
UpdateEnemy(ex_en.T_enemy)
;--enemy`s movement--;

UpdateWorld()
RenderWorld()

;--ammo indicator--;
If weapon=1
        DrawImage el_gun_ammo,540,430
        Text 575,450,Str(gun_b1)
ElseIf weapon=2
        DrawImage pl_gun_ammo,540,430
        Text 575,450,Str(gun_b2)
EndIf
;--ammo indicator--;

;--health indicator--;
DrawImage health_im,0,430
Text 55,450,Str(health)
;--health indicator--;

Flip

Wend

End

Функции:

Код:

Function MovementPlayer()
        If move=1
;--movement--;
                If simp_m=1
                        If KeyDown(17) MoveEntity player,0,0,pl_sp
                        If KeyDown(31) MoveEntity player,0,0,-pl_sp       
                        If KeyDown(30) MoveEntity player,-pl_sp,0,0
                        If KeyDown(32) MoveEntity player,pl_sp,0,0
                EndIf

                If KeyDown(17) And KeyDown(30)
                        simp_m=0
                        MoveEntity player,-half_pl_sp,0,half_pl_sp
                ElseIf KeyDown(17) And KeyDown(32)
                        MoveEntity player,half_pl_sp,0,half_pl_sp
                        simp_m=0
                ElseIf KeyDown(31) And KeyDown(30)
                        MoveEntity player,-half_pl_sp,0,-half_pl_sp
                        simp_m=0
                ElseIf KeyDown(31) And KeyDown(32)
                        MoveEntity player,half_pl_sp,0,-half_pl_sp
                        simp_m=0
                Else
                        simp_m=1
                EndIf
;--movement--;

;--free look--;
                TurnEntity player, 0, 0 -MouseXSpeed()*0.1, 0
                TurnEntity cam, MouseYSpeed()*0.1, 0, 0                       
                MoveMouse GraphicsWidth()/2, GraphicsHeight()/2
                RotateEntity cam, EntityPitch#(cam), 0, 0
;--free look--;
        EndIf
End Function

;-------------------------------------------------------------

Function JumpPlayer()
;--gravity--;
        yspeed=yspeed-gravity
        TranslateEntity player,0,yspeed,0
;--gravity--;

;--jump--;
        coll = EntityCollided(player,TYPE_WALL)
        If coll
                collide_y = CollisionNY(player,CountCollisions(player) ) 
                If 0<collide_y
                        yspeed=0
                        jump=1
                Else
                        jump=0
                EndIf
        Else
                jump=0
        EndIf
;--jump--;

        If move=1
;--jump on--;       
                If jump=1
                        If KeyDown(57)
                                yspeed = jspeed
                        EndIf
                EndIf
;--jump on--;
        EndIf       
End Function

;-------------------------------------------------------------

Function CreateBullet.T_bullet()
        ex_bul.T_bullet = New T_bullet
        ex_bul\time = 150
        If weapon=1       
                ex_bul\ent = CopyEntity(shot2,piv_fire)
        ElseIf weapon=2
                ex_bul\ent = CopyEntity(shot1,piv_fire)
        EndIf
        EntityParent ex_bul\ent,0
        Return ex_bul
End Function

;-------------------------------------------------------------

Function UpdateBullet(ex_bul.T_bullet)
        ex_bul\time = ex_bul\time-1
        MoveEntity ex_bul\ent,0,0,5
        If ex_bul\time<=0 Or EntityCollided(ex_bul\ent,TYPE_WALL)
                FreeEntity ex_bul\ent
                Delete ex_bul
                Return
        EndIf
End Function

;-------------------------------------------------------------

Function CreateFirstAid()
        ex_asp.T_aspirin = New T_aspirin
        ex_asp\ent = CopyEntity(h_asp)
        NameEntity (ex_asp\ent,Handle(ex_asp))
        PositionEntity ex_asp\ent,20,0,0

        ex_asp.T_aspirin = New T_aspirin
        ex_asp\ent = CopyEntity(h_asp)
        NameEntity (ex_asp\ent,Handle(ex_asp))
        PositionEntity ex_asp\ent,40,0,0

        ex_asp.T_aspirin = New T_aspirin
        ex_asp\ent = CopyEntity(h_asp)
        NameEntity (ex_asp\ent,Handle(ex_asp))
        PositionEntity ex_asp\ent,60,0,0
End Function

;-------------------------------------------------------------

Function UpdateFirstAid(ex_asp.T_aspirin)
        For ex_asp.T_aspirin = Each T_aspirin
                TurnEntity ex_asp\ent,0,2,0       
                MoveEntity ex_asp\ent,0,h_m,0
        Next
        Local asp_col% = EntityCollided(player,TYPE_HEALTH)
        If(asp_col<>0)
                If health<100
                        ex_asp.T_aspirin = Object.T_aspirin(EntityName(asp_col))
                        FreeEntity(asp_col)
                        Delete(ex_asp)
                        health=health+20
                EndIf
        EndIf
End Function

;-------------------------------------------------------------

Function CreateImpulseAmmo()
        ex_im.T_impulse = New T_impulse
        ex_im\ent = CopyEntity(im_am)
        NameEntity (ex_im\ent,Handle(ex_im))
        PositionEntity ex_im\ent,20,2,20
       
        ex_im.T_impulse = New T_impulse
        ex_im\ent = CopyEntity(im_am)
        NameEntity (ex_im\ent,Handle(ex_im))
        PositionEntity ex_im\ent,40,2,20
       
        ex_im.T_impulse = New T_impulse
        ex_im\ent = CopyEntity(im_am)
        NameEntity (ex_im\ent,Handle(ex_im))
        PositionEntity ex_im\ent,60,2,20
       
        ex_im.T_impulse = New T_impulse
        ex_im\ent = CopyEntity(im_am)
        NameEntity (ex_im\ent,Handle(ex_im))
        PositionEntity ex_im\ent,80,2,20
       
        ex_im.T_impulse = New T_impulse
        ex_im\ent = CopyEntity(im_am)
        NameEntity (ex_im\ent,Handle(ex_im))
        PositionEntity ex_im\ent,100,2,20
End Function

;-------------------------------------------------------------

Function UpdateImpulseAmmo(ex_im.T_impulse)
        For ex_im.T_impulse = Each T_impulse
                TurnEntity ex_im\ent,0,2,0       
                MoveEntity ex_im\ent,0,h_m,0
        Next
        Local im_col% = EntityCollided(player,TYPE_IMP_AMMO)
        If(im_col<>0)
                If gun_b1<200
                        ex_im.T_impulse = Object.T_impulse(EntityName(im_col))
                        FreeEntity(im_col)
                        Delete(ex_im)
                        gun_b1=gun_b1+50
                EndIf
        EndIf
End Function

;-------------------------------------------------------------

Function CreatePlasmaAmmo()
        ex_pl.T_plasma = New T_plasma
        ex_pl\ent = CopyEntity(pl_am)
        NameEntity (ex_pl\ent,Handle(ex_pl))
        PositionEntity ex_pl\ent,20,2,40

        ex_pl.T_plasma = New T_plasma
        ex_pl\ent = CopyEntity(pl_am)
        NameEntity (ex_pl\ent,Handle(ex_pl))
        PositionEntity ex_pl\ent,40,2,40

        ex_pl.T_plasma = New T_plasma
        ex_pl\ent = CopyEntity(pl_am)
        NameEntity (ex_pl\ent,Handle(ex_pl))
        PositionEntity ex_pl\ent,60,2,40
       
        ex_pl.T_plasma = New T_plasma
        ex_pl\ent = CopyEntity(pl_am)
        NameEntity (ex_pl\ent,Handle(ex_pl))
        PositionEntity ex_pl\ent,80,2,40

        ex_pl.T_plasma = New T_plasma
        ex_pl\ent = CopyEntity(pl_am)
        NameEntity (ex_pl\ent,Handle(ex_pl))
        PositionEntity ex_pl\ent,100,2,40

        ex_pl.T_plasma = New T_plasma
        ex_pl\ent = CopyEntity(pl_am)
        NameEntity (ex_pl\ent,Handle(ex_pl))
        PositionEntity ex_pl\ent,120,2,40
End Function

;-------------------------------------------------------------

Function UpdatePlasmaAmmo(ex_pl.T_plasma)
        For ex_pl.T_plasma = Each T_plasma
                TurnEntity ex_pl\ent,0,2,0       
                MoveEntity ex_pl\ent,0,h_m,0
        Next
        Local pl_col% = EntityCollided(player,TYPE_PL_AMMO)
        If(pl_col<>0)
                If gun_b2<100
                        ex_pl.T_plasma = Object.T_plasma(EntityName(pl_col))
                        FreeEntity(pl_col)
                        Delete(ex_pl)
                        gun_b2=gun_b2+10
                EndIf
        EndIf
End Function

;-------------------------------------------------------------

Function CreateEnemyBullet.T_bullet_en()
        ex_bul_en.T_bullet_en = New T_bullet_en
        ex_bul_en\time = 150
        ex_bul_en\ent = CopyEntity(shot_en1,ex_en)
        RotateEntity ex_bul_en\ent,0,180,0
        PositionEntity ex_bul_en\ent,-3.5,-1.5,-3
        EntityParent ex_bul_en\ent,0
        Return ex_bul_en
End Function


;-------------------------------------------------------------

Function UpdateEnemyBullet(ex_bul_en.T_bullet_en)
        ex_bul_en\time = ex_bul_en\time-1
        MoveEntity ex_bul_en\ent,0,0,1
        If ex_bul_en\time<=0 Or EntityCollided(ex_bul_en\ent,TYPE_WALL) Or EntityCollided(ex_bul_en\ent,TYPE_PLAYER)
                FreeEntity ex_bul_en\ent
                Delete ex_bul_en
                Return
        EndIf
        If EntityCollided(ex_bul_en\ent,TYPE_PLAYER)
                health=health-5
        EndIf
End Function


;-------------------------------------------------------------

Function CreateEnemy()
        ex_en.T_enemy = New T_enemy
        ex_en\ent = CopyEntity(enemy)
        NameEntity (ex_en\ent,Handle(ex_en))
        PositionEntity ex_en\ent,-5,10,-15
       
        ex_en.T_enemy = New T_enemy
        ex_en\ent = CopyEntity(enemy)
        NameEntity (ex_en\ent,Handle(ex_en))
        PositionEntity ex_en\ent,-5,10,-25
       
        ex_en.T_enemy = New T_enemy
        ex_en\ent = CopyEntity(enemy)
        NameEntity (ex_en\ent,Handle(ex_en))
        PositionEntity ex_en\ent,-5,10,-35
       
        ex_en.T_enemy = New T_enemy
        ex_en\ent = CopyEntity(enemy)
        NameEntity (ex_en\ent,Handle(ex_en))
        PositionEntity ex_en\ent,-5,10,-45
End Function


;-------------------------------------------------------------

Function UpdateEnemy(ex_en.T_enemy)
        For ex_en.T_enemy = Each T_enemy
                PointEntity ex_en\ent,player
                TurnEntity ex_en\ent,0,181.5,0
        Next
End Function


Жека 08.04.2012 09:33

Ответ: Дубликат в дубликате
 
Код запустить не получилось, т.к. нет медии твоей.
Несколько слов всё же скажу.
Вот есть полёт снарядов:
Код:

Function UpdateEnemyBullet(ex_bul_en.T_bullet_en)
        ex_bul_en\time = ex_bul_en\time-1
        MoveEntity ex_bul_en\ent,0,0,1
        If ex_bul_en\time<=0 Or EntityCollided(ex_bul_en\ent,TYPE_WALL) Or EntityCollided(ex_bul_en\ent,TYPE_PLAYER)
                FreeEntity ex_bul_en\ent
                Delete ex_bul_en
                Return
        EndIf
        If EntityCollided(ex_bul_en\ent,TYPE_PLAYER)
                health=health-5
        EndIf
End Function

Есть две проверки на коллизию с игроком, причём после первой пуля удаляется. А потом та же пуля снова участвует в проверке. Вряд ли так ты отнимешь жизни игрока.

Ещё есть в главном цикле обновление врагов:
Код:

;--enemy`s movement--;
UpdateEnemy(ex_en.T_enemy)
;--enemy`s movement--;

И сама функция:
Код:

Function UpdateEnemy(ex_en.T_enemy)
        For ex_en.T_enemy = Each T_enemy
                PointEntity ex_en\ent,player
                TurnEntity ex_en\ent,0,181.5,0
        Next
End Function

И что же ты туда передаёшь за экземпляр типа такой с именем ex_en?
У тебя эта переменная нигде не объявлена, но используется во многих местах. Я думаю что проблема как раз в этой переменной.
Не передавай ничего в функцию UpdateEnemy().

Хоть это и блиц, но использовать конструкцию [Local имя_переменной] желательно.

Например вот тут что хранит ex_en?
Код:

Function CreateEnemyBullet.T_bullet_en()
        ex_bul_en.T_bullet_en = New T_bullet_en
        ex_bul_en\time = 150
        ex_bul_en\ent = CopyEntity(shot_en1,ex_en)
        RotateEntity ex_bul_en\ent,0,180,0
        PositionEntity ex_bul_en\ent,-3.5,-1.5,-3
        EntityParent ex_bul_en\ent,0
        Return ex_bul_en
End Function

Пройди поиском по коду и увидишь, что ты её используешь сначала как ex_en.T_enemy а потом как числовой parent в ex_bul_en\ent = CopyEntity(shot_en1,ex_en). Т.к. область видимости разная, тебе это сходит с рук.:)

Можешь заменить внутри функций эту переменную на другую, или перед циклом
Код:

For ex_en.T_enemy = Each T_enemy ......
написать
Local ex_en.T_enemy
и далее твой цикл с перебором врагов.

Devilox 08.04.2012 17:15

Ответ: Дубликат в дубликате
 
Вложений: 1
С уроном, от выстрела врага, я разобрался, спасибо :)
А вот с дубликатами пока никак не получается :dontknow:
Я написал Local ex_en.T_enemy, но результата нет...
Вот исходник:


Странно, недавно я убрал одну проверку коллизий с игроком - всё работало, а сейчас - нет, притом, что я больше ничего не изменял...:dontknow:

Markova 08.04.2012 17:27

Ответ: Дубликат в дубликате
 
Не ну правильно, зачем ты дублируешь:
Код:

Function UpdateEnemy(ex_en.T_enemy)
Она вообще не нужна тут;Local ex_en.T_enemy
        For ex_en.T_enemy = Each T_enemy
                PointEntity ex_en\ent,player
                TurnEntity ex_en\ent,0,181.5,0
        Next
End Function

Прикольное что-то делаешь:super:

Devilox 08.04.2012 17:51

Ответ: Дубликат в дубликате
 
Но ведь всё равно это не решает проблему...:dontknow:

Жека 09.04.2012 04:57

Ответ: Дубликат в дубликате
 
Вложений: 1
Ты имел ввиду ошибку "Duplicate variable name"?
У меня тоже так получилось, когда открыл твой код. Начал разбираться и получил вот что:
1. Переименовал переменную, на которую ругался - не помогло.
2. Переименовал в несусветное имя, которое явно не используется нигде - не помогло.
3. Переименовал саму функцию - та же ошибка!
4. Закомментировал вызов этой функции - UpdateEnemy() - та же ошибка!

Чё за нафиг? Понял что проблема в том что файлы без сохранения изменений компилятся.
Переоткрыл IDE (visual blitz ide использую) и всё заработало нормально.
Выходит, что ИДЕ заглючила (у обоих нас, подозрительно).

Прикреплю на всякий .bb файлы новые.

Devilox 09.04.2012 16:53

Ответ: Дубликат в дубликате
 
Вложений: 1
EntityCollided всё равно не работает, исправил на EntityDistance и собрал главную программу и функции в один файл, а то глючит даже EntityDistance

Однако, со стрельбой врагов так и не разобрался...
Никак не могу понять, как заставить переменную в одной функции с переменной в другой функции...
Сам по себе выстрел отлажен, но стреляет только образец врага, притом, что если всё-таки написать команду "дублироваться в объекте ex_en", то Blitz не ругается, а просто дублирует из координат образца выстрела...:dontknow:

Жека 10.04.2012 05:28

Ответ: Дубликат в дубликате
 
Вложений: 1
Поделал я твою игрушку на досуге. Поправил то что тебе нужно.
Сделано:
- пушки стреляют все, и только если игрок приблизится на определённое расстояние
- пушки убивают игрока
- игрок убивает пушки (после смерти они полупрозрачными становятся)

Теперь по коду. Конструкции типа
Код:

UpdateEnemy(ex_en.T_enemy)
....
Function UpdateEnemy(ex_en.T_enemy)
        For ex_en.T_enemy = Each T_enemy
                PointEntity ex_en\ent,player
                TurnEntity ex_en\ent,0,181.5,0
        Next
End Function

я заменил на
Код:

UpdateEnemies()
....
Function UpdateEnemies()
        Local ex_en.T_enemy
        For ex_en.T_enemy = Each T_enemy
                PointEntity ex_en\ent,player
                TurnEntity ex_en\ent,0,181.5,0
        Next
End Function

не вижу смысла в такие функции извне что-то передавать (во всяком случае на данном этапе).

Про коллизии. У тебя в игрока враг не попадал из-за неправильно назначенной коллизии, ты написал:
Код:

Collisions TYPE_PLAYER, TYPE_EN_BULLET, 2, 3
обрати внимание на порядок типов коллизии. Нужно поменять их местами:
Код:

Collisions TYPE_EN_BULLET, TYPE_PLAYER, 1, 1
т.к. первым должен идти тип того объекта, который сталкивается, а вторым того, с которым. (или нет? доку я перечитывать не стал, откуда-то помню такое просто)
Если бы ты игроком нарвался на пулю, идя на врага, то сработало бы и это.
Плюс к тому метод коллизии можно поставить 1: ellipsoid-to-ellipsoid collisions, и решение для коллизий тоже в 1: stop , т.к. пуля и игрок в виде эллипсоида колизятся, и двигать после столкновения ничего не нужно - снаряд просто удаляется сразу.

Подбирание оружие и аптечек я думаю лучше сделать через EntityDistance, думаю что быстрее работать будет (инфа не 100%).
Плюс проходить сквозь них игрок сможет, не подбирая, а то щас при здоровье в 100 сквозь аптечку не пролезешь, сдвигается игрок по коллизии.

Пушки я расставил в цикле, т.к. они в ряд просто пока что.

Там где исправлял что-то, поставил комментарий ";+++", но не везде т.к. мест стало много и мне надоело отвлекаться на проставление этих комментов.

Devilox 10.04.2012 16:59

Ответ: Дубликат в дубликате
 
Спасибо большое, всё работает, сейчас буду досконально разбираться, как работает этот код :)


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

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