forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Болтовня (http://forum.boolean.name/forumdisplay.php?f=25)
-   -   AudioSoft на Blitz'е (http://forum.boolean.name/showthread.php?t=389)

Kain 18.12.2005 07:37

млин фсё хотел уже пробовать игрушку креетить, вышел облом я не смог сделать поле 8х8 объемное ну вроде как шахм доска..... :SOS:

jimon 18.12.2005 12:42

как мы преобразовываем квадрат 1*1 в то что нам надо ? множим стороны на k

тоесть реальные координаты на екране будут такие

ето координаты верхнего левого угла :
x_real_start = x_in_dim * k
y_real_start = y_in_dim * k

ето координаты нижнего правого угла :
x_real_end = (x_in_dim+1) * k
y_real_end = (y_in_dim+1) * k



если k будет к примеру 20 то получится что квадратики со стороной 20 будут :)

а как проверять ?
Код:

if mousex() > (x_in_dim * k) and mousex()<((x_in_dim+1)*k) and mousey()>(y_in_dim * k) and mousey()<((y_in_dim+1)*k) then
....
end if

главное смотреть чтобы x_in_dim и y_in_dim невышли за рамки массива, я лично непарился и делел массив больше :)

ps. у тебя постановка задачи неправильная, или мышление неправильное :) небойся, с опытом приходит
ps2. найди какой нибудь пример простенькой игрушки, и попытайся зделать чтонибудь наподобе нее, если неполучается - смотри как делали в игре ;)

Kain 18.12.2005 20:44

Фсе окончательно запутался с етими координ.,
Какие ед изм в Blitz'e а то не пойму: конус одно, картинка вроде уже в пикселях, ни че не понимаю как их соединить ?
PS Спасибо за терпение...

jimon 18.12.2005 23:05

измерения в блице - mouse получается в пикселях :)
и все

поставь задачу толком, и скажи в чем проблемма... помогу :)

Kain 19.12.2005 07:43

попробую подготовить вопрос, а вообще чё получается за то и хватаюсь чёб не топтаться на одном месте, поетому и вопросы такие не связанные...
тенкс

Kain 31.12.2005 03:25

Вложений: 1
jimon слушай подскажи че-нить можно с етим кодом сделать,
а то мне совсем не нравятся такие проблемы в начале пути.
Код:

Graphics3D 1024,768,32,1
SetBuffer BackBuffer()
Global fntArial=LoadFont("Arial",22)
SetFont fntArial
Global cam_pivot=CreatePivot()
        PositionEntity cam_pivot,10,0,10
        cam=CreateCamera(cam_pivot);камера
 PositionEntity cam,-15,15,-30
        light=CreateLight();свет
 LightColor light,255,255,255
 RotateEntity light,90,0,0

Global sph=LoadTexture("star.jpg")       
;Dim pole(7,7)

        For ty=0 To 7
 For tx=0 To 7
        sphere=CreateSphere(16)
        EntityTexture sphere,sph
        PositionEntity sphere,tx*3,0,ty*3
 Next
        Next
        While Not KeyHit(1)

 If KeyDown(200)=True        Then
        p$="Вверх"
        rot_c=rot_c+1
 EndIf
 If KeyDown(208)=True Then
        p$="Вниз"
        rot_c=rot_c-1
 EndIf
 If KeyDown(203)=True Then
        p$="Влево"
        yaw#=-3
 EndIf
 If KeyDown(205)=True Then
        p$="Вправо"
        yaw#=3
 EndIf
        TurnEntity cam_pivot,0,yaw#,0
 RotateEntity cam,rot_c,-20,0
 yaw#=0

        RenderWorld
; Text 10,51,"Box at 100,100 is RGB:" + ColorRed() + "," + ColorGreen() + "," + ColorBlue() + "!"
 Text 10,11,"Стрелка  " + p$
; Text 10,31,"index " + index
 Text 10,51,"FPS: "+MaxFPS + " FPS=" +FPS

        Flip()
        FPS=FPS+1       
 If mFPS<MilliSecs() Then
        mFPS=MilliSecs()+1000
        MaxFPS=FPS
        FPS=0
 EndIf       
        Wend
