forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Тормоза при загрузке из AnimSeq (http://forum.boolean.name/showthread.php?t=5969)

Dstorton111 30.04.2008 10:53

Тормоза при загрузке из AnimSeq
 
Косяк, Когда чел стоит на месте всё хорошо, но иногда, когда нажимаю вперёд и он начинает двигаться вперёд вместе с запуском анимации из загруженного AnimSeq, то FPS Падает слишком быстро. До 2о-30 FPS.:''((

Может я не там обновляю модель чела в игре?:wallbash:

H@NON 30.04.2008 11:24

Ответ: Тормоза при загрузке из AnimSeq
 
мб ты грузишь анимацию в цикле? хотелось бы видеть кусок кода, где возможна ошибка, телепаты как всегда на отдыхе.

Dstorton111 30.04.2008 16:14

Re: Тормоза при загрузке из AnimSeq
 
Ну, вот он код главного файла:
Код:

Graphics3D 1024,768,32,1
  Include "Includes.bb"  ; Подгружаем нужные библиотеки
    SetBuffer BackBuffer()
    GUIw512_Init(1); Меню
    Black_Init(); Видео
    Black_SetSound(1); глобальный уровень звука в видео
 SetFont LoadFont ("Tahoma",16); Шрифт программы
  Include "CreateMenu.bb";//Создаюм окошки меню
While (1);//Обновляем всю программу
If KeyHit (1)
  GState = 0
EndIf
;==========- UpDate GUI
  Select GState; Определяем состояние программы пауза или игра
 
  Case 0 ;//Если Пауза
                    PauseEkr(1)                                ; Пауза на видео
                      pxSetPause(1)                            ; Пауза на физику
            WG_ShowElement(wim_0)        ; Показать главное меню
      StartDraw                                      ;Рисуем картинку на Экране
                  DrawImageEx(im,0,0)
                EndDraw
      GUIw512_UpDate()                          ; Обновляем меню
      DrawImage cursor,MouseX(), MouseY()
           
  Case 1 ; Если Нажали на Старт
        Select Gstarted; предыдущее состояние игры
    Case 0; Если Старт
        Include "new_game.bb" ; Сдесь грузим уровень и "  player.player = CreatePlayer() ;Создаём Игрока "
    Case 1 ; Если Продолжить  // Здесь цикл обновления программы
        old_time = MilliSecs ();
     
      LimitFPS(); Ставим ограничение по FPS - 50 кадров "Не догнал как сделать нормальную интерполяцию"
     
        Include "Upd_Game.bb" ; Сдесь функции типа UpdatePlayers()
 
            WG_HideElement(win_opt)
            WG_HideElement (win_autor)
        WG_HideElement(wim_0)
      FreeImageEx im
              Filter_Textures()
              pxSetPause(0)
 
    End Select
  End Select
Include "CheckMenu.bb";//обновляем меню
 Flip 0
 Include "Update.bb";//Рисуем и обновляем то что нужно
Wend
Black_CloseZ(Bl)
Black_DeInit()
End
Include "Functions.bb";// Основные функции программы

А это функция Загрузки чела в игру:
Код:

Function CreatePlayer.player()
    pl.player = New player
 ;Создаём физ тело и материал для него
    pl\body = pxBodyCreateCapsule(15, 2.5 ,45)
        pxBodySetLinearDamping(pl\body, 10)
        pxBodySetFrozenRot(pl\body, 1)
  pxMaskSet(pl\body,3)
    pl\mat = pxCreateMaterial%(); Материал на тело
      pxMaterialSetDyFriction(pl\mat, 1)
        pxMaterialSetToBody(pl\body, pl\mat)
  ;Загружаем анимированный меш игрока
  pl\anim_move =  LoadAnimMesh ("Media\Soviet\Soviet-Idle.3DS");anim seq 0
      LoadAnimSeq pl\anim_move ,"Media\Soviet\Soviet-Move.3DS"  ;anim seq 1
    LoadAnimSeq pl\anim_move ,"Media\Soviet\Soviet-Move-Back.3DS"  ;anim seq 3
      ScaleEntity pl\anim_move, 10, 10, 10
    Animate pl\anim_move,1,0.5
       
    pl\x = 40
 pl\y = 20
 pl\z = 10
 ; Начальная позиция физ тела
 pxBodySetPosition ( pl\body,  pl\x,pl\y,pl\z )
    pl\ray = pxCreateRay%()
  ;Точка обозначает тело
  pl\pivot = CreatePivot(pl\anim_move)
      PositionEntity pl\pivot, EntityX (pl\anim_move), EntityY (pl\anim_move)+2.5, EntityZ (pl\anim_move)-1.3
 
  pl\camera = CreateCamera()
        TurnEntity pl\Camera,  0,90,0
      CameraClsColor pl\camera,20,40,45
      CameraRange    pl\camera,1.0,1000.0
        pl\gravity = -40
 
 Return pl

Кстати, подкиньте ктонить код интерполяции, желательно в примере

tormoz 30.04.2008 17:56

Ответ: Тормоза при загрузке из AnimSeq
 
Ктож инклюды вызывает в цикле ?
Вызывай функции.
А инклюды подключаются ОДИН раз до цикла

dimanche13 30.04.2008 18:39

Ответ: Тормоза при загрузке из AnimSeq
 
Я, конечно, много повидал, но инклуды в цикле - это знаете ли, свежо!

HolyDel 30.04.2008 19:01

Ответ: Тормоза при загрузке из AnimSeq
 
вы народ особо не удивляйтесь. нет тут ничего удивительного, это просто неправильная блицовая терминология, надо было подключение обозвать uses или там add, но не include.
похоже на лексическое включение.

Dstorton111 30.04.2008 19:12

Re: Тормоза при загрузке из AnimSeq
 
Скажу пару слов о моём использовании Include

1. Не всегда и не весь код срабатывает из функции,(во всяком случае у меня)
2. Ну не писать же 100 функций и описывать 100 типов в одном скрипте.
3. В Файле кода проги размером скажем 300 Кб х...кто разберётся
4. Не вижу негативных моменетов

P.S. Главное во всём знать меру
Насчёт анимации - Есть мысль что это тормоза компа, скорей всего вирусняки, базу давно не обнавлял
Цитата:

А инклюды подключаются ОДИН раз до цикла
Ну знаете ли, и любовью до свадьбы вроде как заниматься нельзя :-)

tormoz 30.04.2008 19:46

Ответ: Тормоза при загрузке из AnimSeq
 
Бу га га !
Он еще и спорит !

HolyDel 30.04.2008 21:37

Ответ: Тормоза при загрузке из AnimSeq
 
Dstorton111, а попробовать сделать как тебе советуют люди далеко не первый год знакомые с блицом? в том числе и с пресловутым include?

Dstorton111 30.04.2008 22:19

Re: Тормоза при загрузке из AnimSeq
 
Ладно уж, попробую, что смогу перевду в функции.

Кстати как насчёт ИНТЕРПОЛЯЦИИ !!! Помогите хоть с ней, а то останется в переходе рядом с бомжами стоять с табличкой " Помогите исходником на прогу " :-) :-) :-)

