forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Полезные функции (http://forum.boolean.name/forumdisplay.php?f=17)
-   -   очень маленькие хинты (http://forum.boolean.name/showthread.php?t=3670)

Taugeshtu 17.06.2007 22:52

очень маленькие хинты
 
Предлагаю в этой теме выкладывать то, что под определение функции не попадает ввиду своих малых размеров, но тем не менее способно принести ощутимую пользу.
С вашего позволения, я начну.

ФПС - это очень больной вопрос, и не секрет, что многие ищут способы его увеличения. предлагаю вашему вниманию следующий ФПС-бустер:
вертикальная синхронизация - это эффект, позволяющий добиться совпадения обсчёта сцены и обновления экрана. если она выключена, могут наблюдаться некоторые артефакты. А могут и не наблюдаться. Если же она включена, то заветный ФПС не поднимется выше частоты обновления экрана, которая обычно составляет 60-70Гц.
Вся радость жизни в том, что по умолчанию она в блитце включена, а вот как ее выключить знают не все. Меж тем делается это просто - надо вместо:
Flip
писать:
Flip false
или
Flip (0)

вот и всё - наслаждайтесь приростом фпс!

был бы крайне признателен, если бы кто-нибудь написал про рендер твининг.

SBJoker 17.06.2007 23:31

Re: очень маленькие хинты
 
Рендер твининг, это технология позволяющая стабилизировать скорость анимации моделей.
Для этого нужно юзать необязательный параметр твин, а сам параметр этот это число float являющееся отношением текущей скорости к необходимой, другими словами текущий_фпс/требуемый_фпс.

Например мы хотим чтоб анимация щла на скорости 75 фпс, а у нас сейчас видяха выдаёт тока 30, то твин коэффициент равен 30/75 = ~0.5 вот и всё...

Этот коэфицент передавать в функции UpdateWorld и RenderWorld

Однако RenderWorld часто начинает глючить почём зря с твинингом в частности мерцают объекты с альфа-каналом.

HolyDel 18.06.2007 01:17

Re: очень маленькие хинты
 
параметр UpdateWorld - ето множитель скорости моделей, например updateworld 2 - вся анимация будет играться в два раза быстрее.
тогда (теоретически, сам не проверял) для стабилизации скорости анимации проигрывания моделей можно сделать так:
updateworld требуемый_фпс/текущий_фпс.

mod 1 - вернет дробную часть числа (спасибо Impersonalis-у)

a=b=4 - присваивает переменной a 1-цу, если b равен 4 и 0 если неравен (многие ето знают но немногие пользуются).

еще пример, ето можно использовать и в математических выражениях, например
for i=1 to 100
if a(i)=5 then b(i)=0 else b(i)=10
next
можно заменит на:
for i=1 to 100
b(i)=(a(i)=5)*10
next

tormoz 10.01.2008 02:52

Ответ: очень маленькие хинты
 
Код:

entity=EntityCollided(hero,enemy_type) Or EntityCollided(hero,bild_type) Or PickEntity(hero,10)
Очень удобные конструкции облегчающие жизнь

alcoSHoLiK 10.01.2008 03:14

Ответ: очень маленькие хинты
 
Циклический счетчик. Переменная a будет изменяться в пределах от 0 до RANGE - 1.
Код:

a% = 0
;...
a = (a + 1) mod RANGE

Если у RANGE в двоичном представлении n младших разрядов равны единице без пропусков, можно сделать так:
Код:

const RANGE% = 31    ; 00011111b
a% = 0
;...
a = (a + 1) and RANGE


dimond 12.01.2008 02:59

Ответ: очень маленькие хинты
 
меняет цвет при условии
Код:

Color (health<25)*255,(health>=25)*255,0:text 0,0,health
у меня идея, упрощение кода донельзя
если я изобрел велосипед, скажите.

impersonalis 12.01.2008 03:09

Ответ: очень маленькие хинты
 
+ http://forum.boolean.name/showthread.php?t=275

-=SCiP=- 14.01.2008 01:22

Re: очень маленькие хинты
 
Незнаю такое кто мож уже знает. Но всеже выкладываю.

a=5
b=5
Условие ИЛИ
;If (a Or b)=5 Then ;ИЛИ
Условие И
If (a And b)=5 Then ;И
Print "Yes"
Else
Print "no"
EndIf
WaitKey

moka 21.01.2008 19:22

Ответ: очень маленькие хинты
 
Ещё и так можно:

;If a=5 Or b=10 Then ;ИЛИ
Условие И
If a=5 And b=10 Then ;И
Print "Yes"
Else
Print "no"
EndIf
WaitKey

alcoSHoLiK 21.01.2008 21:43

Ответ: Re: очень маленькие хинты
 
Цитата:

Сообщение от -=SCiP=- (Сообщение 74240)
Условие ИЛИ
;If (a Or b)=5 Then ;ИЛИ
Условие И
If (a And b)=5 Then ;И

Это побитовое ИЛИ и И. Если a = 1, b = 4, первое выражение будет истинно. Если a = 5, b, например, равно 255, второе условие также будет истинно.

dimond 10.02.2008 02:11

Ответ: очень маленькие хинты
 
Код:

Global Click%
Function MouseClick(n%)
        If MouseDown(n) Then
                Click=True
        EndIf
        If Click=True Then
                If Not MouseDown(n) Then
                        If Not MouseHit(n) Then
                                Click=False
                                Return True
                        EndIf
                EndIf
        Else
                Return False
        EndIf
End Function

Функция срабатывает от отпускания мыши, как в windows-кнопках.
Очень удобно, если MouseHit() не всегда срабатывает, а применение MouseDown() неприменимо.

moka 10.02.2008 07:54

Ответ: очень маленькие хинты
 
Функция такого рода называется MouseRelease, т.к. обработка инпута происходит отдельным потоком, то употребление функций получения инпута, за один так главного цикла - не наилучший способ получения данных о нажатиях, т.к. хоть и мала вероятность отпустить мышь между двумя связанными MouseDown, но она есть, и ловил я её не раз. По этому очень рекомендую привязывать к Глобальным переменным, в Начале цикла Весь инпут (мышь, клаву, кнопки, координаты, и скорости, всех видов инпута, которые обрабатываются паралельным потоком).

dimond 11.02.2008 02:12

Ответ: очень маленькие хинты
 
Думаю, что проверка на MouseHit() будет лишней. я ее вписал на всякий случай, но походу работает и без нее.

Alex_Noc 22.06.2008 00:23

Ответ: очень маленькие хинты
 
Вот такая конструкция вернет значение после отрицания :
num#=-2.3
if keyhit (but) then num#=(not num#)*-2.3
значение модет быть любым абсалютно.

ffinder 08.07.2008 15:09

Ответ: очень маленькие хинты
 
1. EntityCollided и другие функции коллизий в Блице не будут работать без UpdateWorld в главном цикле. Справка не врет.
2. справка по функции Blitz3D DocsEntityBox(ent, x,y,z, w,h,d) ничего не говорит о координатах x,y,z - а это на самом деле не центр, а крайний угол параллелепипеда... Иногда справка не врет, а не говорит всю правду;-)


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

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