End

заодно прикреплю файлик(там бб и картинка(спрайт от ракеты)
Так вот проблема в FPS , а точнее в их кол-ве 7шт
у меня P2-434Мгц 16Video,128ram
ну не правильно что при создании 64 сфер обтянутых шкуркой,
такой загруз должен быть(даже на моём железе)
наверно можно по другому, но как ?
посему прошу наставлений...

:rolleyes: или Blitz простые вещи, тоже делает через не туда ? :)

jimon 31.12.2005 12:54

у тебя щетчик fps кривой до невозможности - и непашет
юзай мой :)

Код:

Graphics3D 800,600,32,2
SetBuffer BackBuffer()

Global fntArial=LoadFont("Arial",22)
SetFont fntArial
Global cam_pivot=CreatePivot()
        PositionEntity cam_pivot,10,0,10
        cam=CreateCamera(cam_pivot);êàìåðà
 PositionEntity cam,-15,15,-30

        light=CreateLight();ñâåò
 LightColor light,255,255,255
 RotateEntity light,90,0,0

        Global fps_buffer1%,fps_buffer2%,fps%

        Function fps()
        fps_buffer1%=fps_buffer1%+1:If MilliSecs()-fps_buffer2%>1000 Then:fps_buffer2%=MilliSecs():fps%=fps_buffer1%:fps_buffer1%=0:End If
        End Function

Global sph=LoadTexture("star.jpg")       

        sphere=CreateSphere()
;        HideEntity sphere

        For ty=0 To 7
 For tx=0 To 7
        sphere2=CopyEntity(sphere)
        EntityTexture sphere,sph
        PositionEntity sphere,tx*3,0,ty*3
 Next
        Next

        While Not KeyHit(1)

        fps()

 If KeyDown(200)=True        Then
        p$="Ââåðõ"
        rot_c=rot_c+1
 EndIf
 If KeyDown(208)=True Then
        p$="Âíèç"
        rot_c=rot_c-1
 EndIf
 If KeyDown(203)=True Then
        p$="Âëåâî"
        yaw#=-3
 EndIf
 If KeyDown(205)=True Then
        p$="Âïðàâî"
        yaw#=3
 EndIf

        TurnEntity cam_pivot,0,yaw#,0
        RotateEntity cam,rot_c,-20,0

        yaw#=0

 UpdateWorld
 RenderWorld
 Text 10,11,"Ñòðåëêà  " + p$
 Text 10,51,"FPS: "+fps

        Flip 0

        Wend
End