Tadeus 30.04.2008 22:26

Ответ: Тормоза при загрузке из AnimSeq
 
Если ты про сглаживание движения то вот:

Код:

;-Cubic Spline Interpolation-;

;[Updated] - Recursive Math Added For fastest Spline Speed Ever

;-by Chroma
;-based on a tutorial at www.gamedev.net

;The object starts at position S and is predicted ahead one second to be at 1.
;The object is then predicted to E and then time reversed one second to 2.
;The spline is then plotted from S to E based on the predicted points of 1 and 2
;and the starting And ending velocities. The object is then moved along the
;spline Until the Next packet arrives and then process starts over.

;S = starting point - time=0
;1 = predicted position after 1 sec
;2 = predicted position reversed from E after 1 sec
;E = ending point

AppTitle "Cubic Spline Interpolation"

Graphics 350,250,16,2
SetBuffer BackBuffer()

;Main Loop
While Not KeyHit(1)
Cls

;Cubic Spline Interpolation (I love those words!)
cspline(50,180,100,50,300,75,-20,-10,0,0)

Flip
Wend
End

;-=-=-=-=-=-=-=-=-=-=-=-=-=-=;
;=Cubic Spline Interpolation=;
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=;
Function cspline(Xold,Yold,Xvelold,Yvelold,XNew=0,YNew=0,Xvelnew,Yvelnew,XAccelNew,YAccelNew,Time=3)

