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

Fant 18.06.2007 12:40

Скорость
 
Проблема такая

Если увеличиваю кол-во объектов ИИ (врагов) у них добавляется скорость

Код:

For en1.enemy1 = Each enemy1
en1\speed#=.1

If en1\timer#<=10 Then en1\speed#=.1 Else en1\speed#=0

Это кусок кода из функции, которая в главном цикле

Больше en1\speed# нигде особо не фигурирует...я даже не представлляю в чем там трабла?

jimon 18.06.2007 12:59

Re: Скорость
 
где то фигня с таймером, давай всю функцию

Fant 18.06.2007 13:02

Re: Скорость
 
Код:

Function fnUpdateEnemy1()

For en1.enemy1 = Each enemy1

en1\speed#=.1

Local en1_ygol = Int (EntityYaw (en1\obj))

en1\retval = fnWhatVperedi(en1\obj,Int(EntityYaw (en1\obj)))

If (en1_ygol=0) Then
 If (fnWhatVperedi(en1\obj,0)>0) Then en1\Understand_f=1 Else en1\Understand_f=0
 If (fnWhatVperedi(en1\obj,180)>0) Then en1\Understand_b=1 Else en1\Understand_b=0
 If (fnWhatVperedi(en1\obj,90)>0) Then en1\Understand_l=1 Else en1\Understand_l=0
 If (fnWhatVperedi(en1\obj,-90)>0) Then en1\Understand_r=1 Else en1\Understand_r=0
EndIf

If (Abs(en1_ygol)=180) Then
 If (fnWhatVperedi(en1\obj,180)>0) Then en1\Understand_f=1 Else en1\Understand_f=0
 If (fnWhatVperedi(en1\obj,0)>0) Then en1\Understand_b=1 Else en1\Understand_b=0
 If (fnWhatVperedi(en1\obj,-90)>0) Then en1\Understand_l=1 Else en1\Understand_l=0
 If (fnWhatVperedi(en1\obj,90)>0) Then en1\Understand_r=1 Else en1\Understand_r=0
EndIf

If (en1_ygol=90) Then
 If (fnWhatVperedi(en1\obj,90)>0) Then en1\Understand_f=1 Else en1\Understand_f=0
 If (fnWhatVperedi(en1\obj,-90)>0) Then en1\Understand_b=1 Else en1\Understand_b=0
 If (fnWhatVperedi(en1\obj,180)>0) Then en1\Understand_l=1 Else en1\Understand_l=0
 If (fnWhatVperedi(en1\obj,0)>0) Then en1\Understand_r=1 Else en1\Understand_r=0
EndIf

If (en1_ygol=-90) Then
 If (fnWhatVperedi(en1\obj,-90)>0) Then en1\Understand_f=1 Else en1\Understand_f=0
 If (fnWhatVperedi(en1\obj,90)>0) Then en1\Understand_b=1 Else en1\Understand_b=0
 If (fnWhatVperedi(en1\obj,0)>0) Then en1\Understand_l=1 Else en1\Understand_l=0
 If (fnWhatVperedi(en1\obj,180)>0) Then en1\Understand_r=1 Else en1\Understand_r=0
EndIf


Local en1_x = Int((EntityX (en1\obj)/10))
Local en1_z = Int((EntityZ (en1\obj)/10))
         

If (playfield(en1\En1Arx,en1\En1Arz)=5) Then playfield(en1\En1Arx,en1\En1Arz) = 0

playfield(en1_x,en1_z) = 5

en1\En1Arx = en1_x
en1\En1Arz = en1_z

en1\timer#=en1\timer#+en1\speed#
;Необработанный кусок ИИ

 

If en1\timer#<=10 Then en1\speed#=.1 Else en1\speed#=0


If en1\timer#>=10 And  en1\understand_f=0 Then en1\timer#=0

If en1\timer#>=10 And  en1\understand_f=1

        If en1\understand_b=0

.f_dir
 F_dir=Rand(1,4)
Select F_dir

        Case 1
        If en1\ugol=0 Then en1\ugol=180 Else Goto f_dir
        Case 2
        If en1\ugol=180 Then en1\ugol=0 Else Goto f_dir
        Case 3
        If en1\ugol=90 Then en1\ugol=-90 Else Goto f_dir
        Case 4
        If en1\ugol=-90 Then en1\ugol=90 Else Goto f_dir
End Select
       
End If

        If en1\understand_b=1 And en1\understand_f=1

.LR_dir
 LR_dir=Rand(1,6)