сорри руский текст в коде затрется - думаю для тебя непроблема востановить ? :(

ps. у меня ~560 - 600 фпс
проблемма была в том что ты создавал каждый раз новую сферу, да притом такую большую (помойму 256 полигонов в каждой)

и flip 0 надо ставить
и разрешение екрана лутче ставить 800*600 и в оконом режиме

Kain 07.01.2006 00:17

Вложений: 1
такая проблемка при кликах на правую кнопку мыши мерцает екран
(т.е. как будто один кадр смещен - "кадры бегут")
код не много урезан для форума, целиком в архиве
Код:

...
        While MouseDown(2); вращение игрового поля
 *
 *xs=MouseXSpeed()
 *If *GraphicsWidth() -1 <= MouseX() Then;переход границ экрана
 *        MoveMouse GraphicsWidth()-MouseX(),MouseY()       
 *        Else If MouseX() =< 0 Then
 *        MoveMouse GraphicsWidth() -1,MouseY()
 *End If
 *If *GraphicsHeight() -1 <= MouseY() Then
 *        MoveMouse MouseX(),GraphicsHeight()-MouseY()
 *        Else If MouseY() <= 0 Then
 *        MoveMouse MouseX(),GraphicsHeight()-1
 *End If *
 *rot_y=0
 *If xs<0 Then rot_y=rot_y+(2-xs/30)
 *If xs>0 Then rot_y=rot_y-(2+xs/30)
 *If xs<>0 Then *
 *        TurnEntity cam_pivot,0,rot_y,0
 *End If
 *fps()
 *UpdateWorld
 *RenderWorld
 *shinfo()
 *Flip
        Wend
End Function
....

и если подвигать мышкой, а затем нажать пр.кнопку то возможен поворот поля,
вроде обнуляю переменную(rot_y) только перед расчетами нового значения
в чем дело ?
еще - я использую функцию fps() и shinfo() в двух места ето коректно? ,
просто ето когда зажата кнопка мыши чеб вся инфа обновлялась, может я не грамотно распологаю код

PS кстати jimon насчет щетчика fps ты перебрал ето не мой(с форума)
во вторых показания примерно одинаковые (возможно на больших измерениях будет по другому у меня 25-30fps(434Мгц)после апгрейта проверю , так чё еще обсудим
объясни что дает flip 0
и моя проблема вроде (но 100% не говорю) была в большом количестве сегментов
(полигонов) сферы, flip и разрешение,режим екрана - больших скочков не давали

jimon 07.01.2006 14:57

обычно делают так :
Код:

Function povorot()

        zs#=MouseZSpeed ()       
        If MouseDown(3)=True Then zoom#=1
        If ZS=-1 Then zoom#=zoom#+0.1
        If ZS=1 Then zoom#=zoom#-0.1
        If zoom#<0.5 Then zoom#=0.5
        If zoom#>1.5 Then zoom#=1.5
 CameraZoom cam,zoom#
 
       

        If MouseDown(2) Then; âðàùåíèå èãðîâîãî ïîëÿ
 
 xs=MouseXSpeed()

 rot_y=0
 If xs<0 Then rot_y=rot_y+(2-xs/30)
 If xs>0 Then rot_y=rot_y-(2+xs/30)
 If xs<>0 Then
        TurnEntity cam_pivot,0,rot_y,0
 End If
       
        End If

        MoveMouse 400,300

        fps()
        UpdateWorld
        RenderWorld
        shinfo()
        Flip 0

End Function

400,300 - ето расширение екрана поделить на два .. просто мне влом было писать graphicswidth()/2 и тд :)

flip 0 рисует кадр без вертикальной синхронизации
тоесть есть писать flip до количество кадров в секунду ограничится частотой обновления екрана (у меня 100 герц к примеру)

impersonalis 07.01.2006 19:09

Писать надо: graphicswidth()*0.5
подробнее тут: http://community.boolean.name/index.php?showtopic=122

Kain 07.01.2006 20:34

impersonalis
Цитата:

Писать надо: graphicswidth()*0.5
подробнее тут: http://community.boolean.name/index.php?showtopic=122

между прочим ето я уже прочитал, и у меня не подтвердилось: / чуть-чуть выигрывало,
доберусь до оптимизации игры пообщаемся,ты бы лучше на письмо ответил !!!
Если совсем не понятен вопрос в письме , то кратко будет так :
" Вы можете из_менять код форума ? "
или по теме прокоментировал ,потому как я не понял почему кадры прыгали то

jimon так и не понял чё делает етот ноль (у меня тоже 100 Гц 1024*768 17" )
я так понял ты ответил на "MouseDown(2)" -- помогло
помнишь спрашивал про то как определить объект с помощью мышки
так вот ты вроде тогда мне про 2D писал, а 3D -- EntityZ(X,Y) пойдет ?

PS impersonalis как ты нашел не документированые функции ? и есть ли ещё ?

SubZer0 07.01.2006 20:41

Цитата:

Originally posted by Kain@Jan 7 2006, 07:34 PM
Если совсем не понятен вопрос в письме , то кратко будет так :" Вы можете из_менять код форума ? "
отвечу я, поскольку за функциональность скриптов отвечаю я: да, мы можем изменять код форума и вслучае если много пользователей будут чем-то недовольны, то код будем менять, по желанию одного человека код изменен не будет...

отдельно для каждого конкретного пользователя код изменить невозможно,можно конечно создать отдельный скин и только для конкретного пользователя, и в нем натворить изменений, но на такое у меня нет если честно ни времени ни желания...

:)

PS у нас, кстати, есть раздел по форуму, где можно высказать свои предложения (тут)... в случае недовольства реакцией администрации, можно отписаться тут...

:) :)