;Init Local Variables
Local x,y,x0,y0,x1,y1,x2,y2,x3,y3
Local a,b,c,d,e,f,g,h,t#

;Coord#1 is the current object's X,Y (or X,Z if using 3D)
Color 0,255,0
X0=Xold : Y0=Yold
Text X0-4,Y0-16,"S"
Rect X0,Y0,3,3,1

;Calc Coord#2
Color 255,255,0
X1 = X0 + XVelOld
Y1 = Y0 + YVelOld
Text X1-4,Y1-16,"1"
Rect X1,Y1,3,3,1

;Calc Coord#3 (must calc after Coord#4)
Color 200,100,0
X2=XNew + XVelNew * Time + .5 * XAccelNew * Time^2
Y2=YNew + YVelNew * Time + .5 * YAccelNew * Time^2
Text X2-4,Y2-16,"2"
Rect X2,Y2,3,3,1

;Calc Coord#4
Color 255,0,0
X3=XNew
Y3=YNew
;X3=X2 - (XVelNew + XAccelNew * Time)
;Y3=Y2 - (YVelNew + YAccelNew * Time)
Text X3-4,Y3-16,"E"
Rect X3,Y3,3,3,1


;Calc Cubic Spline Points
RecursiveMathA=3*x2
RecursiveMathB=3*x1
RecursiveMathC=6*x1
RecursiveMathD=3*x0
RecursiveMathE=3*y2
RecursiveMathF=3*y1
RecursiveMathG=6*y1
RecursiveMathH=3*y0


A = X3 - RecursiveMathA + RecursiveMathB - x0
B = RecursiveMathA - RecursiveMathC + RecursiveMathD
C = RecursiveMathB - RecursiveMathD
D = x0
E = y3 - RecursiveMathE +RecursiveMathF - y0
F = RecursiveMathE - RecursiveMathG + RecursiveMathH
G = RecursiveMathF - RecursiveMathH
H = y0


;Draw the Spline
For t#=0 To 1 Step .001
        x = A*t^3 + B*t^2 + C*t + D
        y = E*t^3 + F*t^2 + G*t + H
Plot x,y
Next

End Function


HolyDel 30.04.2008 22:33

Ответ: Тормоза при загрузке из AnimSeq
 
ненадо ничего переводить. просто вынеси инклюд за главный цикл (перед главнм циклом его поставь где нибудь, идеологически - лучше ближе к началу)

Tadeus 30.04.2008 22:51

Ответ: Тормоза при загрузке из AnimSeq
 
Все-таки эти tormoz'a запаланили! :crazy:

jimon 30.04.2008 23:10

Ответ: Тормоза при загрузке из AnimSeq
 
Dstorton111
все инклуды нужно писать только в начале исходника
представь что если напишешь в другом месте то не скомпилируется

по крайней мере хотя бы руки выпрямляют такие вещи

Dstorton111 30.04.2008 23:23

Re: Тормоза при загрузке из AnimSeq
 
Tadeus vbmenu_register("postmenu_80416", true); Спасибо за код, постараюсь использовать его макс. эффективно, хотя пока не знаю для чего.

ИЗВИНЯЮСЬ ПЕРЕД ВСЕМИесли не так поняли, или если я ступил по незнанию.

Под словом интерполяция я имел ввиду: Когда скорость иры подстраивается под FPS, А то я поставил ограничение на 50 FPS. Но чувствую что оставлять это просто так нельзя иначе зас...у(сорри загажу) весь проект ещё на начальном этапе.


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

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