Select LR_dir

        Case 1
        If en1\ugol=0 Then en1\ugol=90 Else Goto lr_dir
        Case 2
        If en1\ugol=0 Then en1\ugol=-90 Else Goto lr_dir
        Case 3
        If en1\ugol=180 Then en1\ugol=-90 Else Goto lr_dir
        Case 4
        If en1\ugol=180 Then en1\ugol=90 Else Goto lr_dir
        Case 5
        If en1\ugol=90 Then en1\ugol=180 Else Goto lr_dir
        Case 6
        If en1\ugol=-90 Then en1\ugol=0 Else Goto lr_dir
End Select
       
End If

If en1\understand_b=1 And en1\understand_f=1 And en1\understand_l=1 And en1\understand_r=1 Then en1\ugol=0


End If

MoveEntity en1\obj,0,0,en1\speed#
RotateEntity en1\obj,0,en1\ugol,0


Next

End Function

Напомните мне пожалуйста команду, когда текст пишется над объектом (и следует за ним) вылетело из головы эта команда... - вспомнил. ненужно

Хотел бы этой командой показать (вывести) скорость для КАЖДОГО ои объекта в типе. Там нужны примудрости? как мне показать, что это объект номер такой-то и скорость его такая-то...?

IGR 18.06.2007 13:16

Re: Скорость
 
кстати я тоже встречал такую проблему, но незнаю как ее решить !!
и у меня в коде таймера, насколько я помню, вообще небыло !!

Fant 18.06.2007 13:25

Re: Скорость
 
Цитата:

Сообщение от IGR
кстати я тоже встречал такую проблему, но незнаю как ее решить !!

спасибо за надежду!)

HolyDel 18.06.2007 14:58

Re: Скорость
 
Project-ом его, Project-ом/
Function textentity(ent,text$="bugaga")
cameraproject cam,entityx(ent,1),entityy(ent,1),entityz(ent,1)
text projectedx(),projectedy()-30,text,1,0
end function
да, cam - ето хэндл на камеру. он должен быть глобальным.

Fant 18.06.2007 17:12

Re: Скорость
 
Цитата:

Сообщение от HolyDel
Project-ом его, Project-ом/
Function textentity(ent,text$="bugaga")
cameraproject cam,entityx(ent,1),entityy(ent,1),entityz(ent,1)
text projectedx(),projectedy()-30,text,1,0
end function
да, cam - ето хэндл на камеру. он должен быть глобальным.

Спасибо за комощь по прожеки, а по глобальному вопросу? Хоть что-нитьб? А то они правда очен быстро "ходят"

Fant 19.06.2007 01:19

Re: Скорость
 
мне HolyDel посоветовал для решении проблемы избавиться от твиннинга - но тогда я не смогу контролировать FPS и..и много будет еще потерь!

Тогда мне было предложено юзать дельатайминг!

Подскажите пожалуйста кто знает что это такое и, если можно, какой-нибудь с ним семпл, что бы можно было по нему понять как это работает!

А может есть еще какие-нибудь варианты для решения моей порблемки со скоростью?

jimon 19.06.2007 01:21

Re: Скорость
 
дельта тайминг ето вот что :

dt# = FPS_Stable# / FPS_Current#; fps_stable = 60 для примера
...
move# = speed# * dt#
...
:)
при етом получается что перемещение не зависит от фпс

HolyDel 19.06.2007 01:28

Re: Скорость
 
ну попробуй вынести обновление_врагов1 за цикл, может поможет.

Fant 19.06.2007 09:59

Re: Скорость
 
Цитата:

Сообщение от HolyDel
ну попробуй вынести обновление_врагов1 за цикл, может поможет.

Как за цикл?)

А обновлять-то как?

Fant 19.06.2007 15:35

Re: Скорость
 
Пробовал варианты...что-то не получилось

dt# = FPS_Stable# / FPS_Current#; fps_stable = 60 для примера
...
move# = speed# * dt#

расскажите об этом по подробнее...или еще о чем-нить!

Нужно как-то ... снизить скорость ИИ

HolyDel 19.06.2007 20:48

Re: Скорость
 
за
k=1 to ticks
next
цикл

ЛысыЙ_Чук-Иванчук 19.06.2007 22:06

Re: Скорость
 
CreateTimer(25) тебе в помощь!
25 фпс для любой игры пойдет!!!

Fant 19.06.2007 22:24

Re: Скорость
 
Цитата:

Сообщение от HolyDel
за
k=1 to ticks
next
цикл

Ничего не понял?) это к чему?


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

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