|
3D-программирование Вопросы, касающиеся программирования 3D мира |
03.08.2010, 23:46
|
#1
|
Знающий
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений (для 3 пользователей)
|
Помогите оптимизировать ф-ю
Граждане!у меня есть одна функция, которая сильно грузит игру, помогите пожалуйста её оптимизировать!Если можно, выложите свю версию, заранее спасибо!
Function update_friz()
For i = 1 To num
If abc(i)\times=0
If (abc(i)\count%=1) Then
Animate abc(i)\friz,1,0.2,1
abc(i)\count%=0
EndIf
If (abc(i)\count=2) Then
Animate abc(i)\friz,3,0.4,5
pointer(abc(i)\friz,user)
abc(i)\count=0
EndIf
If (abc(i)\count=3) And (health>health_die) Then
pointer(abc(i)\friz,user)
If AnimTime(abc(i)\friz)>13 Then
If health>health_die Animate abc(i)\friz,1,0.4,6
EndIf
If abc(i)\times2%=5 Then create_shot_f(EntityX(abc(i)\frizbox),EntityY(abc(i)\frizbox)+1,EntityZ(abc(i)\frizbox)):EmitSound sound10,abc(i)\friz:abc(i)\count_bull%=abc(i)\count_bull%-1:abc(i)\times2%=20
abc(i)\times2%=abc(i)\times2%-1
If abc(i)\count_bull=0 Then
If AnimTime(abc(i)\friz)>7 Then
EmitSound sound8,abc(i)\friz
Animate abc(i)\friz,1,0.4,10
abc(i)\count_bull%=8
EndIf
EndIf
EndIf
EndIf
If abc(i)\count=4 Then
SeedRnd(MilliSecs())
x1=Rnd(1,4)
If x1=1 Then EmitSound sound2,abc(i)\friz
If x1=2 Then EmitSound sound3,abc(i)\friz
If x1=3 Then EmitSound sound4,abc(i)\friz
If x1=4 Then EmitSound sound5,abc(i)\friz
EntityType abc(i)\frizbox,friz_d_type
SeedRnd(MilliSecs())
Animate abc(i)\friz,3,0.4,Rnd(11,13)
abc(i)\count%=100
abc(i)\times=abc(i)\times+1
EndIf
If (abc(i)\count=5) And (abc(i)\times%=0) Then
U#=360
pointer(abc(i)\friz,user)
abc(i)\times1%=abc(i)\times1%+1
If (180 - Abs(-DeltaYaw(abc(i)\frizbox,user))) < U# And EntityDistance(abc(i)\friz,user)<50 And EntityVisible(abc(i)\frizbox,user) And (abc(i)\times=0) Then
If AnimTime(abc(i)\friz)>30 Then
SeedRnd(MilliSecs())
x=Rnd(1,2)
If x=1 Then EmitSound sound7,abc(i)\friz Else EmitSound sound6,abc(i)\friz
Animate abc(i)\friz,3,0.5,5
EndIf
EndIf
EndIf
If (180 - Abs(-DeltaYaw(abc(i)\frizbox,user))) < U# And EntityDistance(abc(i)\friz,user)<20 And EntityVisible(abc(i)\frizbox,user) And (abc(i)\times=0) Then
abc(i)\count=5
If abc(i)\times1%>170 Then abc(i)\count=3
EndIf
Next
End Function
__________________
...мама я больше не буду!
|
(Offline)
|
|
04.08.2010, 23:22
|
#2
|
Задрот
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений (для 863 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
ммм...дайте подумать!!!
Вот:
Function update_friz()
;//do nothing...
End Function
|
(Offline)
|
|
05.08.2010, 22:01
|
#3
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
ага оптимайз !!
Function update_friz()
num = 1
For i = 1 To num
...
|
сорри за издевательство !! но врядли кто то станет копатся в этом !!
|
(Offline)
|
|
06.08.2010, 00:15
|
#4
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
Сначала научитесь правильно оформлять код чтобы он был читаем, потом можно и подумать
|
(Offline)
|
|
06.08.2010, 02:19
|
#5
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
В коде нет затратных команд
раскрой вложенные функции
__________________
|
(Offline)
|
|
09.08.2010, 21:22
|
#6
|
Знающий
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
Сообщение от Павел
ммм...дайте подумать!!!
Вот:
Function update_friz()
;//do nothing...
End Function
|
function donothing not found. Че делать?
__________________
...мама я больше не буду!
|
(Offline)
|
|
09.08.2010, 21:52
|
#7
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
Сообщение от Mark Castle
function donothing not found. Че делать?
|
Извини, но это была насмешка.
do nothing с англ. переводится - ничего не делать...
Такой функции конечно нет, если её не дописать. Но всё же "ничего не делать" было предложено для прикола - вместо сложных вычислений, для ускорения - просто ничего не делать.
Это не было решение твоей проблемы.
Блин не знаю что такое abc(i)...
Но можно хотя бы создать переменную abcI=abc(i) - чтобы не повторять вычисление abc(i)
Коротко, например:
Function update_friz()
For i = 1 To num
abcI=abc(i)
If abcI\times=0
If abcI\count%=1) Then
Animate abcI\friz,1,0.2,1
abcI\count%=0
EndIf
В справочнике посмотрел - там Abs(number)
Use this command to return the absolute value of a number; meaning its positive value. A negative 3 would become a positive 3. If what you want is a number without a fraction (say, convert 3.1415 into 3) use the Int() command.
|
(Offline)
|
|
10.08.2010, 10:02
|
#8
|
Нуждающийся
Регистрация: 07.04.2007
Сообщений: 50
Написано 5 полезных сообщений (для 30 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
Функция Abs(int) возвращает абсолютное значение числа.
Т.е. Abs(-5) = 5
ЭЭЭ....
Чувак открой справочник команд и посмотри что делают непонятные тебе конструкции.
З.Ы. Начинай с For..Next
|
(Offline)
|
|
10.08.2010, 12:19
|
#9
|
Знающий
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
Вы че?причем здесь abs???
__________________
...мама я больше не буду!
|
(Offline)
|
|
10.08.2010, 15:44
|
#10
|
Мастер
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений (для 504 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
Abs, abc...
Ну главное что при "когда можно хотя бы создать переменную abcI=abc(i) - чтобы не повторять вычисление abc(i)" - не нужно каждый раз (в каждой строчке) "возвращать абсолютное значение числа."
С чем я ещё не знаком или подзабыл - кончено же смотрю index.htm
К abc(i)\friz это тоже относится..
Просто ввёл переменную abcFriz=abc(i)\friz и всё!
Т.е. не вычислять каждый раз одно и тоже!
Часть доработки:
Function update_friz()
For i = 1 To num
abcI=abc(i)
abcFriz=abcI\friz
If abcI\times=0
If (abcI\count%=1) Then
Animate abcFriz,1,0.2,1
abcI\count%=0
EndIf
If (abcI\count=2) Then
Animate abcFriz,3,0.4,5
pointer(abcFriz,user)
abcI\count=0
EndIf
If (abcI\count=3) And (health>health_die) Then
pointer(abcFriz,user)
If AnimTime(abcFriz)>13 Then
If health>health_die Animate abcFriz,1,0.4,6
EndIf
If abcI\times2%=5 Then create_shot_f(EntityX(abcI\frizbox),EntityY(abcI\frizbox)+1,EntityZ(abcI\frizbox)):EmitSound sound10,abcFriz:abcI\count_bull%=abcI\count_bull%-1:abcI\times2%=20
abcI\times2%=abcI\times2%-1
If abcI\count_bull=0 Then
If AnimTime(abcFriz)>7 Then
EmitSound sound8,abcFriz
Animate abcFriz,1,0.4,10
abcI\count_bull%=8
EndIf
EndIf
|
(Offline)
|
|
10.08.2010, 16:49
|
#11
|
Дэвелопер
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений (для 4,642 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
LLI.T.A.L.K.E.R., выучи массивы и типы перед тем как советы давать. Ппц.
__________________
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо .Squid за это полезное сообщение:
|
|
10.08.2010, 17:19
|
#12
|
Знающий
Регистрация: 28.07.2008
Адрес: Киев
Сообщений: 228
Написано 61 полезных сообщений (для 191 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
Если бы автор выложил весь код с медией было бы проще понять в каком месте можно спасти пару FPS
Уверен, что часть проверок можно было бы вынести из кучи и выполнять нерегулярно
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
16.08.2010, 18:14
|
#13
|
Знающий
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
там оказалась другая фигня: при создании более 20 фрицов комп резко виснет.функция создания прилагается:
Function create_friz(x#,y#,z#,turn#)
num%=num%+1
abc(num)=New frizen
abc(num)\friz=LoadAnimMesh("media\officer.b3d")
abc(num)\frizbox=CreateSphere(2)
;EntityAlpha abc(num)\frizbox,0.00001
PositionEntity abc(num)\frizbox,x#,y#+1.1,z#
ScaleEntity abc(num)\friz,0.025,0.025,0.025
ScaleEntity abc(num)\frizbox,0.35,0.8,0.3
PositionEntity abc(num)\friz,x#,y#,z#
TurnEntity abc(num)\friz,0,turn#,0
TurnEntity abc(num)\frizbox,0,turn#,0
ExtractAnimSeq(abc(num)\friz,1,32 ) ; 1- idle
ExtractAnimSeq(abc(num)\friz,33,83 ) ; 2- look_around
ExtractAnimSeq(abc(num)\friz,84,117 ) ; 3- walk
ExtractAnimSeq(abc(num)\friz,118,134 ) ; 4- run
ExtractAnimSeq(abc(num)\friz,135,150 ) ; 5- arm
ExtractAnimSeq(abc(num)\friz,150,159 ) ; 6- shoot_forward
ExtractAnimSeq(abc(num)\friz,161,181 ) ; 7- disarm
ExtractAnimSeq(abc(num)\friz,182,197 ) ; 8- shoot_down
ExtractAnimSeq(abc(num)\friz,198,213 ) ; 9- shoot_up
ExtractAnimSeq(abc(num)\friz,214,239 ) ; 10- reload
ExtractAnimSeq(abc(num)\friz,240,270 ) ; 11- die1
ExtractAnimSeq(abc(num)\friz,271,311 ) ; 12- die2
ExtractAnimSeq(abc(num)\friz,312,325 ) ; 13- die3
EntityType abc(num)\frizbox,friz_type
EntityParent abc(num)\friz,abc(num)\frizbox
abc(num)\count_bull%=8
abc(num)\times1%=1
abc(num)\times2%=5
abc(num)\count=1
End Function
__________________
...мама я больше не буду!
|
(Offline)
|
|
16.08.2010, 18:35
|
#14
|
Элита
Регистрация: 26.07.2008
Сообщений: 1,972
Написано 1,095 полезных сообщений (для 3,923 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
ExtractAnimSeq(abc(num)\friz,1,32 ) ; 1- idle
ExtractAnimSeq(abc(num)\friz,33,83 ) ; 2- look_around
ExtractAnimSeq(abc(num)\friz,84,117 ) ; 3- walk
ExtractAnimSeq(abc(num)\friz,118,134 ) ; 4- run
ExtractAnimSeq(abc(num)\friz,135,150 ) ; 5- arm
ExtractAnimSeq(abc(num)\friz,150,159 ) ; 6- shoot_forward
ExtractAnimSeq(abc(num)\friz,161,181 ) ; 7- disarm
ExtractAnimSeq(abc(num)\friz,182,197 ) ; 8- shoot_down
ExtractAnimSeq(abc(num)\friz,198,213 ) ; 9- shoot_up
ExtractAnimSeq(abc(num)\friz,214,239 ) ; 10- reload
ExtractAnimSeq(abc(num)\friz,240,270 ) ; 11- die1
ExtractAnimSeq(abc(num)\friz,271,311 ) ; 12- die2
ExtractAnimSeq(abc(num)\friz,312,325 ) ; 13- die3
EntityType abc(num)\frizbox,friz_type
Вот это нужно выполнять один раз за игру. А так при каждом создании врага снова загружается анимация
|
(Offline)
|
|
16.08.2010, 18:42
|
#15
|
Знающий
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений (для 3 пользователей)
|
Ответ: Помогите оптимизировать ф-ю
и где ж мне его так надо написать?
__________________
...мама я больше не буду!
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:14.
|