impersonalis 07.01.2006 21:18

ответ на твой вопрос про flip 0 смотри на этой странице:
http://community.boolean.name/index.php?showtopic=52
|кнопка поиска в правом верхнем углу ;) |
Я лично недокументированные команды не находил, а читал о них в других источниках. /немецких энтузиастов и проч./

jimon 07.01.2006 23:42

выбор 3д обекта можно делать через :
entitypickmode entity,2
camerapick (помойму так пишется комманда)
короче - ета камера возвращает ссылку на обект который находится на екране в заданых координатах :)

Kain 08.01.2006 17:30

Извиняй проворонил твоё день варенье,тебе уже много нажелали поетому повторяться не буду (не люблю)
С днем рождения !!! !!! !!!
кстати у моего брата день варенье через 1 мес и 10 дней

Kain 08.01.2006 17:42

Вопрос на завтра, почему ? действие:
1)после отпускания пр.кнопки мыши
2)поюлозить ей по екрану
3)зажимаю (и прижимаю её к стлоу) (мышку)
4)нажимаю пр.кнопку
5)происходит поворот поля
????????
Код:

While Not KeyHit(1)
        fps()
        povorot()
        UpdateWorld
        RenderWorld
        shinfo()
        Flip
        Wend
End
;*************************Function************************

Function povorot()
 zs#=MouseZSpeed ()       
        If ZS=-1 Then zoom#=zoom#+0.1
        If ZS=1 Then zoom#=zoom#-0.1
        If zoom#<0.5 Then zoom#=0.5
        If zoom#>1.5 Then zoom#=1.5
        If MouseDown(3)=True Then zoom#=1
 CameraZoom cam,zoom#
; xs=0

        If MouseDown(2) Then; вращение игрового поля
 
 xs=MouseXSpeed()
; ys=MouseYSpeed ()
 If GraphicsWidth() -1 <= MouseX() Then;переход границ экрана
        MoveMouse GraphicsWidth()-MouseX(),MouseY()       
        Else If MouseX() =< 0 Then
        MoveMouse GraphicsWidth() -1,MouseY()
 End If
 If GraphicsHeight() -1 <= MouseY() Then
        MoveMouse MouseX(),GraphicsHeight()-MouseY()
        Else If MouseY() <= 0 Then
        MoveMouse MouseX(),GraphicsHeight()-1
 End If
 rot_yl=rot_y
 rot_y=0
 If xs<0 Then rot_y=rot_y+(2-xs/30)
 If xs>0 Then rot_y=rot_y-(2+xs/30)
; If ys<0 Then ya=ya+(1-ys/50)
; If ys>0 Then ya=ya-(1+ys/50)
 If xs<>0 Then
        xsl=xs
        TurnEntity cam_pivot,0,rot_y,0
 End If

        End If
End Function

Function shinfo()
        Text 10,11,"XS  " + xsl+"Y  " +rot_yl
        Text 10,51,"fps: "+fps +"  Zoom=  " +zoom#
End Function

Function fps()
        fps_buffer1%=fps_buffer1%+1
        If MilliSecs()-fps_buffer2%>1000 Then:fps_buffer2%=MilliSecs():fps%=fps_buffer1%:fps_buffer1%=0:End If
End Function

и ещё переменные xsl и rot_yl всегда показывают НОЛЬ


про Flip, пытаюсь понять читаю не последний раз, надеюсь догнать
про твою работу потом подумаем(ты же наверно хочешь програмить?)...

Kain 08.01.2006 17:53

impersonalis дай ссылку на етих энтузиастов (плиз.) :rolleyes: :rolleyes:

impersonalis 08.01.2006 21:29

http://www.chat-blitz.de/forum
http://www.project-blitz.chat-blitz.de/ind...p?page=tutorien
к примеру, ну и конкретные представители новости сообщают частенько.

jimon 08.01.2006 22:08

(я щас немног нетрезвый)
вынеси смещение мышки в общий цыкл

