Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 03.08.2010, 23:46   #1
Mark Castle
Знающий
 
Регистрация: 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
Reizel
Задрот
 
Аватар для Reizel
 
Регистрация: 24.07.2009
Адрес: Ивановская область, г. Кинешма
Сообщений: 1,574
Написано 407 полезных сообщений
(для 863 пользователей)
Ответ: Помогите оптимизировать ф-ю

ммм...дайте подумать!!!
Вот:
Function update_friz()
;//do nothing...
End Function
(Offline)
 
Ответить с цитированием
Старый 05.08.2010, 22:01   #3
IGR
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
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Помогите оптимизировать ф-ю

Сначала научитесь правильно оформлять код чтобы он был читаем, потом можно и подумать
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 06.08.2010, 02:19   #5
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Помогите оптимизировать ф-ю

В коде нет затратных команд
раскрой вложенные функции
__________________
(Offline)
 
Ответить с цитированием
Старый 09.08.2010, 21:22   #6
Mark Castle
Знающий
 
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: Помогите оптимизировать ф-ю

Сообщение от Павел Посмотреть сообщение
ммм...дайте подумать!!!
Вот:
Function update_friz()
;//do nothing...
End Function
function donothing not found. Че делать?
__________________
...мама я больше не буду!
(Offline)
 
Ответить с цитированием
Старый 09.08.2010, 21:52   #7
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 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
Miha
Нуждающийся
 
Регистрация: 07.04.2007
Сообщений: 50
Написано 5 полезных сообщений
(для 30 пользователей)
Ответ: Помогите оптимизировать ф-ю

Функция Abs(int) возвращает абсолютное значение числа.
Т.е. Abs(-5) = 5
ЭЭЭ....
Чувак открой справочник команд и посмотри что делают непонятные тебе конструкции.
З.Ы. Начинай с For..Next
(Offline)
 
Ответить с цитированием
Старый 10.08.2010, 12:19   #9
Mark Castle
Знающий
 
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: Помогите оптимизировать ф-ю

Вы че?причем здесь abs???
__________________
...мама я больше не буду!
(Offline)
 
Ответить с цитированием
Старый 10.08.2010, 15:44   #10
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 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
.Squid
Дэвелопер
 
Аватар для .Squid
 
Регистрация: 06.04.2009
Адрес: Запорожье
Сообщений: 1,500
Написано 1,011 полезных сообщений
(для 4,642 пользователей)
Ответ: Помогите оптимизировать ф-ю

LLI.T.A.L.K.E.R., выучи массивы и типы перед тем как советы давать. Ппц.
__________________

(Offline)
 
Ответить с цитированием
Эти 5 пользователя(ей) сказали Спасибо .Squid за это полезное сообщение:
ABTOMAT (16.08.2010), Hurrit (16.08.2010), Nex (10.08.2010), St_AnGer (10.08.2010), tormoz (10.08.2010)
Старый 10.08.2010, 17:19   #12
Spiderman
Знающий
 
Аватар для Spiderman
 
Регистрация: 28.07.2008
Адрес: Киев
Сообщений: 228
Написано 61 полезных сообщений
(для 191 пользователей)
Ответ: Помогите оптимизировать ф-ю

Если бы автор выложил весь код с медией было бы проще понять в каком месте можно спасти пару FPS

Уверен, что часть проверок можно было бы вынести из кучи и выполнять нерегулярно
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nex (10.08.2010)
Старый 16.08.2010, 18:14   #13
Mark Castle
Знающий
 
Регистрация: 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
Nuprahtor
Элита
 
Аватар для Nuprahtor
 
Регистрация: 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
Mark Castle
Знающий
 
Регистрация: 04.10.2008
Адрес: Киев
Сообщений: 230
Написано 3 полезных сообщений
(для 3 пользователей)
Ответ: Помогите оптимизировать ф-ю

и где ж мне его так надо написать?
__________________
...мама я больше не буду!
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com