я об етом:
If GraphicsWidth() -1 <= MouseX() Then;переход границ экрана
MoveMouse GraphicsWidth()-MouseX(),MouseY()
Else If MouseX() =< 0 Then
MoveMouse GraphicsWidth() -1,MouseY()
End If
If GraphicsHeight() -1 <= MouseY() Then
MoveMouse MouseX(),GraphicsHeight()-MouseY()
Else If MouseY() <= 0 Then
MoveMouse MouseX(),GraphicsHeight()-1
End If

Kain 09.01.2006 03:00

Да зря просил после того как увидел немиш сразу перехотел , я и с английским не дружу а тут и не он!!! потом может как нить.....(думал фигня что даже не англицкий)
Но фсе равно пасибо .

Kain 09.01.2006 21:46

jimon
Цитата:

вынеси смещение мышки в общий цыкл
Не помогло (и в цикл функциии и общий, ладно потом разберемся) :dontknow:

jimon 09.01.2006 22:36

я же тебе написал как делать через movemouse на центр екрана... чем тебя тот вариант неустраивал ?

Kain 10.01.2006 10:40

попробую,но вообще-то я хотел разобраться, :rolleyes:
я счас уберу: про переход екрана и смещение мыши.
там ведь есть две переменные которые должны очищать значения... :dontknow:

Kain 11.01.2006 01:41

вроде решил проблемы :
movemouse вроде не подходит (буду думать),
1)её надо ставить после MouseXSpeed (),
иначе скорость поворота = 0
2)я буду использовать перемещение мышы(будет ченить передвигать(курсор),
делать ходы,срабатывать при наведении...)
возможно в функции пр.кнопки буду запоминать тек.коор.,
а при выходе возвращать на место(но помойму ето не логично)

способ который использовал я вроде етих минусов не имеет
(хотя могут быть другие - не знаю, это же начало)
но тебе тенкс :bravo: ,так ты меня заставляешь думать по другому
(я увидел что, ни твой, ни мой, способ не влияет на ситуацию...хотя
изночально надо было смотреть с другого конца т.к. происходил TurnEntity
надо было разбираться кто дал ему право,быстрее бы исправил ошибку
я эту ошибку называю "не явную" т.к. пока не могу на
лету исправлять логич ошибки :)

пока что и movemouse и мой способ используется что б не достигнуть край экрана(тупик) при повороте поля

нули были в переменных т.к. они были локальными (когда сделал глоб. , нашел как все исправить
кстати команда(или как правильнее - функция ? поправь) movemouse
делает как бы физич. смещ. мыши т.е. MouseXSpeed ()
подпрыгивало до 500-600(ето на моем железе) , я вручную разгонял до 400 с хвостиком

сейчас начну пробовать camerapick...уже чувствую вопросов не избежать B)

Kain 12.01.2006 01:39

можно ли это как-нибудь упростить
Код:

Function effect()
        CameraPick(cam,MouseX(),MouseY())
        If *(PickedEntity()<>0) And (Picked=0)
;1а)часть: мышь над шариком ,подсветили шарик (фокус) с0наШ
 *Picked=PickedEntity()
 *EntityColor Picked,120,255,120
        End If *
        If *((PickedEntity()=0) And (Picked<>0))Or((PickedEntity()<>0) And (Picked<>PickedEntity()))
;1б)часть: мышка не над шариком (фокус потерян) *сШна0
;2б)часть: мышка не успела соти с шарика и уже над другим шариком *сШ1наШ2
;(новый фокус,без потерь) снимаем подсветку PS(вместо подсветки -функция)
 *EntityColor Picked,255,120,120
 *Picked=0
        End If *
End Function

основное это условие...

jimon 12.01.2006 23:48

пишу прямо на форуме ...
Код:

Function effect()
CameraPick(cam,MouseX(),MouseY())
If (PickedEntity()<>0) And (Picked=0)
;1а)часть: мышь над шариком ,подсветили шарик (фокус) с0наШ
 Picked=PickedEntity()
 EntityColor Picked,120,255,120
If PickedEntity()<>0 then
;1б)часть: мышка не над шариком (фокус потерян) сШна0
;2б)часть: мышка не успела соти с шарика и уже над другим шариком сШ1наШ2
;(новый фокус,без потерь) снимаем подсветку PS(вместо подсветки -функция)
 EntityColor Picked,255,120,120
 Picked=0
End If
end if
End Function

я не знаю... но по идее должно работать

Kain 13.01.2006 03:26

Ты здесь поспешил,я сразу заметил,но запустил на всякий случай....(не работает)
первое условие If (PickedEntity()<>0) And (Picked=0) выполняется только один раз (затем false)
т.к. Picked=PickedEntity() ето делает
второе условие выполняется если только :
1) если 1-ое усл. true ,
2) оно истино по той же причине что и первое PickedEntity()<>0

так чё ты допустил тонну ошибок,следующий раз не спеши, я подожду

Теперь ещё проблема как узнавать кому какой PickedEntity()
принадлежит, добавил фону EntityPickMode pl,2 и теперь
он тоже меняет цвет вместе с шариками

jimon 13.01.2006 22:08

всмысле кому какой PickedEntity() ?

Kain 14.01.2006 15:01

Код:


Global pl=CreatePlane(1);поле
;        Global bg_tex=LoadTexture("bg.bmp");текстура поля
        EntityColor pl,10,20,60
;        EntityTexture pl,bg_tex;применить текстуру
        PositionEntity pl,0,-6,0
 EntityPickMode pl,2

и здесь
Код:

Global sphere=CreateSphere()
EntityPickMode sphere,1

а затем функция
Код:

Function effect()
        CameraPick(cam,MouseX(),MouseY())
        If (PickedEntity()<>0) And (Picked=0)
        ;1а)часть: мышь над шариком ,подсветили шарик (фокус) с0наШ
 Picked=PickedEntity()
 EntityColor Picked,120,255,120
        End If
        If ((PickedEntity()=0) And (Picked<>0))Or((PickedEntity()<>0) And (Picked<>PickedEntity()))
        ;1б)часть: мышка не над шариком (фокус потерян) сШна0
        ;2б)часть: мышка не успела соти с шарика и уже над другим шариком сШ1наШ2
        ;(новый фокус,без потерь) снимаем подсветку PS(вместо подсветки -функция)
 EntityColor Picked,255,120,120
 Picked=0
        End If
       
End Function

изменяет цвет: фона(не надо) и шариков(надо)
а потом ещё будут элементы,как их разделять...

jimon 14.01.2006 16:21

у тебя есть handle всех обектов :)
pickedentity() возвращает тебе обект
вот и сравнивай... главное разумно ето зделать

Kain 16.01.2006 03:58

Не совсем по теме, (решил отвлечься):
как подключить dll
а то я пример хочу посмотреть,
но нужно добавить её самую.
рядом с файлом положил,а вот чё дописать ну
никак не доходит(отрывок из примера,вроде указания)
Код:

;--------------------------------------------------------------
; Add to winmm.decls (or create) in userlib directory
;
;.lib "winmm.dll"
;winmm_PlaySound%(lpszName%,hModule%,dwFlags%):"PlaySoundA"
;winmm_StopSound%(lpszName%,hModule%,dwFlags%):"PlaySoundA"

;--------------------------------------------------------------

в таком состоянии ошибка, об отсутсвующей функции

и как ***.decls пользоваться ?
если можешь опиши подробно :rolleyes:

PS зачем ипользуется знак процента(по умолчанию итак integer)

Kain 20.01.2006 08:55

С dll почти разобрался.....
Ладно что -то скучно стало, зайду попозже......

alcoSHoLiK 20.01.2006 09:48

В данном случае тот фрагмент, что ты привел выше, нужно сохранить в decls-файле и поместить его в папку Userlibs (она находится в папке с установленным Блицом).

Код:

;.lib "winmm.dll"
;winmm_PlaySound%(lpszName%,hModule%,dwFlags%):"PlaySoundA"
;winmm_StopSound%(lpszName%,hModule%,dwFlags%):"PlaySoundA"

В этих трех строчках нужно убрать символ ; в начале строки. Знак % показывает, что функция возвращает целое значение. Если его пропустить, это вызовет ошибку.

P.S. Сегодня вечером подробно напишу об этом в FAQ.

Kain 22.01.2006 02:22

Тенкс , но поздно.....


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

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